前言

这篇想整理一下在网页开发中, 字体是如果被处理的.

先看完:

平面设计 – 字体

CSS – Font / Text 属性

CSS – Font Family

CSS – word-break, overflow-wrap, word-wrap, white-space

CSS – ellipsis and line-clamp

CSS – rem, em, px

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

那么多尺寸, 怎么开始呢?

type-scale.com

选一个 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的更多相关文章

  1. DIV+CSS实战(三)

    一.说明 在上篇博客<DIV+CSS实战(二)>中,实现了头部以及Tab标签卡,下面开始实现内容区域,要实现的效果如下: 二.内容最外层的设计(边框) 给最外层加边框,并且设置高度随着里面 ...

  2. DIV+CSS实战(二)

    一.说明 在DIV+CSS实战(一)中,已经把框架搭建起来了,现在就需要往框架里面添加内容了.需要实现的内容如下图: 二.头部的设计(全媒体订阅) 左侧是一张图片+标题 ,右侧是登录名 和上次登录的时 ...

  3. 前端开发css实战:使用css制作网页中的多级菜单

    前端开发css实战:使用css制作网页中的多级菜单 在日常工作中,大家都会遇到一些显示隐藏类菜单,比如页头导航.二维码显示隐藏.文本提示等等......而这些效果都是可以使用纯css实现的(而且非常简 ...

  4. CSS 字体(font)实例

    CSS 字体(font)实例CSS 字体属性定义文本的字体系列.大小.加粗.风格(如斜体)和变形(如小型大写字母).CSS 字体系列在 CSS 中,有两种不同类型的字体系列名称: 通用字体系列 - 拥 ...

  5. TP5.1:将外部资源引入到框架中(css/js/font文件)

    为了让我们的框架形式变得更加好看,我们需要加入Bootstrap和Jq文件到框架中 1.通过Bootstrap和jq官网进行相关文件的下载 (1)Bootstrap下载地址:https://v3.bo ...

  6. CSS 中Font Awesome 图标(附码表)

    HTML中缩放的矢量图标,您可以使用CSS所提供的所有特性对它们进行更改,包括:大小.颜色.阴影或者其它任何支持的效果. Font Awesome 传送门:http://fontawesome.das ...

  7. 第一天CSS实战培训及笔记及感想

    首先,我很激动...... 3点了,凌晨3点了,我居然还没睡.总共不到3个小时的视频消化了6个小时,今天是培训班第一天,一下子就来高强度的讲课,整个上过基础班的都听得东倒西歪,更别说我这个没上基础班滴 ...

  8. CSS 权威指南 CSS实战手册 第四版(阅读笔记)

    前言: 对于程序员,学习是无止境的,知识淘换非常快,能够快速稳固掌握一门新技术,是一个程序员应该具备的素质.这里将分析本人一点点不成熟的心得. 了解一门语言,了解它的概念非常重要,但是一些优秀的设计思 ...

  9. css中 font常用的样式属性

    今天我总结一下文本常用的字体样式 1.font常用样式 1)字体类型 语法:font-family: +字体类型:    如: font-family:宋体; 2)字体大小 语法:font-size: ...

  10. DIV+CSS实战(四)

    一.说明 在上篇博文<DIV+CSS(三)>中,一个页面基本上展示出来了!下面实现以下页面上的一些功能,比方批量删除等功能.这里以批量删除为例,批量禁止,批量启用和批量删除差不多,只不过一 ...

随机推荐

  1. WordPress基础之菜单导航栏设置

    菜单是WordPress的一项重要功能,方便用户快速打开网站页面,我们通常说的网站导航栏就是菜单.菜单通常显示在网站的顶部或者底部,以Apple官网的为例: 这篇文章我们就学习下:如何添加.删除菜单: ...

  2. scratch编程作品-龙年发大财

    作品介绍: 龙年欢歌而来,带着满满的希望与勃勃生机.愿小虎鲸Scratch资源站激发您编程之路的无限灵感,让每一天都充满探索与创造的喜悦.在这吉祥如意的年份里,愿您的每一份耕耘都换来丰收的喜悦,每一个 ...

  3. 加压测试TPS上不去的性能分析

    加压测试TPS上不去的性能分析 阶梯式加压测试接口异常可能存在的原因: 压力机本身性能测试的瓶颈 分析:单机负载能力有限,如果需要模拟的用户请求数超过其负载极限,也会间接影响TPS ,可以通过进行分布 ...

  4. 使用Java对稀疏数组的压缩与还原

    稀疏矩阵的压缩与还原 稀疏数组中元素个数很少或者有大量的重复值,如果直接保存保存,会浪费很多空间,这时,就可以考虑对数组进行压缩存储. 先定义一个稀疏数组 //创建一个二维数组 11 * 11 int ...

  5. 【Java】【常用类】Comparable 可比较接口 Comparator 比较器接口

    我们需要对对象进行排序,但是对象不是像基本类型的那样,是具体的数值 如果要对对象比较,需要实现两个接口的任意一个即可 Comparable 可比较接口 Comparator 比较器接口 String包 ...

  6. 【DataBase】MySQL 07 SQL函数 单行函数其一 字符函数

    SQL函数的概念 -- SQL函数 -- 概念:类似Java的方法,将已经定义好的不再改变的逻辑语句封装在函数体内,对外提供方法的标识 -- 隐藏了实现细节,提高功能的可重用 -- SELECT 函数 ...

  7. 【ActiveJdbc】01 入门

    官方快速上手文档: https://javalite.io/activejdbchttps://javalite.io/getting_started 完整介绍: https://javalite.i ...

  8. 【Vue】Re20 VueX 第一部分(共享数据,Getters)

    一.概述 专门为VueJS应用程序开发的状态管理模式 集中式存储管理应用的所有组件的状态,按照相应的规则保证状态以一种可预测的方式发生变化 VueX也集成到了官方调试工具devtools extens ...

  9. 【Hibernate】Re01.5 API

    1.Session单表的CRUD操作 1.增加或者修改,使用同一个方法,或者下面的两个也行: 感觉多此一举... 2.删除方法,硬删除: 3.获取方法提供了两种,Get & Load get方 ...

  10. Google搜索居然也搞言论封锁

    昨天的一个blog: https://www.cnblogs.com/devilmaycry812839668/p/18334275 居然被Google搜索封禁了: 老美,你的言论自由呢???怎么到了 ...