第二部分 小程序样式入门
第3章 小程序样式基础
小程序WXSS中的样式语法沿用了传统的CSS和CSS3语法,本章主要讲解在小程序中如何应用一些基础的CSS语法,主要涉及元素选择器、ID选择器、类选择器、样式的几种写法、背景颜色、文本、字体、轮廓等知识点。
每个小节我们会先讲解常规CSS的基础语法,然后介绍在微信小程序中如何应用。
3.1 元素选择器
在W3C标准中,元素选择器又称为类型选择器(type selector)。类型选择器匹配文档树中该元素类型的每一个实例。在网页开发中,元素选择器可以理解为HTML的元素;在微信小程序中,元素选择器可以理解为微信小程序中的组件。
1.基础语法
最常见的CSS选择器是元素选择器。换句话说,文档的元素就是最基本的选择器。如果设置HTML的样式,选择器通常是某个HTML元素,比如p、h1、em、a,甚至可以是HTML本身,代码示例如下:
html {color:black; } h1 {color:blue; } h2 {color:silver; }
可以将某个样式从一个元素切换到另一个元素。假设将上面的段落文本(而不是h1元素)设置为灰色,只需要把h1选择器改为p,代码示例如下:
html {color:black; } p {color:gray; } h2 {color:silver; }
2.小程序应用
微信小程序中,我们可以把每个组件当作一个元素,比如小程序中常用的view组件和text组件。我们可以借鉴CSS的使用方式。
.wxml文件代码示例如下:
<view> <text>文本</text>
</view>
.wxss文件代码示例如下:
/*元素选择器*/ page{ background-color: gainsboro; /* page表示整个页面*/ } view{ background-color: aliceblue; /*定义整个view的背景颜色*/ } text{ background-color: burlywood; color: red; /*定义text的背景颜色和字体颜色*/ }
元素选择器使用效果如图3-1所示。给view加了一个背景颜色,给text也增加了一个背景颜色和红色文字。
图3-1 元素选择器的使用效果
3.2 ID选择器
有些情况下,文档中会出现某个特定ID值,但是并不知道它会出现在哪个元素上,所以你想声明独立的ID。ID选择器允许以一种独立于文档元素的方式来指定样式,类似于类,可以独立于元素来选择ID。
1.基础语法
ID选择器以"#"来定义。ID选择器可以为标有特定ID的HTML元素指定特定的样式。
例如,有两个ID选择器,第一个定义元素的颜色为红色,第二个定义元素的颜色为绿色,代码如下:
#red {color:red; } /*定义红色*/ #green {color:green; } /*定义绿色*/
下面的HTML代码中,id属性为red的p元素显示为红色,而id属性为green的p元素显示为绿色:
<p id="red">这个段落是红色。</p> <p id="green">这个段落是绿色。</p>
注意
id属性只能在每个HTML文档中出现一次。
2.小程序应用
小程序中ID选择器使用方式同CSS,在WXML页面的组件中定义ID,然后在WXSS中使用#号来定义组件的样式。
.wxml文件代码示例如下:
<view> <text>普通文本</text> <text id="myid">ID选择器里面的文本</text><! —在组件中定义样式的id--> </view>
.wxss文件代码示例如下:
/*元素选择器*/ page{ background-color: gainsboro; } view{ background-color: aliceblue; } /* id选择器*/ #myid{ color: white; background-color: black; /*定义在wxml页面中对应id的样式*/ }
ID选择器使用效果如图3-2所示。
图3-2 ID选择器使用效果
3. ID派生选择器
在现代布局中,ID选择器常常用于建立派生选择器。代码示例如下:
#sidebar p { font-style: italic; text-align: right; margin-top: 0.5em; }
上面的样式只会应用于ID是sidebar的元素内的段落。这个元素很可能是div或者是表格单元,或者其他块级元素,甚至可以是一个内联元素,比如<em></em>或者<span></span>,不过这样的用法是非法的,因为不可以在内联元素<span>中嵌入<p>。
一个选择器可以有多种用法。即使被标注为sidebar的元素只能在文档中出现一次,这个ID选择器作为派生选择器也可以被使用很多次,代码示例如下:
#sidebar p { font-style: italic; text-align: right; margin-top: 0.5em; } #sidebar h2 { font-size: 1em; font-weight: normal; font-style: italic; margin: 0; line-height: 1.5; text-align: right; }
在这里,与页面中的其他p元素明显不同的是,sidebar内的p元素得到了特殊的处理,同时,与页面中其他所有h2元素明显不同的是,sidebar中的h2元素也得到了特殊的处理。
我们尝试用上小节的知识点来实现:将view组件里面的所有text文本显示为红色。
.wxml文件代码示例如下:
<view> <text>普通文本</text> <text id="myid">ID选择器里面的文本</text> <! —定义id选择器名为myid--> </view> <view id="myid2"> <! —定义id选择器名为myid2--> <text>普通文本</text> </view>
.wxss文件代码示例如下:
/*元素选择器*/ page{ background-color: gainsboro; } view{ background-color: aliceblue; } /* id选择器*/ #myid{ color: white; background-color: black; /*定义text黑色背景,白色字体*/ } #myid2 text{ /*派生选择器,定义id为myid2的组 件内的text文本字体颜色为red*/ color:red; }
ID派生选择器使用效果如图3-3所示。
图3-3 ID派生选择器使用效果
3.3 类选择器
要应用样式而不考虑具体设计的元素,最常用的方法就是使用类选择器。类选择器允许以一种独立于文档元素的方式来指定样式。该选择器可以单独使用,也可以与其他元素结合使用。
提示
只有恰当地标记文档后,才能使用这些选择器,所以使用这两种选择器通常需要先做一些构想和计划。
1.基础语法
在CSS中,类选择器以一个点号显示,代码示例如下:
.center {text-align: center} /*定义名称为center的样式,可供class类选择器调用*/
在例子中,所有拥有center类的HTML元素均为居中。
在下面的HTML代码中,h1和p元素都有center类。这意味着两者都将遵守".center"类选择器中的规则,代码示例如下:
<h1 class="center"> <! —class类选择器:应用样式名为center的样式--> This heading will be center-aligned </h1> <p class="center"> <! —class类选择器:应用样式名为center的样式--> This paragraph will also be center-aligned. </p>
注意
类名的第一个字符不能使用数字!
2.小程序应用
下面举例说明在微信小程序中如何定义3行不同颜色的文本。
微信小程序中的view组件相当于div块级元素,每个view自成一行;小程序中的text组件是行内元素,可以理解为类似span元素;如果将3个文本text放在同一个view里面,则都显示在同一行。定义在view组件里面的text文本颜色会继承view的颜色;如果view组件内的text重新定义了颜色样式,会覆盖view组件里面定义的颜色。
.wxml文件代码示例如下:
<view class='myclass01'><! —view是块级元素,显示为一行--> <text>普通文本</text><! —text是行内元素,多个text都是显示在一行--> </view> <view class='myclass02'> <text >普通文本</text> </view> <view> <text class='myclass03'>普通文本</text> </view>
.wxss文件代码示例如下:
/*元素选择器*/ page{ background-color: gainsboro; } view{ background-color: aliceblue; } /* id选择器*/ .myclass01{ color: red; /*字体为红色*/ } .myclass02{ color:purple; /*字体为紫色*/ } .myclass03{ color:blue; /*字体为蓝色*/ }
类选择器使用效果如图3-4所示。
图3-4 类选择器使用效果图
3.4 样式的几种写法
CSS允许以多种方式规定样式信息。样式可以规定在单个的HTML元素中,也可以在HTML页的头元素中,或在一个外部的CSS文件中,甚至可以在同一个HTML文档内部引用多个外部样式表。
当同一个HTML元素被不止一个样式定义时,会使用哪个样式呢?一般而言,所有的样式会根据下面的规则层叠于一个新的虚拟样式表中,其中4)拥有最高的优先权。
1)浏览器默认设置。
2)外部样式表。
3)内部样式表(位于<head>标签内部)。
4)内联样式(在HTML元素内部)。
3.4.1 Web中样式的几种写法
当浏览器读到一个样式表时,会根据它来格式化HTML文档。插入样式表的方法有3种。
第1种:外部样式表
当样式需要应用于很多页面时,外部样式表是理想的选择。在使用外部样式表时,你可以通过改变一个文件来改变整个站点的外观。每个页面使用<link>标签链接到样式表。<link>标签在(文档的)头部,代码示例如下:
<head> <link rel="stylesheet" type="text/css" href="mystyle.css" /> </head>
浏览器会从文件mystyle.css中读到样式声明,并根据该声明来格式文档。
外部样式表可以在任何文本编辑器中进行编辑。文件不能包含任何的html标签。样式表应该以.css扩展名进行保存。下面是一个样式表文件的例子,代码如下:
hr {color: sienna; } p {margin-left: 20px; } body {background-image: url("images/back40.gif"); }
第2种:内部样式表
当单个文档需要特殊的样式时,应该使用内部样式表。可以使用<style>标签在文档头部定义内部样式表,代码示例如下:
<head> <style type="text/css"> hr {color: sienna; } p {margin-left: 20px; } body {background-image: url("images/back40.gif"); } </style> </head>
第3种:内联样式
由于要将表现和内容混杂在一起,内联样式会损失样式表的许多优势,例如当样式仅需要在一个元素上应用一次时,请慎用这种方法。
要使用内联样式,需要在相关的标签内使用样式(style)属性。style属性可以包含任何CSS属性。下面的代码示例展示了如何改变段落的颜色和左外边距:
<p style="color: sienna; margin-left: 20px"> This is a paragraph </p>
多重样式
如果某些属性在不同的样式表中被同样的选择器定义,那么属性值将从更具体的样式表中被继承过来。
例如,外部样式表拥有针对h3选择器的三个属性,代码如下:
h3 { color: red; text-align: left; font-size: 8pt; }
而内部样式表拥有针对h3选择器的两个属性,代码如下:
h3 { text-align: right; font-size: 20pt; }
假如拥有内部样式表的这个页面同时与外部样式表链接,代码示例如下:
color: red; text-align: right; font-size: 20pt;
那么h3得到的样式,即颜色属性将被继承于外部样式表,而文字排列(text-alignment)和字体尺寸(font-size)会被内部样式表中的规则取代。
3.4.2 小程序中样式的几种写法
微信小程序中如何插入样式表?当读到一个样式表时,小程序会根据样式来格式化显示页面。插入样式表的方法有三种:
第1种:默认微信小程序的每个程序对应一个.wxss文件,样式直接写在该文件即可。
第2种:直接在WXML组件里写样式(类似Web中的内联样式写法)。
第3种:样式写在外部.wxss文件中,在默认小程序对应的.wxss文件中引用。
此处,在根目录下的style文件下定义了一个自定义样式文件mycss.wxss, .wxss文件代码示例如下:
.mytext03{ color: green; }
.wxml文件代码示例如下:
<view> <text class='mytext01'>文本内容1</text> <! --第1种样式定义:小程序默认样式写法--> <text style='color:blue; '>文本内容2</text><! --第2种样式定义:样式写在组件里--> <text class='mytext03'>文本内容3</text><! --第3种样式定义:外部定义样式,然后引用--> </view>
.wxss文件代码示例如下:
@import '/style/mycss.wxss'; /*第3种样式定义:外部定义样式,然后引用*/ .mytext01{ color: red; /*第1种样式定义:小程序默认样式写法*/ }
效果如图3-5所示。
图3-5 小程序中样式的几种写法效果
3.5 背景颜色
CSS允许应用纯色作为背景。
1.基础语法
可以使用background-color属性为元素设置背景色。该属性接受任何合法的颜色值。
根据这条规则把元素的背景设置为灰色,代码示例如下:
p {background-color: gray; }
如果希望背景色从元素中的文本与外边框有一定的空隙,只需增加一些内边距,代码示例如下:
p {background-color: gray; padding: 20px; }
可以为所有元素设置背景色,包括从body到em和a等行内元素。
background-color不能继承,其默认值是transparent。transparent有“透明”之意。也就是说,如果一个元素没有指定背景色,那么背景就是透明的,这样其祖先元素的背景才能可见。
2.小程序应用
下面举例说明在小程序中定义view组件和text组件的背景。
.wxml文件代码示例如下:
<view > <--默认,不做任何定义--> 文本内容01 </view> <view class='cls01'> <--定义view的背景--> 文本内容02 </view> <view> <text class='cls02'>文本内容03</text> <--定义text的背景--> </view> <--定义view的背景,其内嵌套text(也定义背景)--> <view class='cls3-1'> <text class='cls3-2'>文本内容04</text> </view>
.wxss文件代码示例如下:
.cls01{ background-color: gainsboro; } .cls02{ background-color: goldenrod; } .cls3-1{ background-color: oldlace; } .cls3-2{ background-color: orange; }
背景颜色使用效果如图3-6所示。
图3-6 背景颜色使用效果
3.6 文本
CSS文本属性可定义文本的外观。通过文本属性,可以改变文本的颜色、字符间距、对齐文本、装饰文本、对文本进行缩进,等等。
3.6.1 水平对齐(text-align)
1.基础语法
text-align是一个基本的属性,它会影响一个元素中文本行互相之间的对齐方式。
西方语言都是从左向右读的,所以text-align的默认值是left。文本在左边界对齐,右边界呈锯齿状(也称为“从左到右”文本)。对于如希伯来语和阿拉伯语之类的语言,text-align默认为right,因为这些语言是从右向左读的。顾名思义,center会使每个文本行在元素中居中排列。
text-align属性值如下:
提示
将块级元素或表元素居中,要通过在这些元素上适当地设置左、右外边距来实现。
(1)text-align:center与<CENTER>
你可能会认为text-align:center与<CENTER>元素的作用一样,但实际上二者大相径庭。
<CENTER>不仅影响文本,还会把整个元素居中。text-align不会控制元素的对齐,而只影响内部内容。即元素本身不会受影响,只是其中的文本受影响。
(2)justify属性
justify将文本设置为两端对齐,即文本行的左右两端都放在父元素的内边界上,然后,调整单词和字母间的间隔,使各行的长度恰好相等。需要注意的是,要由用户代理(而不是CSS)来确定两端对齐文本如何拉伸,以填满父元素左右边界之间的空间。
2.小程序应用
下面举例说明如何在微信小程序中定义text文本在view中的水平对齐方式和两端对齐文本。
.wxml文件代码示例如下:
<view > <! --文本默认在view中居左--> 文本内容(默认居左) </view> <view class='mycenter'><! —定义文本在view中居中--> 文本内容(居中) </view> <view class='mycenter'><! —定义文本text在view中居中--> <text>文本内容(居中)</text> </view> <view class='myright'><! —定义文本在view中居右--> 文本内容(居右) </view> <view class='myright'><! —定义文本text在view中居中--> <text>文本内容(居右)</text> </view> <view class='myjustify'><! —定义文本在view中两端对齐--> 小程序是一种不用下载就能使用的应用,也是一项门槛非常高的创新,经过将近两年的发展,已经构造了新的 小程序开发环境和开发者生态 </view> <view > <! —默认效果,见图3-7,右侧虚线框处没有对齐--> 小程序是一种不用下载就能使用的应用,也是一项门槛非常高的创新,经过将近两年的发展,已经构造了新的 小程序开发环境和开发者生态 </view>
图3-7 水平对齐效果
.wxss文件代码示例如下:
text{ background-color: gainsboro; } /*水平对齐*/ .mycenter{ text-align: center; /*居中*/ } .myright{ text-align: right; /*居右*/ } .myjustify{ text-align: justify; /*实现两端对齐文本效果*/ }
水平对齐效果如图3-7所示。
3.6.2 文本最后行对齐(text-align-last)
text-align-last属性规定如何对齐文本的最后一行。
注意
text-align-last属性只有在text-align属性设置为justify时才起作用。
text-align-last属性值如下:
3.6.3 缩进文本(text-indent)
1.基础语法
把Web页面上的段落的第一行缩进,这是一种最常用的文本格式化效果。CSS提供了text-indent属性,该属性可以方便地实现文本缩进。
通过使用text-indent属性,所有元素的第一行都可以缩进一个给定的长度,甚至该长度可以是负值。下面的代码示例会使所有段落的首行缩进5 em:
p {text-indent: 5em; }
一般来说,可以为所有块级元素应用text-indent属性,但无法将该属性应用于行内元素,图像之类的元素上也无法应用text-indent属性。不过,如果一个块级元素(比如段落)的首行中有一个图像,它会随该行的其余文本移动。
提示
如果想把一个行(非首行)内元素“缩进”,可以用左内边距或外边距创造这种效果。
(1)使用负值
text-indent还可以设置为负值。可以实现很多有趣的效果,比如“悬挂缩进”,即第一行悬挂在元素中余下部分的左边,代码示例如下:
p {text-indent: -5em; }
在为text-indent设置负值时要小心,如果对一个段落设置了负值,那么首行的某些文本可能会超出浏览器窗口的左边界。为了避免出现这种显示问题,建议针对负缩进再设置一个外边距或一些内边距,代码示例如下:
p {text-indent: -5em; padding-left: 5em; }
(2)使用百分比值
text-indent可以使用所有长度单位,包括百分比值。
百分数相对于元素父元素的宽度进行缩进。换句话说,如果将缩进值设置为20%,所影响元素的第一行会缩进其父元素宽度的20%。
在下例中,缩进值是父元素的20%,即100px,代码示例如下:
div {width: 500px; } p {text-indent: 20%; } <div> <p>this is a paragragh</p> </div>
(3)继承
text-indent属性可以继承,示例代码如下:
div#outer {width: 500px; } div#inner {text-indent: 10%; } p {width: 200px; } <div id="outer"> <div id="inner">some text. some text. some text. <p>this is a paragragh.</p> </div> </div>
以上标记中的段落也会缩进50px,这是因为这个段落继承了id为inner的div元素的缩进值。
2.小程序应用
根据基础语法,下面在微信小程序中实现文本的缩进。
.wxml文件代码示例如下:
<view class='cls1'> 文本内容(块级元素支持缩进) </view> <view > <text class='cls2'>文本内容(行内元素不支持缩进)</text> </view> <view class='cls3'> <text>文本内容(文本缩进)</text> </view>
.wxss文件代码示例如下:
/*缩进文本*/ .cls1{ text-indent: 2em; /*缩进2个字距*/ } .cls2{ text-indent: 2em; /*可以为所有块级元素应用text-indent,但无法将该属性应用于行内元素*/ } .cls3{ text-indent: 2em; }
缩进文本效果如图3-8所示。
图3-8 缩进文本效果
3.6.4 文本装饰(text-decoration)
1.基础语法
text-decoration是一个很有意思的属性,它提供了很多非常有趣的行为。text-decoration有5个值:none、underline、overline、line-through、blink。
顾名思义,underline会对元素加下划线,就像HTML中的U元素一样。overline的作用恰好相反,会在文本的顶端加上划线。值line-through则在文本中间画一个贯穿线,等价于HTML中的S和strike元素。blink会让文本闪烁,类似于Netscape支持的颇招非议的blink标记。
none值会关闭原本应用到一个元素上的所有装饰。通常,无装饰的文本是默认外观,但也不总是这样。例如,链接默认会有下划线。如果希望去掉超链接的下划线,可以使用CSS达到目的,代码示例如下:
a {text-decoration: none; }
注意
如果显式地用这样一个规则去掉链接的下划线,那么锚(链接文字)与正常文本之间在视觉上的唯一差别就是颜色(至少默认是这样的,不过也不能完全保证其颜色肯定有区别)。
2.小程序应用
根据基础语法,下面在微信小程序中实现如何定义文本的顶端线条、底部线条、中间贯穿线。
说明:text是行内元素,所以这里都是指一行;如果想每个text一行,需要在每个text外面加上view, view是块级元素,每个view自成一行。
.wxml文件代码示例如下:
<view> <text class='cls1'>顶端线条</text> <text class='cls2'>底部线条</text> <text class='cls3'>中间贯穿线</text> </view>
.wxss文件代码示例如下:
view{ margin-top: 10px; /*距离顶部的外边距*/ } /*文本装饰*/ .cls1{ text-decoration: overline; /*上划线*/ } .cls2{ text-decoration: underline; /*下划线*/ } .cls3{ text-decoration: line-through; /*中间画一个贯穿线*/ }
文本装饰效果如图3-9所示。
图3-9 文本装饰效果
3.6.5 单词间隔(text-justify)
1.基础语法
text-justify改变单词间的间隔,即改变字与字之间的间距使得文字在行内排齐,代码示例如下:
div { text-align:justify; text-justify:inter-word; }
只有Internet Explorer支持text-justify属性;而火狐、Chrome、Safari和Opera不支持。
text-justify属性只有在text-align属性设置为justify时才起作用。
该属性规定如何对齐行文本进行对齐和分隔。
text-justify属性值如下:
3.6.6 文本溢出(text-overflow)
1.基础语法
text-overflow属性规定当文本溢出包含元素时应当怎么办。
属性值如下:
2.小程序应用
根据基础语法,下面在微信小程序中实现文本超出宽度后隐藏文本,并在后面跟上省略号。
.wxml文件代码示例如下:
<view class='cls'> 小程序是一种不用下载就能使用的应用,也是一项门槛非常高的创新,经过将近两年的发展,已经构造了新 的小程序开发环境和开发者生态。 </view>
.wxss文件代码示例如下:
.cls{ width:19em; /*定义宽度*/ overflow: hidden; white-space: nowrap; /*不换行,如果换行,则不会出现省略号*/ text-overflow: ellipsis; }
文本溢出效果如图3-10所示。
图3-10 文本溢出效果
3.6.7 文本阴影(text-shadow)
1.基础语法
在CSS3中,可利用text-shadow属性向文本添加一个或多个阴影。该属性是逗号分隔的阴影列表,每个阴影具有两个或三个长度值和一个可选的颜色值。省略的长度是0。属性值如下:
2.小程序应用
根据基础语法,下面在微信小程序中实现文本的不同阴影效果。
.wxml文件代码示例如下:
<view class='cls1'> 文字阴影模糊效果 </view> <view class='cls2'> 白色的文本文字阴影 </view> <view class='cls3'> 霓虹灯的光芒文字阴影 </view>
.wxss文件代码示例如下:
/*文字阴影模糊效果*/ .cls1{ text-shadow: 2px 2px 8px #FF0000; } /*白色的文本文字阴影*/ .cls2{ color:white; text-shadow:2px 2px 4px #000000; } /*霓虹灯的光芒文字阴影*/ .cls3{ text-shadow:0 0 3px #FF0000; }
文本阴影效果如图3-11所示。
图3-11 文本阴影效果
3.6.8 字符转换(text-transform)
1.基础语法
text-transform属性处理文本的大小写。
属性值如下:
作为一个属性,text-transform可能无关紧要,不过,如果突然决定把所有h1元素变为大写,这个属性就很有用。你不必单独修改所有h1元素的内容,只需使用text-transform完成这个修改,代码示例如下:
h1 {text-transform: uppercase}
使用text-transform有两方面的好处。首先,只需写一个简单的规则就能完成这个修改,而无须修改h1元素本身。其次,如果你以后决定将所有大小写再切换为原来的大小写,可以更容易地完成。
2.小程序应用
根据基础语法,下面在微信小程序中实现字符的大小写转换。
.wxml文件代码示例如下:
<view class='cls1'> <! --通过样式转换成全部大写--> huang ju HUA </view> <view class='cls2'> <! --通过样式转换成全部小写--> huang ju HUA </view> <view class='cls3'> <! --通过样式转换成单词首字母大写--> huang ju HUA </view>
.wxss文件代码示例如下:
.cls1{ text-transform: uppercase; /*大写*/ } .cls2{ text-transform:lowercase; /*小写*/ } .cls3{ text-transform: capitalize; /*首字母大写*/ }
字符转换效果如图3-12所示。
图3-12 字符转换效果
3.6.9 处理空白符(white-space)
white-space属性负责处理元素内的空白。
这个属性声明在建立布局过程中如何处理元素中的空白符。值pre-wrap和pre-line是CSS 2.1中新增的。所有浏览器都支持white-space属性。
white-space可能的属性值如下:
注意
任何的版本的Internet Explorer(包括IE8)都不支持属性值"inherit"。
小程序应用参考3.6.6节中的实例。
3.6.10 自动换行(word-break)
1.基础语法
word-break属性规定自动换行的处理方法。通过使用word-break属性,可以让浏览器实现在任意位置的换行。属性说明如下:
2.小程序应用
根据基础语法,下面在微信小程序中实现文本里面换行。
.wxml文件代码示例如下:
<view> This is a veryveryveryveryveryveryveryveryveryvery long paragraph. </view> <view class='cls1'> This is a veryveryveryveryveryveryveryveryveryvery long paragraph. </view>
.wxss文件代码示例如下:
view{ width: 150px; border: 1rpx solid gainsboro; margin: 5px; } .cls1{ word-break: break-all; /*允许在单词内换行。*/ }
自动换行效果如图3-13所示。
图3-13 自动换行效果
3.6.11 长词换行(word-wrap)
1.基础语法
word-wrap属性允许长单词或URL地址换行到下一行。属性值说明如下:
2.小程序应用
根据基础语法,下面在微信小程序中实现文本中的长单词换行。
.wxml文件代码示例如下:
<view> This is a veryveryveryve long paragraph. </view> <view class='cls1'> This is a veryveryveryve long paragraph. </view> <view class='cls2'> This is a veryveryveryve long paragraph. </view>
.wxss文件代码示例如下:
view{ width: 150px; border: 1rpx solid gainsboro; margin: 5px; } .cls1{ word-break: break-all; /*允许在单词内换行。*/ } .cls2{ word-wrap: break-word; /*在长单词或URL地址内部进行换行。*/ }
word-wrap效果如图3-14所示。
图3-14 word-wrap效果
3.6.12 单词间隔(word-spacing)
1.基础语法
word-spacing属性可以改变字(单词)之间的标准间隔,其默认值normal与设置值为0是一样的,即word-spacing:normal和word-spacing:0效果一样。word-spacing属性接受一个正长度值或负长度值。如果提供一个正长度值,那么字之间的间隔就会增加。为word-spacing设置一个负值,会把字间隔拉近,甚至使字符有交叉代码示例如下:
p.spread {word-spacing: 30px; } p.tight {word-spacing: -0.5em; } <p class="spread"> This is a paragraph. The spaces between words will be increased. </p> <p class="tight"> This is a paragraph. The spaces between words will be decreased. </p>
属性值说明如下:
2.小程序应用
实根据基础语法,下面在微信小程序中实现对单词的间隔(中文无效)的定义。
.wxml文件代码示例如下:
<view> This is some text。这里是一些文本。 </view> <view class='da'> This is some text。这里是一些文本。 </view> <view class='xiao'> This is some text。这里是一些文本。 </view>
.wxss文件代码示例如下:
.da{ word-spacing: 10px; /*增加字(单词)之间*/ } .xiao{ word-spacing: -0.5em; /*减少字(单词)之间*/ }
单词间隔效果如图3-15所示。
图3-15 单词间隔效果
3.6.13 字母间隔(letter-spacing)
1.基础语法
letter-spacing属性与word-spacing的区别在于,letter-spacing修改的是字符或字母之间的间隔。
与word-spacing属性一样,letter-spacing属性的可取值包括所有长度。默认关键字是normal(与letter-spacing:0相同)。输入的长度值会使字母之间的间隔增加或减少指定的量,允许使用负值,这会让字母之间挤得更紧。代码示例如下:
h1 {letter-spacing: -0.5em} h4 {letter-spacing: 20px} <h1>This is header 1</h1> <h4>This is header 4</h4>
属性值说明如下:
2.小程序应用
根据基础语法,下面在微信小程序中实现对文本字之间间隔的定义。
.wxml文件代码示例如下:
<view> This is some text。这里是一些文本。 </view> <view class='da'> This is some text。这里是一些文本。 </view> <view class='xiao'> This is some text。这里是一些文本。 </view>
.wxss文件代码代码示例如下
.da{ letter-spacing: 5px; /*增加字符间之空间*/ } .xiao{ letter-spacing: -0.3em; /*减少字符间之空间*/ }
字母间隔效果如图3-16所示。
图3-16 字母间隔效果
3.6.14 文本方向(direction)
1.基础语法
如果你阅读的是英文书籍,就会从左到右、从上到下地阅读,这就是英文的排列方向。并不是所有语言都如此。我们知道古汉语就是从右向左阅读,当然还包括希伯来语和阿拉伯语等。CSS2引入了direction属性来描述文字的方向性。
direction属性影响块级元素中文本的书写方向、表中列布局的方向、内容水平填充其元素框的方向,以及两端对齐元素中最后一行的位置。
注意
对于行内元素,只有当unicode-bidi属性设置为embed或bidi-override时才会应用direction属性。
direction属性值说明如下:
2.小程序应用
根据基础语法,下面在微信小程序中实现文本方向的效果。
.wxml文件代码示例如下:
<view> Some text. Left-to-right direction.一些文本-从左到右 </view> <view class='myrtl'> Some text. Right-to-left direction.一些文本-从右到左 </view>
.wxss文件代码示例如下:
.myrtl{ direction: rtl; /*从右到左*/ }
文本方向效果如图3-17所示。
图3-17 文本方向效果
3.7 字体
CSS字体属性定义文本字体的大小、加粗、风格(如斜体)和变形(如小型大写字母)。
3.7.1 字体大小(font-size)
1.基础语法
管理文本大小的能力在Web设计领域很重要。font-size值用于设置字体的大小。但是,不要通过调整文本大小使段落看上去像标题,或者使标题看上去像段落。请始终使用正确的HTML标题,比如使用<h1> - <h6>来标记标题,使用<p>来标记段落。
font-size值可以是绝对值或相对大小。
❏ 绝对值:将文本设置为指定的大小。不允许用户在所有浏览器中改变文本大小(不利于可用性)。绝对大小在确定了输出的物理尺寸时很有用。
❏ 相对大小:相对于周围的元素来设置大小。允许用户在浏览器上改变文本大小。
注意
如果没有规定字体大小,普通文本(比如段落)的默认大小是16像素(16px=1em)。
(1)使用像素来设置字体大小
通过像素设置文本大小,可以对文本大小进行完全控制,代码示例如下:
h1 {font-size:60px; } h2 {font-size:40px; } p {font-size:14px; }
在Firefox, Chrome和Safari浏览器中,可以重新调整上面例子的文本大小,但是在Internet Explorer中不行。
虽然可以通过浏览器的缩放工具调整文本大小,但是这实际上是对整个页面的调整,而不仅限于对文本的调整。
(2)使用em来设置字体大小
为了解决在Internet Explorer中无法调整文本的问题,许多开发者以em为单位代替像素。
W3C推荐使用em尺寸单位。
1em等于当前的字体尺寸。如果一个元素的font-size为16像素(16px),那么对于该元素,1em就等于16像素。在设置字体大小时,em的值会参照父元素的字体大小改变。
浏览器中默认的文本大小是16像素。因此1em的默认尺寸是16像素。
可以使用公式将像素转换为em:em=pixels/16。
注意
16等于父元素的默认字体大小,假设父元素的font-size为20px,那么公式需改为:em=pixels/20。
代码示例如下:
h1 {font-size:3.75em; } /* 60px/16=3.75em */ h2 {font-size:2.5em; } /* 40px/16=2.5em */ p {font-size:0.875em; } /* 14px/16=0.875em */
(3)结合使用百分比和em
在所有浏览器中均有效的方案是,针对body元素(父元素),以百分比设置默认的font-size值。
代码示例如下:
body {font-size:100%; } h1 {font-size:3.75em; } h2 {font-size:2.5em; } p {font-size:0.875em; }
代码非常有效。在所有浏览器中可以显示相同的文本大小,并允许所有浏览器缩放文本的大小。
2.小程序应用
根据基础语法,下面在微信小程序中实现对字体的大小的定义。
.wxml文件代码示例如下:
<view> <text>默认字体大小</text> </view> <view > <text class='cls1'>字体大小25px</text> <! --样式定义在text--> </view> <view class='cls1'> <text>字体大小25px</text> <! --样式定义在view--> </view> <view > <text class='cls2-a'>字体大小1em</text> <text class='cls2-b'>字体大小2em</text> </view> <view > <text class='cls3-a'>字体大小100%</text> <text class='cls3-b'>字体大小150%</text> </view>
.wxss文件代码示例如下:
.cls1{ font-size: 25px; } .cls2-a{ font-size: 1em; } .cls2-b{ font-size: 2em; } .cls3-a{ font-size: 100%; } .cls3-b{ font-size: 150%; }
字体大小应用效果如图3-18所示。
图3-18 字体大小效果
3.7.2 字体风格(font-style)
1.基础语法
font-style属性最常用于规定斜体文本。font-style属性包括以下3个值。
❏ normal:文本正常显示。
❏ italic:文本斜体显示。
❏ oblique:文本倾斜显示。
唯一有点复杂的是,要知道italic文本和oblique文本之间的差别。italic是一种简单的字体风格,对每个字母的结构有一些小改动来反映变化的外观。而oblique则是正常竖直文本的一个倾斜版本。通常情况下,italic和oblique文本在Web浏览器中看上去完全一样。
代码示例如下:
p.normal {font-style:normal; } p.italic {font-style:italic; } p.oblique {font-style:oblique; }
2.小程序应用
根据基础语法,下面在微信小程序中实现对字体风格的定义。
.wxml文件代码示例如下:
<view> <text>默认字体</text> </view> <view > <text class='cls1'>字体italic</text> </view> <view > <text class='cls2'>字体oblique</text> </view>
.wxss文件代码示例如下:
.cls1{ font-style: italic; } .cls2{ font-style: oblique; }
字体风格效果如图3-19所示。
图3-19 字体风格效果
3.7.3 字体变形(font-variant)
1.基础语法
font-variant属性可以设定小型大写字母。小型大写字母不是一般的大写字母,也不是小写字母,这种字母采用了不同大小的大写字母。
代码示例如下:
p {font-variant:small-caps; }
2.小程序应用
根据基础语法,下面在微信小程序中实现对小型大写字母的定义。
.wxml文件代码示例如下:
<view> <text>默认字体</text> </view> <view > <text class='cls1'>字体This is font:normal</text> </view> <view > <text class='cls2'>字体This is font:small-caps</text> </view>
.wxss文件代码示例如下:
.cls1{ font-variant: normal; } .cls2{ font-variant: small-caps; }
字体变形效果如图3-20所示。
图3-20 字体变形效果
3.7.4 字体加粗(font-weight)
1.基础语法
font-weight属性设置文本的粗细。使用bold关键字可以将文本设置为粗体。关键字包含100~900的数字,指定了九级加粗度。如果一个字体内置了这些加粗级别,那么这些数字就直接映射到预定义的级别,100对应最细的字体变形,900对应最粗的字体变形。数字400等价于normal,而700等价于bold。
如果将元素的加粗关键字设置为bolder,浏览器会设置比所继承值更粗的一个加粗字体;关键字lighter与此相反。
代码示例如下:
p.normal {font-weight:normal; } p.thick {font-weight:bold; } p.thicker {font-weight:900; }
2.小程序应用
根据基础语法,下面在微信小程序中实现对字体加粗的定义。
.wxml文件代码示例如下:
<view> <text>默认字体</text> </view> <view > <text class='cls1'>字体normal</text> </view> <view > <text class='cls2'>字体bold</text> </view> <view > <text class='cls3-a'>字体100</text> </view> <view > <text class='cls3-b'>字体500</text> </view> <view > <text class='cls3-c'>字体900</text> </view>
.wxss文件代码示例如下:
.cls1{ font-weight: normal; } .cls2{ font-weight: bold; } .cls3-a{ font-weight: 100; } .cls3-b{ font-weight: 500; } .cls3-c{ font-weight: 900; }
字体加粗效果如图3-21所示。
图3-21 字体加粗效果
3.8 轮廓
轮廓(outline)是绘制于元素周围的一条线,位于边框边缘的外围,可起到突出元素的作用。
1.基础语法
CSS的outline属性规定元素轮廓的样式、颜色和宽度。可以设置的属性分别是(按顺序):outline-color、outline-style、outline-width。如果不设置其中的某个值,也不会出问题,比如outline:solid #ff0000;也是允许的。
CSS轮廓属性值如下:
outline-color属性值如下:
outline-style属性值如下:
outline-width属性值如下:
2.小程序应用
根据基础语法,下面在微信小程序中设置text和view的轮廓样式。这里文字外围的点线就是我们所实现的轮廓样式。
.wxml文件代码示例如下:
<view class='cls1'> 这里是文本内容 </view> <view> <text class='cls1'>这里是文本内容</text> </view>
.wxss文件代码示例如下:
.cls1{ margin: 30px; border: 3px solid gainsboro; outline: thick dotted orangered; }
轮廓效果如图3-22所示。
图3-22 轮廓效果