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(三)>中,一个页面基本上展示出来了!下面实现以下页面上的一些功能,比方批量删除等功能.这里以批量删除为例,批量禁止,批量启用和批量删除差不多,只不过一 ...
随机推荐
- vscode element-plus/lib/theme-chalk/index.css报错路径找不到
vscode element-plus/lib/theme-chalk/index.css报错路径找不到 import { createApp } from 'vue' import './styl ...
- 顺序表之单链表(C实现)
// Code file created by C Code Develop #include "ccd.h"#include "stdio.h"#includ ...
- JavaScript小面试~节流
节流,当用户发出多次请求时,需要对事件进行限制,不要让事件过多触发.场景:在用户浏览页面的时候,用户拼命滚动屏幕时,控制页面滚动的事件会多次触发,会导致网络阻塞或者出现渲染差.此时需要对其进行约束.无 ...
- 在MySQL中 Truncate Delect Drop 的区别
在MySQL中 Truncate Delect Drop 的区别 面试问题: -- -- 请详细描述MySQL中TRUNCATE TABLE.DELETE FROM和DROP TABLE三个命令的区别 ...
- M1安装Anaconda遇到的问题
1. 安装时报错:"Anaconda3 is already installed in /opt/anaconda3. Use 'conda update anaconda3' to upd ...
- SQL实战从在职到离职(1) 如何处理连续查询
书接上回,最近离职在家了实在无聊,除了看看考研的书,打打dnf手游,也就只能写写代码,结果昨晚挂在某平台的一个技术出售有人下单了,大概业务是需要帮忙辅导一些面试需要用到的SQL. 回想了下,在该平台接 ...
- 支持NVIDIA GPU —— 如何运行docker环境下的Jax环境
项目地址: https://github.com/NVIDIA/JAX-Toolbox 具体的安装命令: 地址: https://github.com/NVIDIA/JAX-Toolbox/pkgs/ ...
- Linux中scanf类型匹配错误,特指scanf("%d", &c ) ,导致死循环的解决方法 —— fflush(stdin)和getchar()的使用
如题,朋友领导的孩子大学作业是个C语言编写的管理信息系统发来要我给改改,原代码的配置环境是Windows的C环境,由于10多年没有搞过Windows下的C语言了于是换上了Ubuntu18.04的系统上 ...
- Edge实验性功能中文翻译
平行下载 启用平行下载以加速下载速度.- Mac, Windows, Linux, Android #enable-parallel-downloading 已启用 临时恢复 M125 标记 临时恢复 ...
- @RequestBody中传递json里的对象,对象包含list属性,对应body里的格式
以下就是对应格式,直接复制进接口文档相关工具即可{ "userId": "88", "openCostCenterDTO": [ { &qu ...