缩进 首先确定本章用的block direction
,inline direction
两个术语。
块方向(block direction)
: 是当前写入模式中默认放置块元素的方向,在英语中,从上到下
内联方向(inline direction)
:在一个块中吸入内联元素的方向,在英语中,从左到右。
text-indent 1 2 3 4 5 6 7 values: <length> | <percentage> Initial value: 0 Applies to: 块元素 Precentages: 相对于包含块的宽度 Computed value: 百分百的值,如所指定,也是百分百;长度单位,则是绝对长度 Inherited: Yes Animatable: Yes
通常,可以text-index
应用于生成块框的任何元素,并且在内联方向 上缩进。不能将其应用于内联元素或替换元素,例如img
,然而,如果在块级元素的第一行中有图像,则该图像与该行中的其余文本一起缩进。
如果想要‘缩进’ 内联元素的第一行,则可以是使用padding-left
或margin-left
来创建效果。
text-indent
仅应用于元素的第一行,即使插入了换行符。
text-align 1 2 3 4 5 Values: start|end|left|right|center|justify|match-parent Initial value: CSS3: start. CSS2.1 : 用户代理指定 Applies to: Block-level elements Computed value: 给定的值 Inherited: Yes
在 CSS3 中,left
,right
分别映射到start
,end
的边缘。
text-align
不控制元素的对齐,它仅是控制块级元素内的内联内容.且是在水平方向上的。
内联对齐(Inline Alignment),“垂直对齐” 上面我们介绍了沿内联方向(inline direction)的对齐方式,现在要介绍沿块级方向(block direction)进行内联元素的垂直对齐方式。
line-height 1 2 3 4 5 6 Values: <number>|<lenght>|<percentage>|normal Initial Value: normal Allies to: All elements (常见于块级元素或替换元素的文本) Percentages: 相对于元素的字体大小 Inherited: Yes Animatable; Yes
line-height
属性是指文本行的基线之间的距离(the distance between the baselines of lines of text),而不是字体的大小。它确定增加或减少每个元素框(element’s box)的高度的数值。
line-height
控制着行间距(leading)
.行距是超出字体大小的文本行之间多余的空间。换句话讲,就是line-height
值和字体大小之间的差距。
line-height
当应用于块级元素时,它指定了该元素内 文本基线之间的最小距离。文本基线是可变的。
行的组成
一行文字中的每一个元素都会生成一个内容区域(content area)
,它是由字体大小决定。 反过来,此内容区域会生成一个行内框(inline box)
。行内框
在没有任何其他因素的情况下,与内容区域
完全相同。行间距(leading)
是由line-height
增加或减少了行内框
的高度所产生的。
确定元素的行间距
: line-height
计算值 减去 font-size
计算值。这个值可以是负数。然后将行间距
一分为二,加在内容区域
的顶部和底部,就是该元素的行内框
了。
每一行都有一个隐藏的行框
,行框
的高度由行内框
决定,行框
的高度需要将最高行内框的底部
和最低行内框的底部
刚好包裹起来。
一些术语基本定义
line-height: 文本行基线之间的距离,而不是字体大小
content area(内容区): 非替换行内元素,内容区是由元素中字符生成的框;替换元素中,内容区的高度是元素的高度+内外边距+边框值
leading(行间距):line-height
与font-size
值之差。这个值一分为二,分别添加到内容区的顶部和底部。行间距只应用于非替换元素。
inline box(行内框): 行内框是通过向内容区域增加行间距来描述的。非替换行内元素,行内框的高度刚好等于line-height
的值;替换元素,元素的行内框高度恰好等于内容区的高度,因为行间距不应用到替换元素。
vertical-align 相对于行框
的“垂直”对齐方式,即沿块/垂直方向如何放置它们。在 CSS 中,vertical-align
属性仅应用于行内元素和可替换元素(如,images, form inputs). vertiacl-align
是不可继承属性
1 2 3 4 5 6 7 Values: baseline|sub|supper|top|text-top| middle|bottom|text-bottom|<length>|<percentage> Initial value: baseline Applies to: inline elelents, table cells, replaced elements Percentages: 相对于该元素的`line-height` Inherited: No Animatable: <length>,<percentage>
baseline: 元素基线与其父元素的基线对齐。如果元素没有基线,比如可替换元素 images,fomr input,那么该元素的底部与父元素的基线对齐。
sub/supper: 元素的基线(或底,如果是替换元素)位于父元素的基线下面/上面。
bottom: 将元素的底部与行框的底部对齐
bootom-text: 将元素的底部与文本框(text box:父元素的字体大小)的底部对齐
middle: 通常用于images
。是内联元素的中间比父元素的基线高出0.5ex
。ex:字母x的高度
。
<percentage>
: 元素的基线(或替换元素的底部)同父元素基线相比,升高/降低的百分百。该百分百是相对于元素的line-height
,而不是父元素。
<length>
: 将元素上移或下移声明的距离。重要点: 垂直对齐的文本不会成为另一行的一部分,也不会与其他行中的文本重叠。任何垂直对齐的元素都会影响到行框的高度,因为他是最高行内框的顶部与最低行内框的底部之间的间距
单词间距(word Spacing)/ 字母间距(Leter Spacing) 1 2 3 4 5 6 7 word-spacing / letter-spacing Values: <length>|normal Initial value: normal (0 ) Applies to: All elements Inherited: Yes Animatable: Yes
间距和对齐 (Spacing and Alignment) 需要注意的,-spacing
空间的计算值是继承的,因此具有较大或较小文本的子元素和其父元素的间距一致,看起来很不协调
text-transform 1 2 3 4 5 6 Values: uppercase|lowercase|capitalize|none Initial value: none Applies to: All elements Computed value: As specified Inherited: Yes Animatable: No
capitalize
,CSS 仅要求浏览器确保每个单词的首字母大写,忽略单词其余部分。
text-decoration 1 2 3 4 5 Values: none|[underline||overline||line-through||blink] Initial value: none Applies to: All elements Inherited: No Animatable: No
一些怪异情况:
text-decoration
是不可继承的。文本的装饰线与父元素具有相同的颜色,即使子元素设置了不同的颜色。所以也要在子元素设置text-decoration: none
来清除。
text-decoration
与vertical-align
一起使用时,也经常出现怪异情况。例如,sup 元素本身没有装饰线,但由于在有上划线的元素升高,因此上划线也’切入‘了 sup 元素中间。
text-shadow 1 2 3 4 5 values: h-showdow v-showdow blur-radius color | none Initial vlaue: none Applies to: All elements Inherited: No Animatable: Yes
默认情况下文本没有阴影。但可以定义一个或多个阴影。阴影定义:水平阴影位置,垂直阴影位置,模糊半径,阴影颜色。前 2 个必须,后 2 个可选。模糊半径默认值为 0,阴影颜色默认值为文本颜色。
**注意:大量的文本阴影或具有非常大的模糊半径的文本,会导致性能下降,特别是在低功耗和 CPU 受限的情况下(如移动设备)。
white-space 1 2 3 4 5 Values: normal|nowrap|pre|pre-wrap|pre-line Initial value: normal Applies to: All elements Inherited: No Animatble: No
white-space
属性,影响浏览器如何处理单词和文本行之间的空白。
normal: 丢弃额外的空格。换行符被转换为空格,多个空格被转换为单个空格。
nowrap: 阻止文本在元素中换行,除非使用<br>
。
pre:同在pre
元素中一样,保留空格和换行符。
pre-wrap: 保留空白符序列,但正常的进行换行。
pre-line: 合并空白符序列,但是保留换行符。
Value
Whitespace(空白符序列)
Line feeds(换行符)
Auto line wrapping(自动换行)
normal
Collapsed
Ignored
Allowed
nowrap
Collapsed
Ignored
Prevented
pre
Preserved
Honored
Prevented
pre-wrap
Preserved
Honored
Allowed
pre-line
Collapsed
Honored
Allowed
换行与连字符 hyphens 1 2 3 4 5 Values: manual|auto|none Initial value: manual Applies to: All elements Inherited: Yes Animatabale: No
hyphens
告知浏览器在换行时如何使用连字符连接单词。可以完全阻止使用连字符,也可以控制浏览器如何使用。
word-break 1 2 3 4 5 Values: normal|break-all|keep-all Initial value: normal Applies to: All elements Inherited: Yes Animatable: Yes
当文本太长而不能放在一行时,会自动换行(soft warpped
)。换行符、<br>
则是硬换行(hard wraps
)。
normal: 文本正常换行,在单词之间(英文中,有空格)断行。
break-all: 在任何 2 个字符之间都可以断行,即使在一个单词中间
keep-all: 阻止换行。同white-space:pre
类似.对于 CJK(中文、日文、韩文)文本不断行。Non-CJK 文本表现同normal
。
Value
Non-CJK
CJK
Hyphenation permitted
normal
As usual
As usual
Yes
break-all
After any character
After any character
No
keep-all
As usual
Around sequences
Yes
line-break overflow-wrap writing Modes writing-mode text-orientation direction / unicode-bidi direction
,inicode-bidi
这一对属性可以通过改变内联基线的方向来改变文本的方向。 CSS 规范警告在 HTML 文档中不要使用direction
,unicode-bidi
属性,因为用户可以关闭 CSS 样式,建议使用 HTML<bdo>
标签,dir
属性。
1 2 <bdo dir ="rtl" > This text will go right-to-left</bdo >