前言

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

先看完:

平面设计 – 字体

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. [oeasy]python0072_自定义小动物变色_cowsay_color_boxes_asciiart

    修改颜色 回忆上次内容 上次搞的是 颜色 前景颜色 总共有 7 种基本色 还有什么 好玩的 么? 可以 给小动物 上色 吗? 配合 先将cowsay结果 输出重定向 sudo apt install ...

  2. LM Studio + open-webui 快速本地部署大语言模型

    目录 一.前言 二.环境准备 三.安装设置 四.下载模型并运行 五.配置 open-webui 写在结尾 一.前言 自 OpenAi 发布 ChatGPT 对话性大语言模型,AI 这两年发展迎来爆发, ...

  3. 【工具】SpringBoot项目如何查看某个maven依赖是否存在以及依赖链路

    当我在SpringBoot项目中想加个依赖,但是不确定现有依赖的依赖的依赖.....有没有添加过这个依赖,怎么办呢?如果添加过了但是不知道我需要的这个依赖属于哪个依赖的下面,怎么查呢? IDEA中提供 ...

  4. 解决 IIS Express 启动错误:“拒绝访问”问题

    报错 Starting IIS Express ... stderr: Failed to register URL "http://localhost:8378/" for si ...

  5. WordPress基础之基本SEO设置

    基础内容,不会涉及过深,在谷歌SEO教程中会做详细的介绍,我这里只简单讲下. 1. SEO介绍 SEO,又名搜索引擎优化(Search Engine Optimization,缩写为SEO)是透过了解 ...

  6. Python获取指定网段正在使用的IP

    Python获取指定网段正在使用的IP #!/usr/bin/env python # -*- coding: utf-8 -*- ''''' 使用方法样例 python test20.py 192. ...

  7. app专项测试:app弱网测试(网络测试流程)

    app专项测试:app弱网测试(网络测试流程) 一.网络测试的一般流程 step1:首先要考虑网络正常的情况 ① 各个模块的功能正常可用 ② 页面元素/数据显示正常 step2:其次要考虑无网络的情况 ...

  8. YouTube上的很多时视频就是有问题的,还经常不允许评论,妥妥的双标网站

    过多的事情不说了,这些个外国反华势力的网站真是无时无刻的不在视频中加私货,你想评论吧他还能判断你的个人价值观来预估你的评价倾向然后禁止你评价,十分的气人.要是立场不够坚定的人真的是很容易被带偏,像这种 ...

  9. 键盘中上、下、左、右四个光标键所对应的ASCII码值为多少

    首先给出ASCII码值表: 上.下.左.右这四个光标键对应的ASCII码值不是一个值而是三个,准确的说光标键的ASCII码值是一个组合. 每个方向键所对应的三个键值为:0x1b + 0x5b + n ...

  10. [JLOI2015] 城池攻占 题解

    前言 题目链接:洛谷. 题目分析 其他人要么倍增,要么左偏树,那我就来讲讲朴实无华的 dfs 序加上线段树的做法. 首先发现题目中明确指出了作乘法的时候一定是乘上一个大于零的数,这是为什么呢?首先把可 ...