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(三)>中,一个页面基本上展示出来了!下面实现以下页面上的一些功能,比方批量删除等功能.这里以批量删除为例,批量禁止,批量启用和批量删除差不多,只不过一 ...
随机推荐
- WebGL实践之半透阴影
楔子 相信很多人都知道,通过ShadowMap可以产生阴影,通过渲染阴影可以增加场景渲染的对比度,增加渲染的真实效果. 如下图所示: 但是对于透明或者半透明的对象,WebGL在处理阴影效果的时候,会把 ...
- 创建数据库时排序规则utf8_general_ci与utf8_bin的区别
在MySQL数据库中,字符集(如utf8)定义了字符如何存储,而排序规则(Collation)则定义了字符如何比较.排序和区分大小写.utf8_general_ci和utf8_bin是两种常用的UTF ...
- 构建基于Java Spring Boot和Uniapp的心理小程序:从零到一的完整指南
构建基于Java Spring Boot和Uniapp的心理小程序:从零到一的完整指南 前言 大家好,今天我们来聊聊如何使用Java Spring Boot和Uniapp构建一个心理小程序.这个项目不 ...
- Docker 容器开发:虚拟化
Docker 容器开发:虚拟化 Docker 的核心价值在于虚拟化或者说环境隔离[通过虚拟化技术实现虚拟环境],解决环境配置和部署的依赖问题实现解耦 我对虚拟化的理解源自<Operating S ...
- elementui中实现loding实现局部加载,以el-dialog为例
效果 封装loading加载(也可以直接使用,封装为了方便多次调用) 组件定义:loadDiy.js import { Loading } from "element-ui"; e ...
- Jmeter函数助手33-split
split函数用于根据分隔符拆分传递给它的字符串,并返回原始字符串. String to split:填入需要转换的字符串 函数名称.用于存储在测试计划中其他的方式使用的值:存储结果的变量名 Stri ...
- 【RabbitMQ】08 深入部分P1 可靠性投递
1.消息投递确认 这里的代码延用了06的东西: https://www.cnblogs.com/mindzone/p/15374684.html 删除之前的整合案例,重新写了一份案例的队列和交换机配置 ...
- 【JS】02 基础语法
JS的引入方式: 第一种: 就是我们在HTML标签中使用script标签,然后在这个标签中可以书写JS代码 type="text/javascript" 可以不用写,浏览器会根据 ...
- 【Vue】Re14 Router 第一部分(入门案例)
一.箭头函数(Lambda匿名函数) <!DOCTYPE html> <html lang="en"> <head> <meta char ...
- 【转载】英特尔CEO:如果美出口管制太严,中国就必须生产自己的芯片
原文地址: https://mbd.baidu.com/newspage/data/landingsuper?context={"nid"%3A"news_9816136 ...