将Web页面上一个段落的第一行缩进,这是一种最常用的文本格式化效果。
text-indent:[
Document
Text-indent.
如图:当父元素为400px,子元素text-indent:100%;已经到了400px的位置,由此可见,百分比是相对父级块元素的。
text-align:start | end | left | right | center | justify | match-parent | justify-all
//测试justify
.justify {
text-align: justify;
}
WASHINGTON - US President Donald Trump and the top leader of the Democratic People's Republic of Korea (DPRK), Kim Jong Un, are scheduled to meet at 9:00 am Singapore time on June 12, the White House said on Monday. At a press briefing, White House spokesperson Sarah Sanders also said that the U.S. advance team now in Singapore "is finalizing logistical preparations and will remain in place until the summit begins." Noting that the US side is "actively" preparing for the meeting, she said that the US delegation in the demilitarized zone (DMZ) along the inter-Korean border continues diplomatic negotiations with the DPRK delegation. "The discussions have been very positive and significant progress has been made," she said. Besides the exchanges in Singapore and the DMZ, US Secretary of State Mike Pompeo last week met with Kim Yong Chol, vice chairman of the DPRK's ruling Workers' Party of Korea Central Committee, in New York.
我们看一下当前的结果:
当前页面文字为两端对齐,但是通过图片红色框中的内容可以看到出现了单词孤岛的现象,在对文本进行两端对齐处理时,需要调整单词的间距,此时会出现“单词孤岛”现象。这个结果不仅看起来很糟糕,而且损伤了可读性。有一些在网页上实现字符断行的方法,但是效果挺差的。如下图:
.justify {
text-align: justify;
word-break:break-all;
}
CSS 文本(第三版)引入了一个新的属性hyphens。它接受三个值:none、manual 和auto。manual 是它的初始值,其行为正好对应了现有的工作方式:我们可以在任何时候手工插入软连字符,来实现断词折行的效果。很显然hyphens: none; 会禁用这种行为。但是chorme浏览器不支持当前属性,具体属性支持可以查询caniuse。而且我们还需要加上word-wrap:break-word;一起使用.
.justify {
text-align: justify;
word-wrap:break-word;
-moz-hyphens: auto;
-ms-hyphens: auto;
-webkit-hyphens: auto;
hyphens: auto;
}
我们可以看到红色框中有多个链接字符“-”。
测试文本内容的背景不会作用到半间距。
下图当中背景颜色会作用到文本框加上padding,margin。但是不会作用到半间距。
* {
font-family: "Comic Sans MS";
}
.inline {
font-size: 80px;
line-height: 1em;
background-color:grey;
opacity: 0.7;
padding: 0;
}
Test content area draw.
这里的代码可以看到当前span标签的line-height为1em,也就是80px。所以父元素的高度就是80px。但是span元素的背景确实大于80px,这里测试的实际高度为:111px,而且随着字体的变化,字体的高度也会变化。这里是什么原因呢?
字体的em框和字符字形之间可能会存在差别。因为对于大部分字体,其em框的高度与字符字形的高度是不一致的。
CSS2.1中提出:“内容区的高度应当基于字体,但是这个桂芬没有指定如何基于字体确定内容区的高度。使用em框还是字体字形”。这里所以浏览器的操控空间就很大了。浏览器控制当前字体的内容区高度。
先看一个例子:
.block-parent{
background-color: teal;
height: 200px;
}
.block-child {
background-color: gray;
height: 100px;
}
测试vertical-align的使用环境
父子元素为block
block child
首先我们使用line-height来实现子div居中,修改css文件如下:
.block-parent{
background-color: teal;
height: 200px;
line-height: 200px;
}
.block-child {
background-color: gray;
height: 100px;
line-height: 100px;
display: inline-block;
}
这里简单说一下实现的原理:首先声明,这里的例子只是为了使用line-height。
通过前面学习的知识,我们了解到line-height是文本框和半间距的和。文本框的高度由font-size以及浏览器绘制字体的大小来决定。抛开文本框的高度来说,当line-height的高度增加的时候,那么在没有修改font-size的时候,只会增加上下半间距。并且上下半间距的距离相等。
所以现在代码的情况下,当line-height的高度与父元素的高度相等的时候,自然将父元素的content的内容看成一个line-height为200px的inline元素,但是这种情况不会应用到block子元素,所以将子元素设置为inline-block,并且line-height
设置为子元素的高度,因为line-height具有继承性。上面的例子是使用line-height来实现居中的,我们再回忆一下上面的实现方式,是通过上下半间距的相等,然后将文本框放置到了垂直居中的位置。这里又要提起之前的线模型的基线了。
为什么提起基线呢?因为基线是文字垂直位置的初始位置(可以先不管这句话)。OK,既然提到了基线,那么我们是不是可以当作line-height的作用是为了将基线移动位置,当然居中的位置不是基线,而是基线 + 2/(x.height),也就是基线 + 0.5ex,x指的是字母x的高度。还记得四线三格,中心的位置就是基线 + 0.5ex。
走到这里,我们好像发现了关键所在,那就是移动当前inline内容的中线到的父元素文本内容的基线 + 0.5ex。
正好vertical-align:middle可以满足我们的需求:middle会把行内元素框的垂直中点与父元素基线上方0.5ex对齐。
.block-parent{
background-color: teal;
height: 200px;
}
.first-block-child {
background-color: gray;
height: 100px;
display: inline-block;
line-height: 100px;
vertical-align: middle;
}
.second-block-child {
background-color: gray;
height: 200px;
display: inline-block;
line-height: 200px;
vertical-align: middle;
}
测试vertical-align的使用环境
父子元素为block
first block child
总结:其实vertical-align的核心思想在于行内框,以行内框的不同位置作为基准与我们想要调节位置的元素对齐。
不具有继承性
baseline很重要,上面已经调到过一次,baseline是文字位置的最重要的基准,如果我们找到了baseline就好去处理当前文字行的位置布局。
规则1:inline-block元素,如果内部有line box,则inline-block元素的baseline就是最后一个作为内容存在的元素[inline box]的baseline,而这个元素的baseline的确定就要根据它自身来定了。
规则2:inline-block元素,如果其内部没有line box或它的overflow属性不是visible,那么baseline将是这个inline-block元素的底margin边界。
测试vertical-align的baseline股则2
如图:这是一张普通的图片,没有其他的css样式,当时我们可以看到当前红色框内有着一小块空白的地方(因为有着背景的原因,所以不是空白)。为什么说是规则二呢,目前好像没有匹配的项目,那么我们修改一点代码,加上几个xxx。
测试vertical-align的baseline股则2
xxxxx
我们现在可以看到当前的图片与文本内容xxxx的基线在同一水平线上。这里可能大家会有疑问,难道图片不会影响文字的行高吗?
首先还是要先明确一个观念,文字的大小由font-size决定,所以这里的xxxx的大小不会受到影响。第二个疑问就是xxxx的位置。会影响文本行内文字的位置通过前面的学习知道了,linge-height会影响文本的位置。但是这里也没有影响?原因如下:
前面文章CSS - 基本视觉格式化说过一句话如下:
非替换元素的内边距,边框和外边距对行内元素生成框(也就是说不会影响元素行内框的高度)没有垂直效果,也就是在垂直方向没有作用。但是背景存在效果。
这里的含义是什么呢?非替换元素不会影响到文本行的大部分样式展示,但是会影响背景,这里的背景指的是行高,但是不会影响line-height。可以这样理解:假如没有图片,文字正常展示,家上图片之后,图片的高度增加了文本行的高度,但是不影响文本行的line-height。所以文字随着img的高度乡下移动了,可以理解文本行的上空由于img的高度扩大了。请看下图当我相中文字的时候,可以看到当前的背景是和图片一致的。
消除例子中空白区域,我们要可以从几个方面去思考:
(1)将图片变成block元素,则可以了,因为block元素不收文本行的影响。
(2)文字下方存在空格是因为基线到底线之间的举例,那我们可以考虑将底线与基线之间的举例不体现在当前文本框中,那就是减少line-height。因为line-height为em框加上本间距,当line-height小于em框的时候,就会反向缩减距离,但是这个值不能为负数,否则没有效果了。这种方式不推荐,因为距离还是会存在与当前文档中的。
(3)设置font-size为0,这样可以将文本行直接去除,这样默认的base-line也不会有影响了。
(4)使用其他的对齐方式:vertical-align:bottom | vertical-align:middle | vertical-align:top
.percentage {
word-spacing: 0.5em;
}
兼容性需要注意:
Values | IE | Firefox | Chrome | Safari | Opera | iOS Safari | Android Browser | Android Chrome |
---|---|---|---|---|---|---|---|---|
Basic Support | 6.0+ | 2.0+ | 4.0+ | 6.0+ | 15.0+ | 6.0+ | 2.1+ | 18.0+ |
6.0-11.0 | 2.0-37.0 | 4.0-41.0 | 6.0-8.0 | 15.0-27.0 | 6.0-8.3 | 2.1-4.4.4 | 18.0-40.0 |
兼容性如下:
Values | IE | Firefox | Chrome | Safari | Opera | iOS Safari | Android Browser | Android Chrome |
---|---|---|---|---|---|---|---|---|
Basic Support | 6.0+ | 2.0+ | 4.0+ | 6.0+ | 15.0+ | 6.0+ | 2.1+ | 18.0+ |
6.0-11.0 | 2.0-37.0 | 4.0-41.0 | 6.0-8.0 | 15.0-27.0 | 6.0-8.3 | 2.1-4.4.4 | 18.0-40.0 |
兼容性如下:
Values | IE | Firefox | Chrome | Safari | Opera | iOS Safari | Android Browser | Android Chrome |
---|---|---|---|---|---|---|---|---|
Basic Support | 6.0+ | 2.0+ | 4.0+ | 6.0+ | 15.0+ | 6.0+ | 2.1+ | 18.0+ |
full-width | 6.0-11.0 | 2.0-18.0 | 4.0-45.0 | 6.0-8.0 | 15.0-29.0 | 6.0-8.3 | 2.1-4.4.4 | 18.0-42.0 |
由于最近时间紧张,所以文本相关知识先学习到这里,还有一些没有去看,等到后面有时间了再去看吧,明天看浮动定位了。