JS基础知识储备-八


一、 css字体属性

浏览器支持情况:

二 、 属性详细说明

1、font

font 简写属性在一个声明中设置所有字体属性。

注释:此属性也有第六个值:”line-height”,可设置行间距。

说明

  • 这个简写属性用于一次设置元素字体的两个或更多方面。使用 icon 等关键字可以适当地设置元素的字体,使之与用户计算机环境中的某个方面一致。注意,如果没有使用这些关键词,至少要指定字体大小和字体系列。

可以按顺序设置如下属性:

  • font-style
  • font-variant
  • font-weight
  • font-size/line-height
  • font-family

2、font-style:规定字体样式

  • normal 默认值。浏览器显示一个标准的字体样式。
  • italic 浏览器会显示一个斜体的字体样式。
  • oblique 浏览器会显示一个倾斜的字体样式。
  • inherit 规定应该从父元素继承字体样式。(IE不支持)

3、font-variant :规定字体异体

  • normal 默认值。浏览器会显示一个标准的字体。
  • small-caps 浏览器会显示小型大写字母的字体。
  • inherit 规定应该从父元素继承 font-variant 属性的值。

4、font-weight:规定字体粗细

  • normal 默认值。定义标准的字符。
  • bold 定义粗体字符。
  • bolder 定义更粗的字符。
  • lighter 定义更细的字符。
  • 100-900 定义由粗到细的字符。400 等同于 normal,而 700 等同于 bold。
  • inherit 规定应该从父元素继承字体的粗细。

5、font-size:规定字体尺寸

  • xx-small,x-small,small,medium,large,x-large,xx-large 把字体的尺寸设置为不同的尺寸,从 xx-small 到 xx-large。默认值:medium。
  • smaller 把 font-size 设置为比父元素更小的尺寸。
  • larger 把 font-size 设置为比父元素更大的尺寸。
  • length 把 font-size 设置为一个固定的值。
  • % 把 font-size 设置为基于父元素的一个百分比值。
  • inherit 规定应该从父元素继承字体尺寸。

6 、line-height:规定字体行高

  • normal 默认。设置合理的行间距。
  • number 设置数字,此数字会与当前的字体尺寸相乘来设置行间距。
  • length 设置固定的行间距。
  • % 基于当前字体尺寸的百分比行间距。
  • inherit 规定应该从父元素继承 line-height 属性的值。

7、font-family:规定字体系列

  • family-name/generic-family 用于某个元素的字体族名称或/及类族名称的一个优先表。默认值:取决于浏览器。
  • inherit 规定应该从父元素继承字体系列。

8、word-spacing:增加或减少单词间的空白(即字间隔)。

  • normal 默认,定义单词间的标准空间
  • length 定义单词间的固定空间
  • inherit 规定应该从父元素继承word-spacing属性的值

9、word-break:规定自动换行的处理方法

  • normal 使用浏览器默认的换行规则
  • break-all 允许在单词内换行
  • keep-all 只能在半角空格或连字符处换行

10、letter-spacing:增加或减少字符间的空白(字符间距)

  • normal 默认。规定字符间没有额外的空间
  • length 定义字符间的固定空间(允许负值)
  • inherit 规定应该从父元素继承letter-spacing属性的值

11、white-space:指定元素内的空白怎样处理

  • normal 默认。空白会被浏览器忽略
  • pre 空白会被浏览器保留,其行为方式类似Html中的< pre>标签
  • nowrap 文本不会换行,文本会在同一行上继续,直到遇到< br>标签为止
  • pre-wrap 保留空白字符序列,但是正常的进行换行
  • pre-line 合并空白字符序列,但是保留换行符
  • inherit 规定应该从父元素继承white-space属性的值

8、其他

  • caption 定义被标题控件(比如按钮、下拉列表等)使用的字体。
  • icon 定义被图标标记使用的字体。
  • menu 定义被下拉列表使用的字体。
  • message-box 定义被对话框使用的字体。
  • small-caption caption 字体的小型版本。
  • status-bar 定义被窗口状态栏使用的字体。

三、font-size相关内容

1、font-size和line-height

4种box

要说的4种盒子分别是inline box、line box、content area、containing box

  • inline box (行内框) 每个行内元素会生成一个行内框,行内框是一个浏览器渲染模型中的一个概念,无法显示出来,行内框的高度等于font-size,设定line-height时,行内框的高度不变,改变的是行距。

  • line box (行框) 行框是指本行的一个虚拟的矩形框,由该行中行内框组成。行框也是浏览器渲染模式中的一个概念,无法显示出来。行框高度等于本行中所有行内框高度的最大值。当有多行内容时,每一行都有自己的行框。

  • content area (内容区) 内容区是围绕着文字的一种box,无法显示出来,其高度取决于font-size和padding。内容区的高度 = font-size + padding-top + padding-bottom

  • containing box containing box 是包裹着上述三种box的box

2、font-size和vertical-align

(1)vertical-align可能的值:

  • baseline 默认。元素放置在父元素的基线上。
  • sub 垂直对齐文本的下标。
  • super 垂直对齐文本的上标
  • top 把元素的顶端与行中最高元素的顶端对齐
  • text-top 把元素的顶端与父元素字体的顶端对齐
  • middle 把此元素放置在父元素的中部。
  • bottom 把元素的顶端与行中最低的元素的顶端对齐。
  • text-bottom 把元素的底端与父元素字体的底端对齐。
  • length
  • % 使用 “line-height” 属性的百分比值来排列此元素。允许使用负值。
  • inherit 规定应该从父元素继承 vertical-align 属性的值。

vertical-align 属性,它也是计算 line-box 高度的重要因素之一。我们甚至可以说 vertical-align 是内联格式化上下文(IFC)中最重要的属性。

(2)字体的相关高度计算

  • 一款字体会定义一个 em-square,它是用来盛放字符的金属容器。这个 em-square 一般被设定为宽高均为 1000 相对单位,不过也可以是 1024、2048 相对单位。
  • 字体度量都是基于这个相对单位设置的,包括 ascender、descender、capital height、x-height 等。注意这里面的值是允许相对于 em-square 出血(bleed outside)的(译者注:大概可以理解为超出 em-square)
  • 在浏览器中,上面的 1000 相对单位会按照你需要的 font-size 缩放。
  • em-square 是 1000
  • ascender 是 1100,descender 是 540。通过测试发现,macOS 上的浏览器使用了 HHead Ascent 和 HHead Descent 值,Windows 上的浏览器使用了 Win Ascent 和 Win Descent(而且两个平台上的值不一样)。我们还看到 Capital Height 是 680,X height 是 485。

这意味着 Catamaran 字体占据了 1100 + 540 个相对单位,尽管它的 em-square 只有 1000 个相对单位,所以当我们设置 font-size:100px 时,这个字体里的文字高度是 164px。这个计算出来的高度决定了 HTML 元素的 content-area(内容区域)你可以认为 content-area 就是 background 作用的区域。

(3)line-box计算

  • 对于内联元素,padding 和 border 会增大 background 区域,但是不会增大 content-area(不是 line-box 的高度)。一般来说你无法再屏幕上看到 content-area。margin-top 和 margin-bottom 对两者都没有影响。
  • 对于可替换内联元素(replaced inline elements)、inline-block 元素和 blockified 内联元素,padding、margin 和 border 会增大 height(译者注:注意 margin),因此会影响 content-area 和 line-box 的高度

(4)vertical-align

它的默认值是 baseline。还记得字体度量里的 ascender 和 descender 吗?这两个值决定了 baseline 的位置。很少有字体的 ascender 和 descender 的比例是一比一的,所以我们经常看到一些意想不到的现象。

<p>
    <span>Ba</span>
    <span>Ba</span>
</p>

p {
    font-family: Catamaran;
    font-size: 100px;
    line-height: 200px;
}

span:last-child {
    font-size: 50px;
}

我们会发现一个非常奇怪的现象,line-box 的高度变高了!如下图所示。提示你一下,line-box 的高度是从子元素的最高点到最低点。

用 baseline 来对齐令人费解,如果我们用 vertical-align: middle,middle 的意思是「用父元素 baseline 高度加上父元素中 x-height 的一半的高度来对齐当前元素的垂直方向的中点」。baseline 所处的高度跟字体有关,x-height 的高度也跟字体有关,所以 middle 对齐也不靠谱。更糟糕的是,一般来说,middle 根本就不是居中对齐!内联元素的对齐受太多因素影响,因此不可能用 CSS 实现。

vertical-align 的其他 4 个值

  • vertical-align: top / bottom,表示与 line-box 的顶部或底部对齐
  • vertical-align: text-top / text-bottom,表示与 content-area 的顶部或底部对齐

不过你依然要小心,大部分情况下,对齐的是 line-height ,也就是一个不可见的高度。看看下面这个用 vertical-align:top 的例子:

  • 所有的内联元素都有两个高度:基于字体度量的 content-area,line-height ,这两个高度你都无法看到
  • line-height: normal 是基于字体度量计算出来的
  • line-height: n (n=1,2,3…) 可能得出一个比line-height 还要矮的 content-area
  • vertical-align 不靠谱
  • line-box 的高度的受其子元素的 line-height 和 vertical-align 的影响
  • 我们无法轻易的用 CSS 来控制字体度量

3、font-size和ex、em、rem

  • px像素(Pixel)。相对长度单位。像素px是相对于显示器屏幕分辨率而言的。(引自CSS2.0手册)
  • em是相对长度单位。相对于当前对象内文本的字体尺寸。如当前对行内文本的字体尺寸未被人为设置,则相对于浏览器的默认字体尺寸。(引自CSS2.0手册)

任意浏览器的默认字体高都是16px。所有未经调整的浏览器都符合: 1em=16px。那么12px=0.75em,10px=0.625em。为了简化font-size的换算,需要在css中的body选择器中声明Font-size=62.5%,这就使em值变为 16px*62.5%=10px, 这样12px=1.2em, 10px=1em, 也就是说只需要将你的原来的px数值除以10,然后换上em作为单位就行了。

px特点

  1. IE无法调整那些使用px作为单位的字体大小;
  2. 国外的大部分网站能够调整的原因在于其使用了em或rem作为字体单位;
  3. Firefox能够调整px和em。

em特点

  1. em的值并不是固定的;
  2. em会继承父级元素的字体大小。

rem特点

rem是CSS3新增的一个相对单位(root em,根em),这个单位引起了广泛关注。这个单位与em有什么区别呢?区别在于使用rem为元素设定字体大小时,仍然是相对大小,但相对的只是HTML根元素。这个单位可谓集相对大小和绝对大小的优点于一身,通过它既可以做到只修改根元素就成比例地调整所有字体大小,又可以避免字体大小逐层复合的连锁反应。目前,除了IE8及更早版本外,所有浏览器均已支持rem。对于不支持它的浏览器,应对方法也很简单,就是多写一个绝对单位的声明。这些浏览器会忽略用rem设定的字体大小。

四、font face及图标字体


文章作者: wanzhr
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 wanzhr !
评论
 上一篇
JS基础知识储备-九 JS基础知识储备-九
一、透明度1、transparent(1)css中的定义:设置背景为透明background:transparent实际上background默认的颜色就是透明的属性,其使用场景: 当一个元素覆盖在另外一个元素之上,而你想显示下面的元素,
2020-12-28 wanzhr
下一篇 
JS基础知识储备-七 JS基础知识储备-七
一、概述1、介绍“JavaScript是单线程的”这一说法它事实上描述了JavaScript环境在浏览器内的一般行为。 这样的单线程范例本身是有局限的,因为它妨碍了在语言中其他可行的编程模式,否则可将工作委托给独立的线程或进程。JavaSc
2020-10-23 wanzhr
  目录