CSS3+DIV网页样式与布局从入门到精通(微课精编版)
上QQ阅读APP看书,第一时间看更新

3.3 CSS3文本样式

CSS3优化和增强了CSS 2.1的字体和文本属性,使网页文字更具表现力和感染力,丰富了网页文本的样式和版式。

3.3.1 定义文本阴影

视频讲解

在CSS3中,可以使用text-shadow属性为文字添加阴影效果,用法如下。

     text-shadow:none | <shadow> [ , <shadow> ]*
     <shadow> = <length>{2,3} &&<color>?

text-shadow属性的初始值为无,适用于所有元素。取值简单说明如下。

☑ none:无阴影。

☑ <length>①:第1个长度值用来设置对象的阴影水平偏移值。可以为负值。

☑ <length>②:第2个长度值用来设置对象的阴影垂直偏移值。可以为负值,正值偏右或偏下,负值偏左或偏上。

☑ <length>③:如果提供了第3个长度值,则用来设置对象的阴影模糊值(即模糊半径)。不允许为负值。

☑ <color>:设置对象的阴影的颜色,该值可选。

【示例】本示例为段落文本定义一个简单的阴影效果,演示效果如图3.13所示。

     <style type="text/css">
     p {
         text-align: center;
         font: bold 60px helvetica, arial, sans-serif;
         color: #999;
         text-shadow: 0.1em 0.1em #333;
         }
     </style>
     <p>文本阴影:text-shadow</p>

图3.13 定义文本阴影

text-shadow: 0.1em 0.1em #333;声明了右下角文本阴影效果,如果把投影设置到左上角,则可以这样声明:

     p {text-shadow: -0.1em -0.1em #333;}

演示效果如图3.14所示。

同理,如果设置阴影在文本的左下角,则可以设置如下样式。

     p {text-shadow: -0.1em 0.1em #333;}

演示效果如图3.15所示。

图3.14 定义左上角阴影

图3.15 定义左下角阴影

也可以增加模糊效果的阴影:

     p{text-shadow: 0.1em 0.1em 0.3em #333; }

效果如图3.16所示。

或者定义如下模糊阴影效果:

     text-shadow: 0.1em 0.1em 0.2em black;

效果如图3.17所示。

图3.16 定义模糊阴影(1)

图3.17 定义模糊阴影(2)

在阴影偏移之后,可以指定一个模糊半径。模糊半径是个长度值,指出模糊效果的范围。模糊效果的具体算法没有指定。在阴影效果的长度值之前或之后还可以选择指定一个颜色值。如果没有指定颜色,那么将使用color属性值来替代。

3.3.2 定义溢出文本

视频讲解

text-overflow属性可以设置超长文本省略显示。基本语法如下。

     text-overflow:clip | ellipsis

适用于块状元素,取值简单说明如下。

☑ clip:当内联内容溢出块容器时,将溢出部分裁切掉,为默认值。

☑ ellipsis:当内联内容溢出块容器时,将溢出部分替换为“...”。

提示:在早期W3C文档(http://www.w3.org/TR/2003/CR-css3-text-20030514/#textoverflow-mode)中,text-overflow被纳入规范,但是在最新修订的文档(http://www.w3.org/TR/css3-text/)中没有再包含text-overflow属性。

由于W3C规范放弃了对text-overflow属性的支持,所以,Mozilla类型浏览器也放弃了对该属性的支持。不过,Mozilladevelopercenter推荐使用-moz-binding的CSS属性进行兼容。Firefox支持XUL(XUL是一种XML的用户界面语言),这样就可以使用-moz-binding属性来绑定XUL里的ellipsis属性了。

注意:text-overflow属性仅是内容注解,即当文本溢出时是否显示省略标记,并不具备样式定义的特性。要实现溢出时产生省略号的效果,还应定义两个样式:强制文本在一行内显示(white-space:nowrap)和溢出内容为隐藏(overflow:hidden),只有这样才能实现溢出文本显示省略号的效果。

【示例】本示例设计了一个新闻列表有序显示效果,对于超出指定宽度的新闻项,则使用text-overflow属性省略并附加省略号,避免新闻换行或者撑开版块,演示效果如图3.18所示。

图3.18 设计固定宽度的新闻栏目

示例代码如下。

3.3.3 定义文本换行

视频讲解

在CSS3中,使用word-break属性可以定义文本自动换行。基本语法如下。取值简单说明如下。

     word-break:normal | keep-all | break-all

☑ normal:为默认值,依照亚洲语言和非亚洲语言的文本规则,允许在字内换行。

☑ keep-all:对于中文、韩文、日文,不允许字断开。适合包含少量亚洲文本的非亚洲文本。

☑ break-all:与normal相同,允许非亚洲语言文本行的任意字内断开。该值适合包含一些非亚洲文本的亚洲文本,如使连续的英文字母间断行。

【补充】

word-break原来是IE私有属性,在CSS3中被Text模块采用,得到Chrome和Safari等浏览器的支持,但不支持keep-all取值。

另外,IE自定义了多个换行处理属性:line-break、word-break、word-wrap,CSS1也定义了white-space。这几个属性简单比较如下。

☑ line-break:指定如何(或是否)断行。除了Firefox,其他浏览器都支持。取值说明如下所示。

● auto:使用默认的断行规则分解文本。

● loose:使用最松散的断行规则分解文本,一般用于短行的情况,如报纸。

● normal:使用最一般的断行规则分解文本。

● strict:使用最严格的断行规则分解文本。

☑ word-wrap:允许长单词或URL地址换行到下一行。所有浏览器都支持。取值说明如下所示。

● normal:只在允许的断字点换行(浏览器保持默认处理)。

● break-word:在长单词或URL地址内部进行换行。

☑ word-break:指定怎样在单词内断行。取值说明参考上面语法。

☑ white-space:设置如何处理元素中的空格。所有浏览器都支持。取值说明如下所示。

● normal:默认处理方式。

● pre:使用等宽字体显示预先格式化的文本,不合并文字间的空白距离,当文字超出边界时不换行。

● nowrap:强制在同一行内显示所有文本,合并文本间的多余空白。

● pre-wrap:使用等宽字体显示预先格式化的文本,不合并文字间的空白距离,当文字碰到边界时发生换行。

● pre-line:保持文本的换行,不保留文字间的空白距离,当文字碰到边界时发生换行。

【拓展】

在IE浏览器下,使用word-wrap:break-word;声明可以确保所有文本正常显示。在Firefox浏览器下,中文不会出现任何问题,英文语句也不会出现问题。但是,长串英文会出现问题。为了解决长串英文会出现的问题,一般将word-wrap:break-word;和word-break:break-all;声明结合使用。但是,这种方法会导致普通的英文语句中的单词被断开显示(IE下也是)的情况。现在的问题主要存在于长串英文和英文单词被断开的情况。

为了解决这个问题,可使用word-wrap:break-word;overflow:hidden;,而不是word-wrap:break-word;word-break:break-all;。word-wrap:break-word;overflow:auto;在IE下没有任何问题,但是在Firefox下,长串英文单词就会被遮住部分内容。

【示例】本示例将在页面中插入一个表格,由于标题行文字较多,标题行常被撑开,影响浏览体验。为了解决这个问题,借助CSS换行属性进行处理,代码如下。比较效果如图3.19所示。

图3.19 禁止表格标题文本换行显示

3.3.4 动态添加文本

视频讲解

content属性属于内容生成和替换模块,可以为匹配的元素动态生成内容,这样就能够满足在CSS样式设计中临时添加非结构性的样式服务标签,或者添加补充说明性内容等。

content属性的简明语法如下。

     content: normal | string | attr() | url() | counter() | none;

取值简单说明如下。

☑ normal:默认值。表现与none值相同。

☑ string:插入文本内容。

☑ attr():插入元素的属性值。

☑ url():插入一个外部资源,如图像、音频、视频或浏览器支持的其他任何资源。

☑ counter():计数器,用于插入排序标识。

☑ none:无任何内容。

提示:content属性早在CSS 2.1中就被引入,可以使用:before和:after伪元素生成内容。此特性目前已被大部分的浏览器支持,另外Opera 9.5+和Safari 4已经支持所有元素的content属性,而不仅仅是:before和:after伪元素。

在CSS 3 Generated Content工作草案中,content属性添加了更多的特征,例如,插入以及移除文档内容的能力,可以创建脚注、结语和段落注释。但是目前还没有浏览器支持content的扩展功能。

【示例】本示例使用content属性,配合CSS计数器设计多层嵌套有序列表序号设计,代码如下。效果如图3.20所示。

图3.20 使用CSS技巧设计多级层级目录序号

3.3.5 自定义字体类型

视频讲解

CSS3允许用户通过@font-face规则,加载网络字体文件,实现自定义字体类型的功能。@font-face规则在CSS3规范中属于字体模块。

@font-face规则的语法格式如下。

     @font-face { <font-description> }

@font-face规则的选择符是固定的,用来引用网络字体文件。<font-description>是一个属性名值对,格式类似如下样式。

     descriptor: value;
     descriptor: value;
     descriptor: value;
     descriptor: value;
     [...]
     descriptor: value;

属性及其取值说明如下。

☑ font-family:设置文本的字体名称。

☑ font-style:设置文本样式。

☑ font-variant:设置文本是否大小写。

☑ font-weight:设置文本的粗细。

☑ font-stretch:设置文本是否横向拉伸变形。

☑ font-size:设置文本字体大小。

☑ src:设置自定义字体的相对路径或者绝对路径。注意,该属性只能在@font-face规则里使用。

提示:事实上,IE 5已经开始支持font-face属性,但是只支持微软自有的.eot(Embedded OpenType)字体格式,而其他浏览器直到现在都不支持这一字体格式。不过,从Safari 3.1开始,用户可以设置.ttf(TrueType)和.otf(OpenType)两种字体作为自定义字体。考虑到浏览器的兼容性,在使用时建议同时定义.eot和.ttf,以便能够兼容所有主流浏览器。

【示例】这是一个简单的示例,演示如何使用@font-face规则在页面中使用网络字体。示例代码如下,演示效果如图3.21所示。

     <style type="text/css">
     /* 引入外部字体文件 */
     @font-face {
     /* 选择默认的字体类型 */
     font-family: "lexograph";
     /* 兼容IE */
     src: url(http://randsco.com//fonts/lexograph.eot);
     /* 兼容非IE */
     src: local("Lexographer"), url(http://randsco.com/fonts/lexograph.ttf) format("truetype");
 }
 h1 {
     /* 设置引入字体文件中的lexograph字体类型 */
     font-family: lexograph, verdana, sans-serif;
     font-size:4em;
     }
 </style>
 <h1>http://www.baidu.com/</h1>

图3.21 设置为lexograph字体类型的文字

提示:嵌入外部字体需要考虑用户带宽问题,因为一个中文字体文件小的有几个MB,大的有十几个MB,这么大的字体文件其下载过程会出现延迟,同时服务器也不能忍受如此频繁的申请下载。如果只是想让标题使用特殊字体,最好设计成图片。