text-decoration
今天刷 Twitter 时看到 CSS Working Group 发了条推特:
CSS Text Decoration Level 4: First Public Working Draft
大概看了下草案,发现自己对 text-decoration
这个属性已经有点陌生了(捂脸..),于是乎只好重新回顾总结下。
CSS 3
CSS 1 和 CSS 2 只支持定义基本的 text-decoration
。CSS 3 中增强了装饰线在颜色、定位、样式方面的效果并允许属性值复合使用。
1 | // CSS 2 |
1 | // CSS 3 |
text-decoration-line
设置文本装饰线位置
可以多个属性值同时使用
1 | text-decoration-line:none | [underline || overline || line - through || blink] |
1 | // .scss |
属性值 | 说明 | 备注 |
---|---|---|
none | 文字无装饰 | 默认值 |
underline | 用下划线装饰文字 | |
overline | 用上划线装饰文字 | |
line-through | 用贯穿线装饰文字 | |
blink | 文字的装饰效果为闪烁效果 | 由于规范允许用户代理忽略该效果,因而大部分浏览器不支持闪烁效果 |
text-decoration-color
设置文本装饰线颜色
1 | text-decoration-color:<color> |
text-decoration-style
设置文本装饰线的形状
IE 系列不支持,其它浏览器都需要加对应的前缀
Safari 9 中
dotted
和dashed
的效果与solid
一致
1 | text-decoration-style:solid | double | dotted | dashed | wavy |
1 | .solid { |
属性值 | 说明 | 备注 |
---|---|---|
solid | 实线 | 默认值 |
double | 双实线 | |
dotted | 点线 | |
dashed | 短线 | |
wavy | 波浪线 |
text-decoration-skip
指明文本装饰线需要略过哪些区域
目前除 Safari 浏览器外,其它浏览器都不支持该属性;另外,Safari 也只是支持
ink
和objects
属性值,但未实现对应的效果
1 | text-decoration-skip:none | [objects || spaces || ink || edges || box-decoration] |
属性值 | 说明 | 备注 |
---|---|---|
none | 不略过 | 默认值 |
objects | 略过内联元素(inline-block ),如:图片等 |
|
spaces | 略过空白,包括:常规空白(U+0020)、制表符(U+0009)以及不间断空格(U+00A0)、表意空格(U+3000)、所有固定宽度空格(U+2000至U+200A、U+202F和U+205F)、以及相邻的字母间隔(letter-spacing )或单词间隔(word-spacing ) |
|
ink | 略过字符绘制处,在文本连笔处中断绘制 | |
edges | 装饰线起始于内容起始边缘后面,结束于内容结束边缘的前面。这个属性值的目的是为了让两个下划线元素看上去公用一条下划线。 | |
box-decoration | 略过盒子的 margin、border、padding 区域。需要注意的是,这是针对祖先的装饰效果,并不会绘制自身的装饰。 |
text-underline-position
设置文本装饰下划线的定位
目前只有 Safari 7+ 和 Chrome 65 支持该属性且仅支持
under
属性值;Safari 支持under
属性值但无效果
1 | text-underline-position:auto | [under || [left | right]] |
属性值 | 说明 | 备注 |
---|---|---|
auto | 使用算法来决定装饰线的定位,但必须在字母的基准线上或者再基准线以下 | |
under | 装饰线定位在内容盒子下边缘 | |
left | 装饰线定位在内容盒子左边缘 | |
right | 装饰线定位在内容盒子右边缘 |
CSS 4 草案
CSS 4 中又准备增强装饰线的效果,这次允许设置装饰线的宽度(text-decoration-width
)以及定位偏移量(text-underline-offset
),并对 text-decoration-skip
进行了补充。
text-decoration-width
设置装饰线的宽度
目前所有浏览器均不支持
1 | text-decoration-width:auto | <length> |
text-underline-offset
设置装饰线的偏移量
CSS 3 中允许对装饰线进行定位(
text-underline-position
),CSS 4 中可以通过该属性设置装饰线相对于初始定位的偏移量
1 | text-underline-offset:auto | <length> |
text-underline-position 属性值 | 初始定位 | 偏移方向 |
---|---|---|
auto | 字母基准线 | 向上 |
under | 内容盒子下边缘 | 向上 |
over | 内容盒子上边缘 | 向下 |
text-decoration-skip
除了 CSS 3 原有的 6 个属性值外,新增了两个属性值
leading-spaces
、trailing-spaces
属性值 | 说明 | 备注 |
---|---|---|
leading-spaces | 略过行首的空白符 | |
trailing-spaces | 略过行尾的空白符 |
text-decoration-skip-ink
这个属性其实相当于
text-decoration-skip: ink
,用于控制上划线(overline
)和下划线(underline
)在碰到连笔字符时是否应该打断装饰线默认值为
auto
,表示碰到连笔字符时需打断装饰线,还有个值为none
,表示不打断装饰线该属性只对上划线(
overline
)和下划线(underline
)有效,对中划线(line-through
)无效目前只有 Chrome 64 实现了该效果