CSS 样式速查手册


目录:

什么是CSS

CSS 是 Cascading Style Sheet(层叠样式表)的缩写。是用于(增强)控制网页样式并允许将样式信息与网页内容分离的一种标记性语言。CSS 不需要编译,可以直接由浏览器执行(属于浏览器解释型语言)。

历史

  • CSS 最早被提议是在1994年;
  • 最早被浏览器支持是1996年;
  • 1996年 W3C 正式推出了CSS1;
  • 1998年 W3C 正式推出了CSS2;
  • CSS2.1 是 W3C 现在正在推荐使用的;
  • CSS3 现在还处于开发中;
  • CSS 3 在包含了所有 CSS 2 所支持的基础上更有所改进,所以不必担心兼容问题。

CSS 支持多种设备,例如手机、电视、打印机、幻灯片等。但是 CSS 在浏览器上得到了更好的推广。

CSS 入门

一.使用CSS

selector {property: value;}

介绍 - 图1

CSS 样式由一条或多条以分号隔开的样式声明组成。每条声明的样式包含着一个 CSS 属性和属性值。

<p style="color:red;font-size:50px;">这是一段文本</p>

解释:style 是行内样式属性。color 是颜色属性,red 是颜色属性值;font-size是字体大小属性,50px 是字体大小属性值。

二.三种方式

创建 CSS 样式表有三种方式:1.元素内嵌样式;2.文档内嵌样式;3.外部引入样式。

1.元素内嵌样式

<p style="color:red;font-size:50px;">这是一段文本</p>

解释:即在当前元素使用 style 属性的声明方式。

2.文档内嵌样式

<style type="text/css"> p {   
    color: blue; font-size: 40px;}
</style>
<p>这是一段文本</p>

解释:在<head>元素之间创建<style>元素,通过选择器的方式调用指定的元素并设置相关 CSS。

3.外部引用样式

<link rel="stylesheet" type="text/css" href="style.css">

//style.css

@charset "utf-8";
p {    
    color: green;   
    font-size: 30px;
}

解释:很多时候,大量的 HTML 页面使用了同一个组 CSS。那么就可以将这些 CSS 样式保存在一个单独的.css 文件中,然后通过<link>元素去引入它即可。@charset "utf-8" 表明设置 CSS 的字符编码,如果不写默认就是 utf-8。如果有多个.css 文件,可以使用 @import 导入方式引入.css 文件。只不过,性能不如多个<link>链接。

三.层叠和继承

所谓的样式表层叠:指的是同一个元素通过不同方式设置样式表产生的样式重叠。样式表继承:指的是某一个被嵌套的元素得到它父元素样式。还有一种样式叫浏览器样式,是这个元素在这个浏览器运行时默认附加的样式。

1.浏览器样式

<b>这个元素隐含加粗样式</b>
<span style="font-weight:bold;">这个元素通过 style 加粗</span>

解释:<b>元素就是具有加粗的隐含样式,而<span>元素没有任何隐含样式,通过 style 属性设置样式。

2.样式表层叠

样式表层叠通过五种方式进行,如果样式相同,那么比如会产生冲突替换。这时,它的优先级顺序就显的比较重要。以下优先级从低到高:

(1).浏览器样式(元素自身携带的样式);

(2).外部引入样式(使用<link>引入的样式);

(3).文档内嵌样式(使用<style>元素设置);

(4).元素内嵌样式(使用 style 属性设置)。

//元素内嵌

<p style="color:red;font-size:30px;">我将被三种方式叠加样式</p>

//文档内嵌

<style type="text/css">
p {   
    color:blue; 
    font-weight: bold;
</style>

//外部引入

@charset "utf-8";
p {   color: green;   font-style: italic;}

如果某一个样式被优先级高的给替换掉了,却又想执行这个样式方案,可以将这个方案标记成重要样式(important)。

//强行设置最高优先级

color: green !important;

3.样式继承

如果某一个元素并没有设置父元素相关的样式,那么就会使用继承机制将父元素的样式集成下来。

//<b>元素继承了<p>元素的样式

<p style="color:red;">这是<b>HTML5</b></p>

样式继承只适用于元素的外观(文字、颜色、字体等),而元素在页面上的布局样式则不会被继承。如果继承这种样式,就必须使用强制继承:inherit。

//强制继承布局样式

<p>这是<b>HTML5</b></p>

<style type="text/css">
p {   
    border: 1px solid red;
}
b {
    border : inherit;
}

</style>

选择器权重

介绍 - 图2

权重主要分为 4 个等级:

  • 第一等:代表内联样式,如: style="",权值为1000
  • 第二等:代表ID选择器,如:#content,权值为100
  • 第三等:代表类,伪类和属性选择器,如.content,权值为10
  • 第四等:代表类型选择器和伪元素选择器,如div p,权值为1

例子如下

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>选择器权重 | www.waylau.com</title>
    <meta name="description" content="选择器权重">
    <meta name="author" content="Way Lau, www.waylau.com"/>
    <meta name="viewport" content="width=device-width">
    <link rel="shortcut icon" href="/favicon.ico">
    <style type="text/css">        #redP p { /* 权值 = 100+1=101 */
        color: #F00; /* 红色 */
    }

    #redP .red em { /* 权值 = 100+10+1=111 */
        color: #00F; /* 蓝色 */
    }

    #redP p span em { /* 权值 = 100+1+1+1=103 */
        color: #FF0; /*黄色*/
    }    </style>
</head>
<body>
<div id="redP"><p class="red">red <span><em>em red</em></span></p>
    <p>red</p></div>
</body>
</html>

最终页面效果如下:

介绍 - 图3

优先级

遵循如下法则:

  • 选择器都有一个权值,权值越大越优先;
  • 当权值相等时,后出现的样式表设置要优于先出现的样式表设置;
  • 创作者的规则高于浏览者:即网页编写者设置的 CSS 样式的优先权高于浏览器所设置的样式;
  • 继承的 CSS 样式不如后来指定的 CSS 样式;
  • 在同一组属性设置中标有!important规则的优先级最大

例子如下:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>!important 用法 | </title>
    <meta name="description" content="!important 用法">
    <link rel="shortcut icon" href="/favicon.ico">
    <style>        .test {
        color: #f00 !important;
        color: #000;
    }

    .test2 {
        color: #f00 !important;
    }

    .test2 {
        color: #000;
    }

    .test3 {
        color: #000;
    }

    .test3 {
        color: #f00;
    }    </style>
</head>
<body>
<div class="test">同一条样式内,!important 优先级高</div>
<div class="test2">在分散的样式条目内,!important 优先级高</div>
<div class="test3">没有被覆盖</div>
</body>
</html>

CSS 选择器

一.选择器总汇

本节课主要涉及到三种选择器:基本选择器、复合选择器和伪元素选择器,具体如下:

选择器 名称 说明 CSS 版本
* 通用选择器 选择所有元素 2
<type> 元素选择器 选择指定类型的元素 1
#<id> id 选择器 选择指定 id 属性的元素 1
.<class> class 选择器 选择指定 class 属性的元素 1
[attr]系列 属性选择器 选择指定 attr 属性的元素 2 ~ 3
s1,s2,s3… 分组选择器 选择多个选择器的元素 1
s1 s2 后代选择器 选择指定选择器的后代元素 1
s1 > s2 子选择器 选择指定选择器的子元素 2
s1 + s2 相邻兄弟选择器 选择指定选择器相邻的元素 2
s1 ~ s2 普通兄弟选择器 选择指定选择器后面的元素 3
::first-line 伪元素选择器 选择块级元素文本的首行 1
::first-letter 伪元素选择器 选择块级元素文本的首字母 1
::before 伪元素选择器 选择元素之前插入内容 2
::after 伪元素选择器 选择元素之后插入内容 2

二.基本选择器

使用简单且频率高的一些选择器归类为基本选择器。

1.通用选择器

* { border: 1px solid red;}

解释:“*”号选择器是通用选择器,功能是匹配所有 html 元素的选择器包括<html><body>标签。可以使用如下元素标记测试效果:

<p>段落</p><b>加粗</b><span></span>

通用选择器会将所有元素匹配并配置样式,这是把双刃剑,好处就是非常方便,坏处就是将不必要的元素也配置了。目前为止,还不存在所有元素都必须配置的样式,所以,一般来说,不常用。

2.元素选择器

p { color: red;}
<p>段落</p>

解释:直接使用元素名称作为选择器名即可。

3.ID选择器

#abc { font-size: 20px;}
<p id="abc">段落</p>

解释:通过对元素设置全局属性 id,然后使用#id 值来选择页面唯一元素。

4.类选择器

.abc { border: 1px solid red;}
<b class="abc">加粗</b><span class="abc"></span>

解释:通过对元素设置全局属性 class,然后使用.class 值选择页面一个或多个元素。

b.abc { border: 1px solid red;}

解释:也可以使用“元素.class 值”的形式,限定某种类型的元素。

<span class="abc edf"></span>

解释:类选择器还可以调用多个样式,中间用空格隔开进行层叠。

5.属性选择器

//所需 CSS2 版本

[href] { color: orange;}

解释:属性选择器,直接通过两个中括号里面包含属性名即可。当然,还有更多扩展的属性选择器。

//所需 CSS2 版本

[type="password"] { border: 1px solid red;}

解释:匹配属性值的属性选择器。

//所需版本 CSS3

[href^="http"] { color: orange;}

解释:属性值开头匹配的属性选择器。

//所需版本 CSS3

[href$=".com"] { color: orange;}

解释:属性值结尾匹配的属性选择器。

//所需版本 CSS3

[href*="baidu"] { color: orange;}

解释:属性值包含指定字符的属性选择器。

//所需版本 CSS2

[class~="edf"] { font-size: 50px;}

解释:属性值具有多个值时,匹配其中一个值的属性选择器。

//所需版本 CSS2

[lang|="en"] { color: red;}

解释:属性值具有多个值且使用“-”号连接符分割的其中一个值的属性选择器。比如

<i lang="en-us">HTML5</i>

二.复合选择器

将不同的选择器进行组合形成新的特定匹配,我们称为复合选择器。

1.分组选择器

p,b,i,span { color: red;}

解释:将多个选择器通过逗号分割,同时设置一组样式。当然,不但可以分组元素选择器,还可以使用 ID 选择器、类选择器、属性选择器混合使用。

2.后代选择器

p b { color: red;}

解释:选择<p>元素内部所有<b>元素。不在乎<b>的层次深度。当然,后代选择器也可以混合使用 ID 选择器、类选择器、属性选择器。

3.子选择器

ul > li { border: 1px solid red;}
<ul>    
    <li> 我是儿子 
    <ol>            
            <li> 我是孙子 </li>            
            <li> 我是孙子 </li>        
    </ol>    
    </li>    
            <li> 我是儿子 </li>    
            <li> 我是儿子 </li>
    </ul>

解释:子选择器类似与后代选择器,而最大的区别就是子选择器只能选择父元素向下一级的元素,不可以再往下选择。

4.相邻兄弟选择器

p + b { color: red;}

解释:相邻兄弟选择器匹配和第一个元素相邻的第二个元素。

5.普通兄弟选择器

p ~ b { color: red;}

解释:普通兄弟选择器匹配和第一个元素后面的所有元素。

三.伪元素选择器

伪选择器分为两种第一种是下节伪类选择器,还有一种就是伪元素选择器。这两种选择器特性上比较容易混淆,在 CSS3 中为了区分,伪元素前置两个冒号(::),伪类前置一个冒号(:)。

1.::first-line块级首行

::first-line { color: red;}

解释:块级元素比如<p><div>等的首行文本被选定。如果想限定某种元素,可以加上前置 p::first-line。

2.::first-letter块级首字母

::first-letter { color: red;}

解释:块级元素的首行字母。

3.::before文本前插入

a::before { content: '点击-';}

解释:在文本前插入内容。

4.::after文本后插入

a::before { content: '-请进';}

解释:在文本后插入内容。

CSS 颜色与度量单位

一.颜色表方案

颜色的表现形式主要有三种方式:颜色名称、十六进制代码和十进制代码。

p { color: red;}

解释:这是将一个段落内的文字设置为红色,采用的是英文颜色名称。问题是,其他各种颜色我们将如何设置?

在古老的 HTML4 时,颜色名称只有 16 种。

颜色名称 十六进制代码 十进制代码 含义
black #000000 0,0,0 黑色
silver #c0c0c0 192,192,192 银灰色
gray #808080 128,128,128 灰色
white #ffffff 255,255,255 白色
maroon #800000 128,0,0 栗色
red #ff0000 255,0,0 红色
purple #800080 128,0,128 紫色
fuchsia #ff00ff 255,0,255 紫红
green #008000 0,128,0 绿色
lime #00ff00 0,255,0 闪光绿
olive #808000 128,128,0 橄榄色
yellow #ffff00 255,255,0 黄色
navy #000080 0,0,128 海军蓝
blue #0000ff 0,0,255 蓝色
teal #008080 0,128,128 水鸭色
aqua #00ffff 0,255,255 浅绿色

当然,目前颜色名称远远不止这些,可以搜索更多的 HTML 颜色表或 CSS 颜色表查阅。这里提供一些页面如下

http://xh.5156edu.com/page/z1015m9220j18754.html

http://www.w3school.com.cn/tags/html_ref_colornames.asp

在上面的表格中,我们也罗列出对应的十六进制和十进制颜色表示方法。使用方法如下:

//红色的十六进制方案

p { color: #ff0000;}

十进制表示方法就比较多样化,有四种方案:

函数 说明 示例
rgb(r,g,b) 用 RGB 模型表示颜色 rgb(0,128,128)
rgba(r,g,b,a) 同上,a 表示透明度 0~1 之间 rgba(0,128,128,0.5)
hsl(h,s,l) 用 HSL 模型(色相、饱和度和透明度)来表示颜色 hsl(120,100%,30%)
hsla(h,s,l,a) 同上,a 表示透明度 0~1 之间 hsla(120,100%,30%,0.5)
p { color: rgb(112, 128, 114); 
     color: rgba(0, 128, 128, 0.5); 
     color: hsl(120, 100%, 30%); 
     color: hsla(120, 100%, 30%, 0.5);}

二.度量单位

在 CSS 长度设置中,我们经常需要使用到度量单位,即以什么样的单位设计我们的字体或边框长度。而在 CSS 中长度单位又分为绝对长度和相对长度。

绝对长度指的是现实世界的度量单位,CSS 支持五种绝对长度单位。
绝对长度单位
单位标识符 说明
in 英寸
cm 厘米
mm 毫米
pt
pc pica
相对长度指的是依托其他类型的单位,也是五种。
相对长度单位
单位标识符 说明
em 与元素字号挂钩
ex 与元素字体的“x 高度”挂钩
rem 与根元素的字号挂钩
px 像素,与分辨率挂钩
% 相对另一值的百分比

下面我们使用一些常用的单位作为演示,而不做演示的基本用不到了。

//em 相对单位

p { margin: 0; 
     padding: 0;
     background: silver; font-size: 15px; 
     height: 2em;}

解释:em 是相对单位,与字号大小挂钩,会根据字体大小改变自己的大小,灵活性很高。

//px 相对单位,绝对特性

p { margin: 0; 
     padding: 0; 
     background: silver; font-size: 15px; 
     height: 55px;}

解释:虽然 px 也是相对单位,但由于和分辨率挂钩,导致他其实就变成一个绝对单位了,自然灵活性没有 em 高,但是使用难度较低,且大量的开发者习惯性使用它。

//%百分比

p { margin: 0; 
     padding: 0; 
     background: silver;
     font-size: 200%; 
     width: 50%;}

解释:长度比较好理解,就是挂钩它所在区块的宽度。而 font-size 则是继承到的原始大小的百分比。

CSS 文本样式

一.字体总汇

本节课,我们重点了解一下 CSS 文本样式中字体的一些设置方法,样式表如下:

属性名 说明 CSS 版本
font-size 设置字体的大小 1
font-variant 设置英文字体是否转换为小型大写 1
font-style 设置字体是否倾斜 1
font-weight 设置字体是否加粗 1
font-family 设置 font 字体 1
font 设置字体样式复合写法 1 ~ 2
@font-face 设置 Web 字体 3

二.字体设置

我们可以通过 CSS 文本样式来修改字体的大小、样式以及形态。

1.font-size

p { font-size: 50px;}

//先设置父元素字体大小

body { font-size: 50px;}

//再设置相对小一些

p { font-size: smaller;}

2.font-variant

p { font-variant: small-caps;}

解释:设置字体是否以小型大写字母显示。

说明
normal 表示如果以小型大写状态,让它恢复小写状态。
small-caps 让小写字母以小型大写字母显示。

//先让父元素设置小型大写

body { font-variant: small-caps;}

//让子元素设置恢复小写

p { font-size: 50px; font-variant: normal;}

3.font-style

p { font-style: italic;}

解释:设置字体是否倾斜。

说明
normal 表示让倾斜状态恢复到正常状态。
italic 表示使用斜体。
oblique 表示让文字倾斜。区别在没有斜体时使用。
p { font-weight: bold;}

解释:设置字体是否加粗。

说明
normal 表示让加粗的字体恢复正常。
bold 粗体
bolder 更粗的字体
lighter 轻细的字体
100 ~ 900 之间的数字 600 及之后是加粗,之前不加粗

在目前计算机和浏览器显示中,只有 bold 加粗,其他更粗更细,目前体现不出来。

5.font-family

p { font-family: 微软雅黑;}

解释:使用指定字体名称。这里使用的字体是浏览者系统的字体。有时为了兼容很多浏览者系统的字体,可以做几个后备字体。

//备用字体

p { font-family: 楷体,微软雅黑,宋体;}

6.font

p { font: 50px 楷体;}

解释:字体设置简写组合方式。格式如下:[是否倾斜|是否加粗|是否转小型大写] 字体大小 字体名称;

三.Web 字体

虽说可以通过备用字体来解决用户端字体缺失问题,但终究用户体验不好,且不一定备用字体所有用户都安装了。所以,现在 CSS 提供了 Web 字体,也就是服务器端字体。

//服务器提供字体

@font-face { 
    font-family: abc; 
    src: url('BrushScriptStd.otf');}
    p { font-size: 50px; font-family: abc;}

英文字体文件比较小,而中文则很大。所以,中文如果想用特殊字体可以使用图片。大面积使用特殊中文字体,就不太建议了。

四.文本汇总

CSS 文本样式中文本内容的一些设置方法,样式表如下:

属性名 说明 CSS 版本
text-decoration 装饰文本出现各种划线。 1
text-transform 将英文文本转换大小写。 1
text-shadow 给文本添加阴影 3
text-align 设置文本对齐方式 1,3
white-space 排版中的空白处理方式 1
letter-spacing 设置字母之间的间距 1
word-spacing 设置单词之间的间距 1
line-height 设置行高 1
word-wrap 控制段词 3
text-indent 设置文本首行的缩进 1

五.文本样式

CSS 文本样式有三种:文本装饰、英文大小写转换和文本阴影。

1.text-decoration

p { text-decoration: underline;}

解释:设置文本出现下划线。属性值如下表:

说明
none 让本身有划线装饰的文本取消掉
underline 让文本的底部出现一条下划线
overline 让文本的头部出现一条上划线
line-through 让文本的中部出现一条删除划线
blink 让文本进行闪烁,基本不支持了

//让本来有下划线的超链接取消

a { text-decoration: none;}

2.text-transform

p { text-transform: uppercase;}

解释:设置英文文本转换为大小写。

说明
none 将已被转换大小写的值恢复到默认状态
capitalize 将英文单词首字母大写
uppercase 将英文转换为大写字母
lowercase 将英文转换为小写字母

3.text-shadow

p { text-shadow: 5px 5px 3px black;}

解释:给文本添加阴影。其中四个值,第一个值:水平偏移;第二个值:垂直偏移;第三个值:阴影模糊度(可选);第四个值:阴影颜色(可选)。

六.文本控制

CSS 文本样式中还有一组对文本进行访问、形态进行控制的样式。

1.text-align

p { text-align: center;}

解释:指定文本的对齐方式。

说明
left 靠左对齐,默认
right 靠右对齐
center 居中对齐
justify 内容两端对齐
start 让文本处于结束的边界
end 让文本处于结束的边界

start 和 end 属于 CSS3 新增的功能,但目前 IE 和 Opera 尚未支持。

2.white-space

p { white-space: nowrap;}

解释:处理空白排版方式。

说明
normal 默认值,空白符被压缩,文本自动换行
nowrap 空白符被压缩,文本不换行
pre 空白符被保留,遇到换行符则换行
pre-line 空白符被压缩,文本会在排满或遇换行符换行
pre-wrap 空白符被保留,文本会在排满或遇换行符换行

3.letter-spacing

p { letter-spacing: 4px;}

解释:设置文本之间的间距。

说明
normal 设置默认间距
长度值 比如:“数字”+“px”

4.word-spacing

p { word-spacing: 14px;}

解释:设置英文单子之间的间距。

说明
normal 设置默认间距
长度值 比如:“数字”+“px”

5.line-height

p { line-height: 200%;}

解释:设置段落行高。

说明
normal 设置默认间距
长度值 比如:“数字”+“px”
数值 比如:1,2,3
% 比如:200%

6.word-wrap

p { word-wrap: break-word;}

解释:让过长的英文单词断开。

说明
normal 单词不断开
break-word 断开单词

7.text-indent

p { text-indent: 20px;}

解释:设置文本首行的缩进。

说明
normal 设置默认间距
长度值 比如:“数字”+“px”

CSS 盒子模型

一.元素尺寸

CSS 盒子模型中最基础的就是设置一个元素的尺寸大小。有三组样式来配置一个元素的尺寸大小,样式表如下

属性 说明 CSS 版本
width auto、长度值或百分比 设置元素的宽度 1
height auto、长度值或百分比 设置元素的高度 1
min-width auto、长度值或百分比 设置元素最小宽度 2
min-height auto、长度值或百分比 设置元素最小高度 2
max-width auto、长度值或百分比 设置元素最大宽度 2
max-height auto、长度值或百分比 设置元素最大高度 2

//设置元素尺寸

div { width: 200px; height: 200px;}

解释:设置元素的固定尺寸。

//限制元素尺寸

div { min-width: 100px; 
        min-height: 100px; 
        max-width: 300px; 
        max-height: 300px;}

解释:这一组主要是应对可能动态产生元素尺寸变大变小的问题,从而限制它最大和最小的值。

//auto 自适应

div { width: auto; height: auto;}

解释:auto 是默认值,width 在 auto 下是 100%的值;height 在 auto 下是自适应。

//百分比方式

#a { background: silver; 
       width: 200px;
       height: 200px;} 
#b { background: gray; 
       width: 80%; 
       height: 80%;}
<div id="a"><div id="b"> 我是 html5 </div></div>

解释:百分比就是相对于父元素长度来衡定的。

二.元素内边距

CSS 盒模型中可以设置元素内部边缘填充空白的大小,我们成为内边距。样式表如下:

属性 说明 CSS 版本
padding-top 长度值或百分比 设置顶部内边距 1
padding-bottom 长度值或百分比 设置底部内边距 1
padding-left 长度值或百分比 设置左边内边距 1
padding-right 长度值或百分比 设置右边内边距 1
padding 1 ~ 4 个长度值或百分比 简写属性 1

//设置四个内边距

div { 
        padding-top: 10px; 
        padding-bottom: 10px; 
        padding-left: 10px; 
        padding-right: 10px;}

//简写形式,分别为上 10px、右 10px、下 10px、左 10px

div { padding: 10px 10px 10px 10px;}

//简写形式,分别为上 10px,左右 50px,下 200px

div { padding: 10px 50px 200px;}

//简写形式,分别是上下 10px,左右 20px

div { padding: 10px 20px;}

//简写形式:上下左右均 10px

div { padding: 10px;}

三.元素外边距

CSS 盒模型中可以设置元素外部边缘填充空白的大小,我们成为外边距。样式表如下:

属性 说明 CSS 版本
margin-top 长度值或百分比 设置顶部内边距 1
margin-bottom 长度值或百分比 设置底部内边距 1
margin-left 长度值或百分比 设置左边内边距 1
margin-right 长度值或百分比 设置右边内边距 1
margin 1 ~ 4 长度值或百分比 简写属性 1

//设置四个内边距

div { margin-top: 10px;
    margin-bottom: 10px;
    margin-left: 10px;
    margin-right: 10px;}

//简写形式,分别为上 10px、右 10px、下 10px、左 10px

div { margin: 10px 10px 10px 10px;}

//简写形式,分别为上 10px,左右 50px,下 200px

div { margin: 10px 50px 200px;}

//简写形式,分别是上下 10px,左边 20px

div { margin: 10px 20px;}

//简写形式:上下左右均 10px

div { margin: 10px;}

四.处理溢出

当设置了元素固定尺寸且内容过大时,就会出现溢出的问题。溢出主要朝两个方向:右侧和底部。我们可以通过 overflow 系列样式来控制它。

//设置溢出为 auto 值

div { overflow-x: auto;}

五.元素可见性

使用 visibility 属性可以实现元素的可见性,这种样式一般可以配合 JavaScript 来实现效果。样式表如下:

属性 说明 CSS 版本
visible 默认值,元素在页面上可见。 2
visibility hidden 元素不可见,但会占据空间。 2
collapse 元素不可见,隐藏表格的行与列,如果不是表格,则和 hidden 一样。 2

//设置元素隐藏,但占位

div { visibility: hidden;}

//隐藏表格的行或列,但不占位,Chrome 和 Opera 不支持

table tr:first-child { visibility: collapse;}

六.元素盒类型

CSS 盒模型中的 display 属性,可以更改元素本身盒类型。那么元素有哪些盒类型呢?主要有:1.块级元素(区块);2 行内元素(内联);3 行内-块级元素(内联块);4.隐藏元素。

1.块级元素

所谓块级元素,就是能够设置元素尺寸、隔离其他元素功能的元素。比如:<div>、<p>等文档元素。

2.行内元素

所谓行内元素,不能够设置元素尺寸,它只能自适应内容、无法隔离其他元素,其它元素会紧跟其后。比如:<span>、<b>等文本元素。

3.行内块元素

所谓行内-块元素,可以设置元素尺寸,但无法隔离其他元素的元素。比如

属性 说明 CSS 版本
block 盒子为块级元素 1
display inline 盒子为行内元素 1
inline-block 盒子为行内-块元素 2
none 盒子不可见,不占位 1

//将行内元素转成块级元素

span { background: silver;
           width: 200px;
           height: 200px;
          display: block;}

//将块级元素转换成行内元素

div { background: silver;
    width: 200px;
    height: 200px;
    display: inline;}

//将块级元素转化成行内-块元素

div { background: silver;
    width: 200px;
    height: 200px;
    display: inline-block;}

//将元素隐藏且不占位

div { display: none;}

display 属性还有非常多的值,有些后面部分讲解,而有些支持度不好或者尚不支持,从而省略。有兴趣的,可以参考 CSS3 手册。

七.元素的浮动

CSS 盒模型有一种叫浮动盒,就是通过 float 属性建立盒子的浮动方向,样式表如下:

属性 说明 CSS 版本
left 浮动元素靠左 1
float right 浮动元素靠右 1
none 禁用浮动 1

//实现联排效果

#a { background: gray; float: left;}
#b { background: maroon; float: left;}
#c { background: navy; float: left;}

//实现元素右浮动

#c { background: navy; float: right;}

//取消元素的浮动

#c { background: navy; float: none;}

刚才的浮动有一个问题:当一个元素盒子被浮动后,下面的元素会自动堆叠处理,导致元素不可见或部分不可见。我们可以使用 clear 属性来处理。

属性 说明 CSS 版本
clear none 允许两边均可浮动 1
left 左边界不得浮动 1
right 右边界不得浮动 1
both 两边都不得浮动 1

//两边均不可浮动

#c { background: navy;
       clear: both;}

CSS 边框与背景

一.声明边框

边框的声明有三个属性设置,样式表如下:

属性 说明 CSS 版本
border-width 长度值 设置边框的宽度,可选 1
border-style 样式名称 设置边框的样式,必选 1
border-color 颜色值 设置边框的颜色,可选 1

这三个属性值,只有 border-style 是必须声明,才可以出现边框。而其他两个属性会出现默认值。

//最简单的边框,边框长度默认 3px,边框颜色为黑色

div { border-style: solid;}

//配置完整的边框

div { border-style: solid; 
    border-width: 2px;
        border-color: red;}

如果元素长和高均为 200px 时,四个边框均为 2 时,元素的长高总尺寸均为 202px。

二.边框样式

边框的样式主要有三种,分别是边框长度取值、边框的颜色和边框的线条类型。颜色是通用的颜色代码,和所有其他颜色取值一下。而长度和线条类型,边框有自己独到的部分。

边框宽度取值表如下:

说明
长度值 CSS 长度值:比如 px、em 等
百分数 直接设置百分数:1、2、3 等
thin 使用长度名称的预设宽度。这三个值的具体意义由浏览器来定义,从小到大依次增大。
medium
thick

一般来说,边框为了更加精准,还要计算元素盒子的总尺寸,使用长度值的比较多。而定义边框线条的样式如下样式表:

说明
none 没有边框
dashed 破折线边框
dotted 圆点线边框
double 双线边框
groove 槽线边框
inset 使元素内容具有内嵌效果的边框
outset 使元素内容具有外凸效果的边框
ridge 脊线边框
solid 实线边框

//solid 实线使用频率最高

div { border-style: solid;
    border-width: 10px;
    border-color: red;}

如果想对四条边中某一条边单独进行设置,可以使用如下样式表:

属性 说明 CSS 版本
border-top-width 定义顶端 1
border-top-style
border-top-color
border-middle-width 定义底部 1
border-middle-style
border-middle-color
border-left-width 定义左侧 1
border-left-style
border-left-color
border-right-width 定义右边 1
border-right-style
border-right-color

//只设置顶端

div { border-top-style: solid;
    border-top-width: 10px;
    border-top-color: red;}

如果四条变都一致,那么没必要分写成三句样式,直接通过简写即可:

属性 说明 CSS 版本
border <宽度> <样式> <颜色> 设置四条边的边框 1
border-top 只设置上边框
border-middle 只设置下边框
border-left 只设置左边框
border-right 只设置右边框

//简写形式四条边设置

div { border: 10px solid red;}

三.圆角边框

CSS3 提供了一个非常实用的圆角边框的设置。使用 border-radius 属性,就可以达到这种效果,样式表如下:

属性 说明 CSS 版本
border-radius 长度值或百分数 四条边角 3
border-top-left-radius 长度值或百分数 左上边角 3
border-top-right-radius 长度值或百分数 右上边角 3
border-middle-left-radius 长度值或百分数 左下边角 3
border-middle-right-radius 长度值或百分数 右下边角 3

//设置圆角矩形

div { border: 10px solid red;
        border-radius: 10px;}

//四条边分别设置

div { border: 10px solid red;
      border-radius: 10px 20px 30px 40px;}

四.设置背景

盒模型的尺寸可以通过两种方式实现可见性,一种就是之前的边框,还有一种就是背景。 CSS 背景设置的样式表如下:

属性 说明 CSS 版本
background-color 背景的颜色 1
background-image 背景的图片 1/3
background-repeat 背景图片的样式 1/3
background-size 背景图像的尺寸 3
background-position 背景图像的位置 1
background-attachment 背景图片的滚动 1/3
background-clip 背景图片的裁剪 3
background-origin 背景图片起始点 3
background 背景图片简写方式 1

1.background-color

说明 CSS 版本
颜色 设置背景颜色为指定色 1
transparent 设置背景颜色为透明色 1
div { background-color: silver;}

解释:设置元素的背景颜色。属性值是颜色值。

div b { background-color: transparent;}

解释:默认值为 transparent,为透明的意思。这样<div>内部的元素就会继承<div>的背景色。一般来说这个属性使用频率很低,原因是不需要改变色彩时就默认,需要改变色彩时又是颜色值。

body { background-color: silver;}

解释:在元素下可以设置整个页面的背景色。

2.background-image

说明 CSS 版本
none 取消背景图片的设置 1
url 通过 URL 设置背景图片 1
body { background-image: url(loading.gif);}

解释:url 里面是图片的路径,设置整个页面以这个图片为背景,如果图片不足以覆盖,则复制扩展。

div { background-image: none;}

解释:如果多个 div 批量设置了背景,而其中某一个不需要背景,可以单独设置 none 值取消背景。

在 CSS3 中,背景图片还设置了比如线性、放射性等渐变方式。但由于支持度的问题,比如 IE9 尚未支持。我们把这些的新特性放到独立的课程中讲解。

3.background-repeat

说明 CSS 版本
repeat-x 水平方向平铺图像 1
repeat-y 垂直方向平铺图像 1
repeat 水平和垂直方向同时平铺图像 1
no-repeat 禁止平铺图像 1
body {
       background-image: url(loading.gif);
       background-repeat: no-repeat;
       }

解释:让背景图片只显示一个,不平铺。CSS3 还提供了两个值,由于支持度不佳,这里忽略。

4.background-position

说明 CSS 版本
top 将背景图片定位到元素顶部 1
left 将背景图片定位到元素左部 1
right 将背景图片定位到元素右部 1
bottom 将背景图片定位到元素底部 1
center 将背景图片定位到元素中部 1
长度值 使用长度值偏移图片的位置 1
百分数 使用百分数偏移图片的位置 1
body {
    background-image: url(loading.gif);
    background-repeat: no-repeat;
    background-position: top;}

解释:将背景图片置于页面上方,如果想置于左上方则值为:top left。

body {
    background-image: url(loading.gif);
    background-repeat: no-repeat;
    background-position: 20px 20px;}

解释:使用长度值或百分数,第一值表示左边,第二个值表示上边。

5.background-size

说明 CSS 版本
auto 默认值,图像以本尺寸显示 3
cover 等比例缩放图像,使图像至少覆盖容器,但有可能超出容器 3
contain 等比例缩放图像,使其宽度、高度中较大者与容器横向或纵向重合 3
长度值 CSS 长度值,比如 px、em 3
百分数 比如:100% 3
body { 
    background-image: url(loading.gif);
    background-size: cover;}

解释:使用 cover 相当于 100%,全屏铺面一张大图,这个值非常实用。在等比例放大缩小的过程中,可能会有背景超出,当然,这点无伤大雅。

div { 
    background-image: url(loading.gif);
    background-size: contain;}

解释:使用 contain 表示,尽可能让图片完整的显示在元素内。

body {
    background-image: url(loading.gif);
    background-size: 240px 240px;}

解释:长度值的用法,分别表示长和高。

6.background-attachment

说明 CSS 版本
scroll 默认值,背景固定在元素上,不会随着内容一起滚动 1
fixed 背景固定在视窗上,内容滚动时背景不动 1
body {
    background-image: url(loading.gif);
    background-attachment: fixed;}

解释:fixed 属性会导致背景产生水印效果,拖动滚动条而背景不动。

7.background-origin

说明 CSS 版本
border-box 在元素盒子内部绘制背景 3
padding-box 在内边距盒子内部绘制背景 3
content-box 在内容盒子内部绘制背景 3
div {
    width: 400px; height: 300px;
    border: 10px dashed red; padding: 50px;
    background-image: url(img.png);
    background-repeat: no-repeat;
    background-origin: content-box;}

解释:设置背景起始位置。

8.background-clip

说明 CSS 版本
border-box 在元素盒子内部裁剪背景 3
padding-box 在内边距盒子内部裁剪背景 3
content-box 在内容黑子内部裁剪背景 3
div { width: 400px; height: 300px;
    border: 10px dashed red;
    padding: 50px;
    background-image: url(img.png);
    background-repeat: no-repeat;
    background-origin: border-box;
    background-clip: padding-box;}

解释:在内边距盒子内部裁剪背景。

9.background

div { width: 400px; height: 300px; 
    border: 10px dashed red; 
    padding: 50px; 
    background: silver url(img.png) no-repeat scroll left top/100%      border-box content-box;}

解释:完整的简写顺序如下:

[background-color]

[background-image]

[background-repeat]

[background-attachment]

[background-position]/[background-size]

[background-origin]

[background-clip]

CSS 表格与列表

CSS 表格边框

如需在 CSS 中设置表格边框,请使用 border 属性。

下例为 <table><th><td>元素规定了黑色边框:

Firstname Lastname
Bill Gates
Steve Jobs

实例

table, th, td {
  border: 1px solid black;
}

全宽表格

在某些情况下,上表似乎很小。如果您需要一个可以覆盖整个屏幕(全宽)的表格,请为 <table> 元素添加 width: 100%:

实例

table {
  width: 100%;
}

请注意上面的表格有双边框。这是因为表格和 th、td 元素都有单独的边框。

如需删除双边框,请看下面的例子。

合并表格边框

border-collapse 属性设置是否将表格边框折叠为单一边框:

Firstname Lastname
Bill Gates
Steve Jobs

实例

table {
  border-collapse: collapse;
}

table, th, td {
  border: 1px solid black;
}

一.表格样式

1.border-collapse

table { border-collapse: collapse;}

解释:单元格相邻的边框被合并。

2.border-spacing

说明 CSS 版本
长度值 0 表示间距,其他使用 CSS 长度值 2
table { border-spacing: 10px;}

解释:border-collapse: separate;的状态下才有效。因为要设置间距,不能合并。

3.caption-side

说明 CSS 版本
top 默认值,标题在上方 2
bottom 标题在下方 2
table { table-layout: fixed;}

解释:内容过长后,不会拉伸整个单元格。

4.empty-cells

说明 CSS 版本
show 默认值,显示边框 2
hide 不显示边框 2
table { empty-cells: hide;}

解释:单元格内容为空是隐藏边框。

5.table-layout

说明 CSS 版本
auto 默认值,内容过长时,拉伸整个单元格 2
fixed 内容过长时,不拉伸整个单元格 2
table {table-layout: fixed;}

解释:内容过长后,不会拉伸整个单元格。

二.列表样式

列表有四种独有样式,样式表如下:

1.list-style-type

ul { list-style-type: square;}

解释:列表前缀的标记类型,这里是 CSS1 版本的。CSS2 版本还包含比如日文、亚美尼亚数字、希腊文等前缀。有兴趣的可以参考 CSS 手册。

2.list-type-position

说明 CSS 版本
outside 默认值,标记位于内容框外部 1
inside 标记位于内容框内部 1
ul { width: 120px; 
      list-style-position: inside;}

解释:标记位于内容框的内部。

3.list-type-image

说明 CSS 版本
none 不使用图像 1
url 通过 url 使用图像 1
ul { list-style-image: url(bullet.png);}

解释:使用图片作为前缀的标记。

4.list-style

ul { list-style: lower-alpha inside url(bullet.png);}

解释:简写形式。

三.其他功能

<table><td>单元格,我们可以使用 text-align 属性水平对齐,但是垂直对齐就无法操作了。CSS 提供了 vertical-align 属性用于垂直对齐。

说明 CSS 版本
baseline 内容对象与基线对齐 1
top 内容对象与顶端对齐 1
middle 内容对象与中部对齐 1
bottom 内容对象与底部对齐 1
table tr td { vertical-align: bottom;}

解释:将单元格内的内容对象实现垂直对齐。

说明 CSS 版本
sub 垂直对齐文本的下标 1
super 垂直对齐文本的上标 1
b { vertical-align: super;}

解释:文本上下标设置。

说明 CSS 版本
长度值 设置上下的偏移量,可以是负值 1
百分比 同上 1
div span { vertical-align: -200px;}

解释:负值往下,正值往上。如果默认基线在上面,用负数。如果默认基线在下面,用正值。

CSS 其他样式

一.颜色和透明度

颜色我们之前其实已经用的很多了,比如字体颜色、背景颜色、边框颜色。但除了背景颜色和边框颜色讲解过,字体颜色却没有系统的讲解过。设置字体颜色其实也成为文本块的前景色。

属性 说明 CSS 版本
color 颜色值 设置文本前景色 1
p { color: red;}

解释:设置文本颜色。

CSS3 提供了一个属性 opacity,可以设置元素的透明度。

属性 说明 CSS 版本
opacity 0 ~ 1 设置元素的透明度 3
p { color: red; opacity: 0.5;}

解释:设置元素的透明度。

二.盒子阴影和轮廓

1.box-shadow

CSS3 提供了一个非常实用的效果样式,就是阴影效果。通过 box-shadow 属性来实现,样式表如下:

div { width: 200px; 
        height: 200px; 
        border: 10px solid silver; 
        box-shadow: 5px 4px 10px 2px gray;}

解释:给元素盒子增加阴影效果。

box-shadow: 5px 4px 10px 2px gray inset;

解释:实现内部阴影。

2.outline

CSS3 还提供了轮廓样式,它和边框一样,只不过它可以在边框的外围再加一层。样式表如下:

属性 说明 CSS 版本
outline-color 颜色 外围轮廓的颜色 3
outline-offset 长度 轮廓距离元素边框边缘的偏移量 3
outline-style 样式 轮廓样式,和 border-style 一致 3
ontline-witdh 长度 轮廓宽度 3
outline 简写 <颜色> <样式> <宽度> 3
div { width: 200px; height: 200px;
    border: 10px solid silver; 
    outline: 10px double red;}

解释:在边框的外围再增加一圈轮廓。

三.光标样式

我们不但可以指定页面上的元素样式,就连光标的样式也可以指定。样式表如下:

属性 说明 CSS 版本
cursor 光标样式 auto,default,none,context-menu,help,pointer,progress,wait,cell,crosshair,text,vertical-text,alias,copy,move,no-drop,not-allowed,e-resize,n-resize,ne-resize,nw-resize,s-resize,se-resize,sw-resize,w-resize,ew-resize,ns-resize,nesw-resize,nwse-resize,col-resize,row-resize,all-scroll 1
div { cursor: move;}

解释:设置当前元素的光标为移动光标。