基本排版

Posted on 2021-08-28 09:58  ${妖气}  阅读(130)  评论(0编辑  收藏  举报

CSS基本网页排版

1. 字体大小与行高

1.1 字体大小

绝大多数的浏览器默认字体大小都是 16px

1.1.1 em 单位

em 单位用于 font-size 属性时,实际上是一个相应元素继承的 font-size 缩放因子
例如,h3 元素,字型大小是 1.314*16 = 21px

虽然可以直接将 h3 字体设置成 21px,但使用 em 会更加灵活

使用 em 单位后,如果用户修改偏好中的默认字体大小,则相应元素的大小也会相应调整

1.2 % 单位

对于 font-size 属性,百分比单位可用于替代 em 单位,与 em 的计算规则完全一致

1.3 rem 单位

rem 始终基于根元素的 em 大小缩放,也就是基于 html 元素的 font-size 缩放

1.4 基于比例缩放的字型大小

标题的大小大致符合 “纯四度” 的数学比例
即上一级标题会比下一级标题的字型大小大自身尺寸的 1/4 (也就是1.3333...倍)

1.2 行高

image-20200204122230527
1.2.1 行高

指的是行盒子的总高度,还可以叫作铅空,就是排字员用来隔开字符行的铅块,CSS 中的“铅空”始终都会同时应用到行盒子的上方和下方

一般来说,行高的取值范围在 1.2 ~ 1.5 范围内
对于 x 高度比较大的字体,行间距应该稍大一些

line-height: 1.5;

line-height 设置 1.5,意思就是行高是当前 font-size 的 1.5 倍

也可以给行高设置 % 或 em,其子元素会继承的都是计算后得到的像素值

设置无单位的值就不会导致这个结果

so,如果给 line-height 设置没有单位的值,那么子元素继承的是一个系数,永远与自己的 font-size 成比例

1.2.2 垂直对齐

text-toptext-bottom 会让当前元素的内容区与父行盒子的内容区顶部或底部对齐,但只有在行内盒子的 font-sizeline-height 与其父元素不同时才会有影响

1.3 小型大写变体

font-variant 属性

可以通过值 small-caps 把英文文本转换成 “小型大写字母”,即字型和正常小写字母一样大小的大写字母

2. 版心宽度、律动和毛边

主体内容的文本行长通常是 45~75 字符,平均 66 字符
对于小屏幕,行长至少也应该有 40 字符

2.1 文本缩进与对齐

以下排版方式主要用于英文文章

默认情况下,文本是左对齐的(英文文章第一段一般不用缩进)。对于连续的段落,为了保证用户的阅读节奏,通常会给相邻段落设置 1 行的外边距,或者设置段首缩进

以下代码是使用相邻组合符设置 text-indent 属性:

p + p {
    text-indent: 1.25em;
}

毛边,指的是文章内容左对齐后,右边部分出现的参差不齐情况

毛边效果在文章内容居中对齐时影响最大

2.2 连字符

当一个较长的单词出现在文章的换行处时,浏览器一般会把单词放到下一行显示,想要实现将单词分行显示(中间接上连接符 '-' ),可以使用 ­ 软连字符
只有当浏览器需要断行换行时才会显示这个连字符

自动连字符功能

实现自动连字符功能,需要两步:

  1. 在 html 元素中设置语言代码

    <html lang="en">
    
  2. 在需要的标签中使用 hyphens 属性

    p {
        hyphens: auto;
    }
    

    目前 hyphens 属性仍然不被 Chrome 支持,支持它的浏览器还是少数,详见 MDN 文档

2.3 多栏文本

article {
    max-width: 70em;	// 总栏宽度
    columns: 20em;		// 单栏栏宽
    column-gap: 1.5em;	// 栏间间隙
}

这里的 columns 属性时 column-countcolumn-width 属性的简写形式。

  • 如果只设置了 columns-count 属性,浏览器会严格生成指定数量的栏,不管宽度如何。
  • 如果同时设置了 column-countcolumn-width ,则前者会作为最大栏数,后者会作为最小栏宽

后背宽度,在不支持多栏属性的浏览器中确保行长不会超过限度,可以在段落元素上应用 max-width 属性,即在页面上只显示一栏,但也能保证页面可读性

2.3.1 跨栏

当文章中的所有元素都排在了栏文本流中,其实可以让某些元素排到该文本流之外,强制他们伸长已达到跨栏效果

.h1 {
    column-span: all;
    // 或 column-span: none; 关闭跨栏特性
}

给文本流内部的元素应用 column-span: all 会垂直切分多栏文本流

几乎所有浏览器都需要使用合适的开发商前缀

2.3.2 关于对齐

让标题的上外边距、行高和下外边距加起来恰好等于文本内容的 line-height 值的整数倍,即可让所有栏的文本基线对齐

3. web 字体

免费 web 字体库:Google Fonts
http://www.googlefonts.cn/english?category=Sans+Serif

4 高级排版特性(OpenType 特性)

CSS 字体规范中有着许多与 OpenType 对应的属性

详见 MDN 相关文档

4.1 数字

  • 老式数字,和字母一样,有上伸部分和下伸部分
.old-style {
    font-varient-numeric: oldstyle-nums;
    font-feature-settings: "onum";	// oldnum
}
  • 线性数字,所有数字都位于基线上(默认)
.lining-nums {
    font-varient-numeric: lining-nums;
    font-feature-settings: "lnum";	// liningnum
}

4.2 字距

高品质字体中通常包含用于调整某些字形间距的数据,这种微调间距的过程叫作字距调整(kerning)
即有些字母需要加大间隔才不会显得拥挤,同时也有些字母需要缩小间隔才不会显得疏远

.kern {
    font-kerning: normal; // 直接使用font-kerning属性
    // 或者启用OpenType的kern特性:font-feature-settings: 'kern';
}

MDN 文档:https://developer.mozilla.org/zh-CN/docs/Web/CSS/font-kerning

5. 其他布局单位

vh 与 vw

两者都基于 view 视窗大小来决定的

  • vw,指viewWidth,视窗宽度

    如果使用vw单位设置wrap类宽度,会在页面出现高度滚动条时,同时出现宽度滚动条

    原因:在出现高度滚动条时,页面宽度已经被高度滚动条占用了一部分,而vw获取的是页面原始的宽度,因此会出现宽度溢出问题

  • vh,指viewHeight,视窗高度

vw和vh的1个单位值,指的是视窗大小的1%。

例如在处理宽高时,就可以采用 vh: 100; 来设置高度占满屏幕