CSS – 实战 Font
前言
这篇想整理一下在网页开发中, 字体是如果被处理的.
先看完:
CSS – word-break, overflow-wrap, word-wrap, white-space
CSS – Monospaced font & ch unit 等宽字体与 ch 单位
选 font-family
通常会选 2 款 font-family. 要形成对比嘛. 对设计没有研究的话, 最好是选一些比较 popular 的字体, 然后好读就可以了.
CSS 可以这样定义
:root {
--font-family-primary: 'Open Sans', sans-serif;
--font-family-accent: 'Montserrat', sans-serif;
}
一个主字体, 配上一个凸显字体. 这个叫 font pairing. 可以参考: fontpair
heading, button, anchor 经常会用凸显字体, p 一般就用 primary 字体.
选 font-size & scale
那么多尺寸, 怎么开始呢?
选一个 base size 和 scale 比例, base font size 通常手机是 16-18px, 电脑 18-21px,
我一般上是用 1.2 scale, 16px, 18px.
然后就会有很多尺寸出来了.
Apply font-size
有一些人会把 font-size apply 到 element tag. 比如 h1...h6, p 分别对应上面的 scale font-size.
我个人不鼓励这种做法. 因为 heading 是用来表示 semantic HTML 的, 而权重和尺寸在不同页面或许会不一致.
所以比较好的做法是分开它们. 大概这样写
<h1 class="h4">Lorem ipsum dolor sit amet.</h1>
class h4 就是一个尺寸的代名词而已.
material 3 为我们取了很多 font-size 的名字
当然也不是说要跟着它, 只是作为一个参考.
我至少会这样设置
display
headline1 - 6
body
caption
overline
body 就是 base, 然后往上下 scale. 不一定每一个就升一个 level, 我是允许阔度的, 比如 display 是 headline1 往上两个 level 是 ok 的, 只要在曲线就可以了.
scale 的目的就是尽量维持一致性而已.
CSS 可以这样定义
_base.scss
$base-font-size: 16;
$font-size-collection: (
display: 7,
headline1: 6,
headline2: 5,
headline3: 4,
headline4: 3,
headline5: 2,
headline6: 1,
body: 0,
caption: -1,
overline: -2,
); @forward './module/core' as core-* with (
$base-font-size: $base-font-size,
$font-size-collection: $font-size-collection
); :root {
--rem-ratio: 1;
--font-family-primary: 'Mulish', sans-serif;
--font-family-accent: 'Taviraj', serif;
--type-scale: 1.2;
@include core.root-font-size(); @include core.media-breakpoint-up('2xl') {
--rem-ratio: 1.2;
}
} body {
font-family: var(--font-family-primary);
font-size: var(--body);
}
_core.scss
@function px2rem($value) {
@return calc($value * 1rem / 16 * var(--rem-ratio, 1));
} // #region Design System Font Size
@function font-size-with-scale($scale-level, $base-font-size: null) {
$default-base-font-size: var(--base-font-size);
$final-base-font-size: if($base-font-size != null, $base-font-size, $default-base-font-size); $font-sizes: (
10:
calc(
$final-base-font-size * var(--type-scale) * var(--type-scale) * var(--type-scale) *
var(--type-scale) * var(--type-scale) * var(--type-scale) * var(--type-scale) *
var(--type-scale) * var(--type-scale) * var(--type-scale)
),
9:
calc(
$final-base-font-size * var(--type-scale) * var(--type-scale) * var(--type-scale) *
var(--type-scale) * var(--type-scale) * var(--type-scale) * var(--type-scale) *
var(--type-scale) * var(--type-scale)
),
8:
calc(
$final-base-font-size * var(--type-scale) * var(--type-scale) * var(--type-scale) *
var(--type-scale) * var(--type-scale) * var(--type-scale) * var(--type-scale) *
var(--type-scale)
),
7:
calc(
$final-base-font-size * var(--type-scale) * var(--type-scale) * var(--type-scale) *
var(--type-scale) * var(--type-scale) * var(--type-scale) * var(--type-scale)
),
6:
calc(
$final-base-font-size * var(--type-scale) * var(--type-scale) * var(--type-scale) *
var(--type-scale) * var(--type-scale) * var(--type-scale)
),
5:
calc(
$final-base-font-size * var(--type-scale) * var(--type-scale) * var(--type-scale) *
var(--type-scale) * var(--type-scale)
),
4:
calc(
$final-base-font-size * var(--type-scale) * var(--type-scale) * var(--type-scale) *
var(--type-scale)
),
3: calc($final-base-font-size * var(--type-scale) * var(--type-scale) * var(--type-scale)),
2: calc($final-base-font-size * var(--type-scale) * var(--type-scale)),
1: calc($final-base-font-size * var(--type-scale)),
0: $final-base-font-size,
-1: calc($final-base-font-size / var(--type-scale)),
-2: calc($final-base-font-size / var(--type-scale) / var(--type-scale)),
);
@return map-get($font-sizes, $scale-level);
}
$base-font-size: null !default;
@function base-font-size() {
@return px2rem($base-font-size);
}
$font-size-collection: null !default;
@function font-size($name) {
$level: map-get($font-size-collection, $name);
@return font-size-with-scale($level, base-font-size());
}
@mixin root-font-size() {
@each $font-size-key-value in $font-size-collection {
--#{list.nth($font-size-key-value, 1)}: #{font-size-with-scale(
list.nth($font-size-key-value, 2)
)};
}
--base-font-size: #{base-font-size()};
}
// #endregion End of Design System Font Size
上面这套是这篇学来的, 加上一点自己的小改装.
它是用 CSS Variables 来管理, 而且没有 override rem. 不像这种 :root rem 62.5%, 1rem = 10px
调用
.title {
font-family: var(--font-family-accent);
font-size: var(--headline6);
text-transform: uppercase;
font-weight: 700;
color: white;
}
如果想局部 override rem-ratio 可以这样写
.title {
font-size: core.font-size('headline6');
@include core.media-breakpoint-up('2xl') {
--rem-ratio: 2;
}
}
想要加大一号, 可以这样写
.title {
--title-font-size: var(--headline6);
--title-font-size-media: var(--title-font-size); font-size: var(--title-font-size-media, var(--title-font-size)); @include core.media-breakpoint-up('2xl') {
--title-font-size-media: calc(var(--title-font-size) * var(--text-scale));
}
}
CSS – 实战 Font的更多相关文章
- DIV+CSS实战(三)
一.说明 在上篇博客<DIV+CSS实战(二)>中,实现了头部以及Tab标签卡,下面开始实现内容区域,要实现的效果如下: 二.内容最外层的设计(边框) 给最外层加边框,并且设置高度随着里面 ...
- DIV+CSS实战(二)
一.说明 在DIV+CSS实战(一)中,已经把框架搭建起来了,现在就需要往框架里面添加内容了.需要实现的内容如下图: 二.头部的设计(全媒体订阅) 左侧是一张图片+标题 ,右侧是登录名 和上次登录的时 ...
- 前端开发css实战:使用css制作网页中的多级菜单
前端开发css实战:使用css制作网页中的多级菜单 在日常工作中,大家都会遇到一些显示隐藏类菜单,比如页头导航.二维码显示隐藏.文本提示等等......而这些效果都是可以使用纯css实现的(而且非常简 ...
- CSS 字体(font)实例
CSS 字体(font)实例CSS 字体属性定义文本的字体系列.大小.加粗.风格(如斜体)和变形(如小型大写字母).CSS 字体系列在 CSS 中,有两种不同类型的字体系列名称: 通用字体系列 - 拥 ...
- TP5.1:将外部资源引入到框架中(css/js/font文件)
为了让我们的框架形式变得更加好看,我们需要加入Bootstrap和Jq文件到框架中 1.通过Bootstrap和jq官网进行相关文件的下载 (1)Bootstrap下载地址:https://v3.bo ...
- CSS 中Font Awesome 图标(附码表)
HTML中缩放的矢量图标,您可以使用CSS所提供的所有特性对它们进行更改,包括:大小.颜色.阴影或者其它任何支持的效果. Font Awesome 传送门:http://fontawesome.das ...
- 第一天CSS实战培训及笔记及感想
首先,我很激动...... 3点了,凌晨3点了,我居然还没睡.总共不到3个小时的视频消化了6个小时,今天是培训班第一天,一下子就来高强度的讲课,整个上过基础班的都听得东倒西歪,更别说我这个没上基础班滴 ...
- CSS 权威指南 CSS实战手册 第四版(阅读笔记)
前言: 对于程序员,学习是无止境的,知识淘换非常快,能够快速稳固掌握一门新技术,是一个程序员应该具备的素质.这里将分析本人一点点不成熟的心得. 了解一门语言,了解它的概念非常重要,但是一些优秀的设计思 ...
- css中 font常用的样式属性
今天我总结一下文本常用的字体样式 1.font常用样式 1)字体类型 语法:font-family: +字体类型: 如: font-family:宋体; 2)字体大小 语法:font-size: ...
- DIV+CSS实战(四)
一.说明 在上篇博文<DIV+CSS(三)>中,一个页面基本上展示出来了!下面实现以下页面上的一些功能,比方批量删除等功能.这里以批量删除为例,批量禁止,批量启用和批量删除差不多,只不过一 ...
随机推荐
- 基于微信小程序的校园维修管理系统-开题报告参考
\n文末获取源码联系 感兴趣的可以先收藏起来,大家在毕设选题,项目以及论文编写等相关问题都可以给我加好友咨询 一.课题研究的目的和意义** 本研究开发基于微信小程序的物品维修系统,它不仅能实现专业的维 ...
- [oeasy]python0007_ print函数_字符串_display_电传打字机_程序员的浪漫
你好世界 回忆上次内容 上次 想输出 Hello world! 据说是程序猿的浪漫 键盘按键 作用 ↑ 上一条指令 ↓ 下一条指令 ← 光标 向左移动 一格 → 光标 向右移动 一格 ctrl + ...
- [oeasy]python0074_修改字体背景颜色_background_color_背景色
修改背景色 回忆上次内容 上次将asciiart和颜色一起来玩 7 种基本色 变化多端 不过到目前为止 改的 都是前景色 背景色可以修改吗? 重温参数 具体动手试试 print("\033[ ...
- AT_abc218_d 题解
洛谷链接&Atcoder 本篇题解为此题较简单做法及较少码量,并且码风优良,请放心阅读. 题目简述 给定一个平面内的 \(N\) 个点的坐标,求这 \(N\) 个点中选 \(4\) 个点可构成 ...
- Jenkins 添加Linux固定代理节点
实践环境 Jenkins 2.304 jdk-8u131-linux-x64.rpm centos-release-7-9.2009.1.el7.centos.x86_64 操作步骤 安装JDK 在预 ...
- matplotlib中渐变颜色条转CSS样式(hex格式)——同mapbox中cog的颜色条拉伸显示
matplotlib中渐变颜色条转CSS样式(hex格式)--同mapbox中cog的颜色条拉伸显示 应用场景: 1.适用于mapbox中显示cog影像时,colormap_name拉伸颜色条转换 2 ...
- 3、Git之常用命令
3.1.速查表 命令 作用 git config --global user.name 用户名 设置用户签名(昵称) git config --global user.email 邮箱 设置用户签名( ...
- 为什么自动驾驶领域发论文都是用强化学习算法,但是实际公司里却没有一家使用强化学习算法?—— (特斯拉今年年初宣布推出实际上第一款纯端到端的自动驾驶系统,全部使用强化算法,替换掉30万行C++的rule-based代码)
为什么自动驾驶领域发论文都是用强化学习算法,但是实际公司里却没有一家使用强化学习算法?-- (特斯拉今年年初宣布推出实际上第一款纯端到端的自动驾驶系统,全部使用强化算法,替换掉原有的30万行C++的r ...
- Deep Learning —— 异步优化器 —— RMSpropAsync —— 异步RMSprop
看到了一个概念,叫做异步更新优化器,也就是使用异步的方式实现deep learning中的参数优化的method,这个概念比较新奇,虽然看到的异步更新神经网络的代码比较多,但是很少见到有人单独把异步优 ...
- 简单易懂的BFS
最近学习BFS,看到许多教程都用C++内置的queue,但其实还有更简单的方法. 先了解概念:BFS与DFS不同,举个例子: 我们来用DFS遍历这棵树:A.B.D.E.G.C.F 但我们用BFS遍历这 ...