CSS基础知识储备(文字处理)

一、 css字体属性

image

浏览器支持情况:

image

二 、 属性详细说明

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 文本不会换行,文本会在同一行上继续,直到遇到
    标签为止
  • 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

image

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

image

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。


    image

这意味着 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 的高度是从子元素的最高点到最低点。


image

用 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 的顶部或底部对齐
image

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


image
  • 所有的内联元素都有两个高度:基于字体度量的 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

image
  • 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值变为 16px62.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及图标字体

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,036评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,046评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,411评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,622评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,661评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,521评论 1 304
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,288评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,200评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,644评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,837评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,953评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,673评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,281评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,889评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,011评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,119评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,901评论 2 355

推荐阅读更多精彩内容