
## CSS (Cascading Style Sheets) 用于渲染HTML元素标签的样式。

CSS 是在 HTML 4 开始使用的,是为了更好的渲染HTML元素而引入的.

CSS 可以通过以下方式添加到HTML中:

- 内联样式- 在HTML元素中使用"style" **属性**
- 内部样式表 -在HTML文档头部\<head> 区域使用\<style> **元素** 来包含CSS
- 外部引用 - 使用外部 CSS **文件**

最好的方式是通过外部引用CSS文件.

**内联样式**

当特殊的样式需要应用到个别元素时，就可以使用内联样式。 使用内联样式的方法是在相关的标签中使用样式属性。样式属性可以包含任何 CSS 属性。以下实例显示出如何改变段落的颜色和左外边距。

`<p style="color:blue;margin-left:20px;">这是一个段落。</p>`

<p style="color:blue;margin-left:20px;">这是一个段落。</p>

HTML中引入CSS的方式

有 4 种方式可以在 HTML 中引入 CSS。其中有 2 种方式是在 HTML 文件中直接添加 CSS 代码，另外两种是引入 外部 CSS 文件。下面我们就来看看这些方式和它们的优缺点。

**内联方式**

内联方式指的是直接在 HTML 标签中的 **style** 属性中添加 CSS。

示例：

```
<div style="background: red"></div>
```
<div style="background: red"></div>

这通常是个很糟糕的书写方式，它只能改变当前标签的样式，如果想要多个 **\<div>** 拥有相同的样式，你不得不重复地为每个 **\<div>** 添加相同的样式，如果想要修改一种样式，又不得不修改所有的 style 中的代码。

**嵌入方式**

嵌入方式指的是在 HTML 头部中的 **\<style>** 标签下书写 CSS 代码。

示例：

```
<head>
    <style>

    .content {
        background: red;
    }

    </style>
</head>
```


嵌入方式的 CSS 只对当前的网页有效。因为 CSS 代码是在 HTML 文件中，所以会使得代码比较集中，当我们写模板网页时这通常比较有利。因为查看模板代码的人可以一目了然地查看 HTML 结构和 CSS 样式。因为嵌入的 CSS 只对当前页面有效，所以当多个页面需要引入相同的 CSS 代码时，这样写会导致代码冗余，也不利于维护。

**链接方式**

链接方式指的是使用 HTML 头部的 **\<head>** 标签引入外部的 CSS 文件。

示例：

```
<head>
    <link rel="stylesheet" type="text/css" href="style.css">
</head>
```

这是最常见的也是最推荐的引入 CSS 的方式。使用这种方式，所有的 CSS 代码只存在于单独的 CSS 文件中，所以具有良好的可维护性。并且所有的 CSS 代码只存在于 CSS 文件中，CSS 文件会在第一次加载时引入，以后切换页面时只需加载 HTML 文件即可。

**导入方式**

导入方式指的是使用 CSS 规则引入外部 CSS 文件。

示例：

```
<style>
    @import url(style.css);
</style>
```

比较链接方式和导入方式

链接方式（下面用 link 代替）和导入方式（下面用 **@import** 代替）都是引入外部的 CSS 文件的方式，下面我们来比较这两种方式，并且说明为什么不推荐使用 **@import**。

- link 属于 HTML，通过 **\<link>** 标签中的 href 属性来引入外部文件，而 **@import** 属于 CSS，所以导入语句应写在 CSS 中，要注意的是导入语句应写在样式表的开头，否则无法正确导入外部文件；
- **@import** 是 CSS2.1 才出现的概念，所以如果浏览器版本较低，无法正确导入外部样式文件；
- 当 HTML 文件被加载时，link 引用的文件会同时被加载，而 **@import** 引用的文件则会等页面全部下载完毕再被加载；
- 使用 dom(document object model文档对象模型 )控制样式时的差别：当使用 javascript 控制 dom 去改变样式的时候，只能使用 link 标签，因为**@import** 不是 dom 可以控制的。

------

**小结**：我们应尽量使用 **\<link>** 标签导入外部 CSS 文件，避免或者少用使用其他三种方式。

##  CSS简介

 CSS 指层叠样式表 (**C**ascading **S**tyle **S**heets)

·   样式定义**如何显示** HTML 元素

·   样式通常存储在**样式表**中

·   把样式添加到 HTML 4.0 中，是为了**解决内容与表现分离的问题**

·   **外部样式表**可以极大提高工作效率

·   外部样式表通常存储在 **CSS** **文件**中

·   多个样式定义可**层叠**为一个



CSS 规则由两个主要的部分构成：选择器，以及一条或多条声明:

`h1 {color:blue;fontsize:12px;}`



选择器通常是您需要改变样式的 HTML 元素。

每条声明由一个属性和一个值组成。

属性（property）是您希望设置的样式属性（style attribute）。每个属性有一个值。属性和值被冒号分开。

## CSS 实例

CSS声明总是以分号 **;** 结束，声明总以大括号 **{}** 括起来:

```
p {color:red;text-align:center;}
```

## CSS 注释

注释是用来解释你的代码，并且可以随意编辑它，浏览器会忽略它。

CSS注释以 **/\*** 开始, 以 **\*/** 结束

## CSS选择器


### id 选择器

id 选择器可以为标有特定 id 的 HTML 元素指定特定的样式。

HTML元素以id属性来设置id选择器,CSS 中 id 选择器以 "#" 来定义。

以下的样式规则应用于元素属性 id="para1":
```
<style>

#para1

{

​     text-align:center;

​     color:red;

} 

</style>

</head>

 

<body>

<p id="para1">Hello World!</p>

<p>这个段落不受该样式的影响。</p>
```

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"> 
<title>菜鸟教程(runoob.com)</title> 
<style>
#para1
{
	text-align:center;
	color:red;
} 
</style>
</head>
    <body>

<p id="para1">Hello World!</p>
<p>这个段落不受该样式的影响。</p>

</body>
</html>





### class 选择器

class 选择器用于描述一组元素的样式，class 选择器有别于id选择器，class可以在多个元素中使用。

class 选择器在 HTML 中以 class 属性表示, 在 CSS 中，类选择器以一个点 **.** 号显示：

在以下的例子中，所有拥有 center 类的 HTML 元素均为居中。
```
<style>

.center

{

​     text-align:center;

}

</style>

</head>

 

<body>

<h1 class="center">标题居中</h1>

<p class="center">段落居中。</p>

```
 <!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"> 
<title>菜鸟教程(runoob.com)</title> 
<style>
.center
{
	text-align:center;
}
</style>
</head>

<body>
<h1 class="center">标题居中</h1>
<p class="center">段落居中。</p> 
</body>
</html>

 

你也可以指定特定的 HTML 元素使用 class。

在以下实例中, 所有的 p 元素使用 class="center" 让该元素的文本居中:

**实例**

`p.center {text-align:center;}`

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"> 
<title>菜鸟教程(runoob.com)</title> 
<style>
p.center
{
	text-align:center;
}
</style>
</head>

<body>
<h1 class="center">这个标题不受影响</h1>
<p class="center">这个段落居中对齐。</p> 
</body>
</html>

多个 class 选择器可以使用空格分开：

**实例**
```
.center { text-align:center; } 
.color { color:#ff0000; }
```
 <!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"> 
<title>菜鸟教程(runoob.com)</title> 
<style>
.center {
	text-align:center;
}
.color {
	color:#ff0000;
}
</style>
</head>

<body>
<h1 class="center">标题居中</h1>
<p class="center color">段落居中，颜色为红色。</p> 
</body>
</html>

ID属性不要以数字开头，数字开头的ID在 Mozilla/Firefox 浏览器中不起作用
类名的第一个字符不能使用数字！它无法在 Mozilla 或 Firefox 中起作用。

### 通用选择器
语法形式为：*{属性：属性值}。它的作用是匹配 html 中的所有元素标签。
```
<!--使用html中任意标签元素字体颜色全部设置为红色：-->
<style>
*{color:red;}
</style>

<body>
<h1>标题为红色</h1>
<p>段落也为红色</p>
</body>
```

### 元素选择器（element selector，ES）

又叫标签选择器，使用标签名作为selector名，语法格式：S{...}（S为选择器名）。例：所有的p标签都会匹配以下的样式

```
<style>
p{
  font-style:italic;
}
</style>
<!--下面的文字是斜体的-->
<p style="font-style:italic">italic text</p>
```
组合选择器被称为 组合器（Combinators）。一共有4种组合器：

' ' 后代组合器（Descendant combinator）

'>' 直接子代组合器（Child combinator）

'~' 一般兄弟组合器（General sibling combinator）

'+' 紧邻兄弟组合器（Adjacent sibling combinator）

### 运算符
#### 包含选择器（package selector，PS）

指定目标选择器必须处在某个选择器对应的元素内部，语法格式：A B{...}（A、B为HTML元素/标签，表示对处于A中的B标签有效）。例：以下div内的p标签和div外的p标签分别匹配不同的样式

```
<style>
p{
  color:red;
}
div p{
  color:yellow;
}
</style>
<p>red text</p><!--文字是红色的-->
<div>
  <p>yellow text</p><!--文字是黄色的-->
</div>
```
#### 子选择器（sub-selector，SS）


类似于PS，指定目标选择器必须处在某个选择器对应的元素内部，两者区别在于PS允许"子标签"甚至"孙子标签"及嵌套更深的标签匹配相应的样式，而SS强制指定目标选择器作为 包含选择器对应的标签 内部的标签，语法格式：A>B{...}（A、B为HTML元素/标签）。例：以下div内的p标签匹配样式，div内的table内的p不匹配
```
<style>
div>p{
  color:red;
}
</style>
<div>
  <p>red text</p><!--文字是红色的-->
  <table>
    <tr>
      <td>
        <p>no red text;</p><!--文字是非红色的-->
      </td>
    </tr>
  </table>
</div>
```

#### 兄弟选择器（brother selector，BS）

BS是CSS3.0新增的一个选择器，语法格式：A~B{...}（A、B为HTML元素/标签，表示A标签匹配selector的A，选中与A元素同父级 的、在A之后的所有B元素，B标签匹配样式）
```
<style>
div~p{
  color:red;
}
</style>
<div>
  <p>no red text</p><!--文字是非红色的-->
  <div>no red text</div>
  <p>red text</p><!--文字是红色的-->
</div>
```

#### 相邻选择器:
A+B{
    声明1; 
    声明;
    ...
}
实例:
```
<!--相邻选择器选择每个div紧邻后的一个元素p-->
<style>
   div+p{
     color: red;
   }
</style>
<div>
   <p>not red text</p>
   <p>not red text</p>
</div>
<p>red text</p>
<p>not red text</p>
```
### 标签属性选择器

这组选择器根据一个元素上的某个标签的属性的存在以选择元素的不同方式：
CSS 属性选择器用于根据元素的属性或属性值来选择 HTML 元素。

属性选择器可以帮助你在不需要为元素添加类或 ID 的情况下对其进行样式化。

注意：IE7 和 IE8 需声明 !DOCTYPE 才支持属性选择器！IE6 和更低的版本不支持属性选择器。

以下是常见的 CSS 属性选择器：

1、[attribute]
选择带有指定属性的所有元素（无论属性值是什么）。

/* 选择所有具有 `type` 属性的元素 */
```
[type] {
  border: 1px solid red;
}
```


2、[attribute="value"]
选择具有指定属性和值完全匹配的元素。

/* 选择所有 `type` 属性等于 `text` 的元素 */
```
[type="text"] {
  background-color: yellow;
}
```
3、[attribute~="value"]
选择属性值中包含指定词（用空格分隔的词列表之一）的元素。

/* 选择属性值中包含 `button` 的元素 */
```
[class~="button"] {
  font-weight: bold;
}
```
4、[attribute|="value"]
选择具有指定值或者以指定值开头并紧跟着连字符 - 的属性值的元素，常用于语言代码。

/* 选择所有 `lang` 属性是 `en` 或者以 `en-` 开头的元素 */
```
[lang|="en"] {
  color: green;
}
```
5、[attribute^="value"]
选择属性值以指定值开头的元素。

/* 选择所有 `href` 属性以 `https` 开头的链接 */
```
[href^="https"] {
  text-decoration: none;
}
```
6、[attribute$="value"]
选择属性值以指定值结尾的元素。

/* 选择所有 src 属性以 .jpg 结尾的图片 */
```
[src$=".jpg"] {
  border: 2px solid blue;
}
```

7、[attribute*="value"]
选择属性值中包含指定值的元素。

/* 选择所有 `title` 属性中包含 `tutorial` 的元素 */
```
[title*="tutorial"] {
  font-style: italic;
}
```

a[title] - 带元素限制的属性选择器
```
a[title] {
}
```
或者根据一个有特定值的标签属性是否存在来选择：


```
a[href="https://example.com"] {
}
```

"value 是完整单词" 类型的比较符号: =(完全匹配)，~=（包含指定词）, |=（选择具有指定值或者以指定值开头并紧跟着连字符 - 的属性值的元素，）

"拼接字符串" 类型的比较符号: *=(包含), ^=（以开头）, $ =（以结尾）

- 元素选择器/标签选择器ES       说明：选中指定标签，也叫元素选择器
- id选择器IS #           说明：选中id属性
- class选择器CS .       说明：选中class属性
- 属性选择器AS   []       说明：这样写"a[id]"，选中指定规则的属性，所在标签。
- 包含选择器PS （空格）   说明：选中所有儿子，孙子等....
- 子选择器SS  >       说明：选中所有儿子，不选孙子等...
- 兄弟选择器BS  ~      说明：选中后面一个或多个兄弟
- 相邻选择器  +       说明：选中后面一个兄弟
- 伪类选择器   :      说明：主要根据用户动作，标签位置，标签状态来选中
- 伪元素选择器 ::     说明：主要选中一段文本的一行，首字，或前后添加样式


css 中逗号，空格，冒号，点号的含义

1. #a,b{…………｝一个id叫a和一个标签是b的样式

2. #a b{…………｝一个id叫a下面的一个标签是b的样式

3. #a:b{…………｝一个id叫a的伪类b，例如：a:hover

4. #a.b{…………｝一个id叫a的下面的class叫b的样式

优先级是浏览器是通过判断哪些属性值与元素最相关以决定并应用到该元素上的。优先级仅由选择器组成的匹配规则决定的。

优先级就是分配给指定的CSS声明的一个权重，它由匹配的选择器中的每一种选择器类型的数值决定。

优先级顺序

（行内样式） > （ID选择器） > （类/伪类/属性选择器） > （元素（标签）/伪元素） > （通用选择器）
!important 规则例外
当 !important 规则被应用在一个样式声明中时,该样式声明会覆盖CSS中任何其他的声明, 无论它处在声明列表中的哪里. 尽管如此, !important规则还是与优先级毫无关系.使用 !important 不是一个好习惯，因为它改变了你样式表本来的级联规则，从而使其难以调试。
样式来源的优先级
内联样式 > 内部样式表 > 外部样式表 > 浏览器样式表

一些经验法则：

Always 要优化考虑使用样式规则的优先级来解决问题而不是 !important
Only 只在需要覆盖全站或外部 css（例如引用的 ExtJs 或者 YUI ）的特定页面中使用 !important
Never 永远不要在全站范围的 css 上使用 !important
Never 永远不要在你的插件中使用 !important
利用选择器的权值进行计算比较，em 显示蓝色，示例如下：https://c.runoob.com/codedemo/3048

CSS 优先级法则：
 A 选择器都有一个权值，权值越大越优先；
 B 当权值相等时，后出现的样式表设置要优于先出现的样式表设置；
 C 创作者的规则高于浏览者：即网页编写者设置的CSS 样式的优先权高于浏览器所设置的样式；
 D 继承的CSS 样式不如后来指定的CSS 样式；
 E 在同一组属性设置中标有“!important”规则的优先级最大；示例如下：

在学习 CSS 的过程中，你可能听说过一种"选择器加权值"的说法：ID 选择器的权重是 100，类选择器是 10，标签选择器是 1，然后把它们加起来比较大小。这种理解方式虽然表面上容易记，但其实是错误的。

举个例子，有两个选择器：

.class1.class2.class3 ... （共11个类）
#id
如果你用"加法"的方法计算，会认为前者权重是 110，后者是 100，应该前者胜出。可实际上，浏览器会选择后者的样式（#id 的）。

为什么？因为 CSS 并不是把选择器权重当作"十进制加法"处理的。CSS 的优先级比较本质上是分级比较，可以理解为四位数比较：

内联样式：1,0,0,0
ID 选择器：0,1,0,0
类、属性选择器、伪类：0,0,1,0
标签选择器、伪元素：0,0,0,1

当读到一个样式表时，浏览器会根据它来格式化 HTML 文档。


CSS 继承性取决于 HTML 的父子层级关系（嵌套关系），而不是标签是否相同。
CSS 的继承特性指的是应用在一个标签上的那些 CSS 属性被传到其子标签上。看下面的 HTML 结构：
```
<div>
    <p></p>
</div>
```

如果 \<div> 有个属性 color: red，则这个属性将被 \<p> 继承，即 \<p> 也拥有属性 color: red。

由上可见，当网页比较复杂， HTML 结构嵌套较深时，一个标签的样式将深受其祖先标签样式的影响。影响的规则是：

CSS 优先规则1： 最近的祖先样式比其他祖先样式优先级高。

例1：
```
<!-- 类名为 son 的 div 的 color 为 blue -->
<div style="color: red">
    <div style="color: blue">
        <div class="son"></div>
    </div>
</div>
```
如果我们把一个标签从祖先那里继承来的而自身没有的属性叫做"祖先样式"，那么"直接样式"就是一个标签直接拥有的属性。又有如下规则：

CSS 优先规则2："直接样式"比"祖先样式"优先级高。

例2：
```
<!-- 类名为 son 的 div 的 color 为 blue -->
<div style="color: red">
    <div class="son" style="color: blue"></div>
</div>
```

### 多重样式

如果某些属性在不同的样式表中被同样的选择器定义，那么属性值将从更具体的样式表中被继承过来。 
优先级
样式表允许以多种方式规定样式信息。样式可以规定在单个的 HTML 元素中，在 HTML 页的头元素中，或在一个外部的 CSS 文件中。甚至可以在同一个 HTML 文档内部引用多个外部样式表。

一般情况下，优先级如下：

**（内联样式）Inline style > （内部样式）Internal style sheet >（外部样式）External style sheet > 浏览器默认样式**

**注意：**如果外部样式放在内部样式的后面，则外部样式将覆盖内部样式，实例如下：
```
<head>
    <!-- 设置：h3{color:blue;} -->
    <style type="text/css">
      /* 内部样式 */
      h3{color:green;}
    </style>
    <!-- 外部样式 style.css -->
    <link rel="stylesheet" type="text/css" href="style.css"/>
</head>
<body>
    <h3>显示蓝色，是外部样式</h3>
</body>
```
## CSS 背景属性

| **Property**                                                 | **描述**                                     |
| ------------------------------------------------------------ | -------------------------------------------- |
| [background](https://www.runoob.com/cssref/css3-pr-background.html) | 简写属性，作用是将背景属性设置在一个声明中。 |
| [background-attachment](https://www.runoob.com/cssref/pr-background-attachment.html) | 背景图像是否固定或者随着页面的其余部分滚动。 |
| [background-color](https://www.runoob.com/cssref/pr-background-color.html) | 设置元素的背景颜色。                         |
| [background-image](https://www.runoob.com/cssref/pr-background-image.html) | 把图像设置为背景。                           |
| [background-position](https://www.runoob.com/cssref/pr-background-position.html) | 设置背景图像的起始位置。                     |
| [background-repeat](https://www.runoob.com/cssref/pr-background-repeat.html) | 设置背景图像是否及如何重复。                 |

 

**背景颜色**

background-color 属性定义了元素的背景颜色.

页面的背景颜色使用在body的选择器中:

**实例**

`body {background-color:#b0c4de;}`

CSS中，颜色值通常以以下方式定义:

·    十六进制 - 如："#ff0000"

·    RGB - 如："rgb(255,0,0)"

·    颜色名称 - 如："red"

以下实例中, h1, p, 和 div 元素拥有不同的背景颜色:

**实例**
```
h1 {background-color:#6495ed;}
 p {background-color:#e0ffff;}
 div {background-color:#b0c4de;}
```




**背景图像**

background-image 属性描述了元素的背景图像.

默认情况下，背景图像进行平铺重复显示，以覆盖整个元素实体.

页面背景图片设置实例:

**实例**

`body {background-image:url('paper.gif');}`
背景图像 - 水平或垂直平铺
默认情况下 background-image 属性会在页面的水平或者垂直方向平铺。
如果图像只在水平方向平铺 (repeat-x), 页面背景会更好些:

**实例**
```
body
 {
 background-image:url('gradient2.png');
 background-repeat:repeat-x;
 }
```

背景图像- 设置定位与不平铺
如果你不想让图像平铺，你可以使用 background-repeat 属性:

```
body
{
background-image:url('img_tree.png');
background-repeat:no-repeat;
}
```
以上实例中，背景图像与文本显示在同一个位置，为了让页面排版更加合理，不影响文本的阅读，我们可以改变图像的位置。

可以利用 background-position 属性改变图像在背景中的位置:

**实例**
```
body
 {
 background-image:url('img_tree.png');
 background-repeat:no-repeat;
 background-position:right top;
 }
```
**背景****-** **简写属性**

在以上实例中我们可以看到页面的背景颜色通过了很多的属性来控制。

为了简化这些属性的代码，我们可以将这些属性合并在同一个属性中.

背景颜色的简写属性为 "background":

**实例**

body {background:#ffffff url('img_tree.png') no-repeat right top;}

 当使用简写属性时，属性值的顺序为：:

background-color
background-image
background-repeat
background-attachment
background-position

## 文本格式

### 文本颜色

颜色属性被用来设置文字的颜色。

颜色是通过CSS最经常的指定：

· 十六进制值 - 如: ＃FF0000

· 一个RGB值 - 如: RGB(255,0,0)

· 颜色的名称 - 如: red

参阅 [CSS 颜色值](https://www.runoob.com/cssref/css-colors-legal.html) 查看完整的颜色值。

一个网页的背景颜色是指在主体内的选择：


`body {color:red;} h1 {color:#00ff00;} h2 {color:rgb(255,0,0);}`


**文本的对齐方式**

文本排列属性是用来设置文本的水平对齐方式。

文本可居中或对齐到左或右,两端对齐.

当text-align设置为"justify"，每一行被展开为宽度相等，左，右外边距是对齐（如杂志和报纸）。

**实例**
```
h1 {text-align:center;}
p.date {text-align:right;}
p.main {text-align:justify;}
```




**文本修饰**

text-decoration 属性用来设置或删除文本的装饰。

从设计的角度看 text-decoration属性主要是用来删除链接的下划线：

**实例**

`a {text-decoration:none;}`



也可以这样装饰文字：

**实例**

```
h1 {text-decoration:overline;}
h2 {text-decoration:line-through;}
h3 {text-decoration:underline;}
```


**文本转换**

文本转换属性是用来指定在一个文本中的大写和小写字母。

可用于所有字句变成大写或小写字母，或每个单词的首字母大写。

**实例**
```
p.uppercase {text-transform:uppercase;}
p.lowercase {text-transform:lowercase;}
p.capitalize {text-transform:capitalize;}
```
**文本缩进**

文本缩进属性是用来指定文本的第一行的缩进。

**实例**

`p {text-indent:50px;}`


## CSS字体
CSS字体属性定义字体，加粗，大小，文字样式。

**CSS字型**

在CSS中，有两种类型的字体系列名称：

- **通用字体系列** - 拥有相似外观的字体系统组合（如     "Serif" 或 "Monospace"）
- **特定字体系列** - 一个特定的字体系列（如 "Times" 或 "Courier"）

**字体系列**
font-family 属性设置文本的字体系列。

font-family 属性应该设置几个字体名称作为一种"后备"机制，如果浏览器不支持第一种字体，他将尝试下一种字体。

注意: 如果字体系列的名称超过一个字，它必须用引号，如Font Family："宋体"。

多个字体系列是用一个逗号分隔指明：

`p{font-family:"Times New Roman", Times, serif;}`

**字体样式**

主要是用于指定斜体文字的字体样式属性。

这个属性有三个值：

- 正常 - 正常显示文本
- 斜体 - 以斜体字显示的文字
- 倾斜的文字 - 文字向一边倾斜（和斜体非常类似，但不太支持）

**实例**
```
p.normal {font-style:normal;}
 p.italic {font-style:italic;}
 p.oblique {font-style:oblique;}
```

**字体大小**

font-size 属性设置文本的大小。

能否管理文字的大小，在网页设计中是非常重要的。但是，你不能通过调整字体大小使段落看上去像标题，或者使标题看上去像段落。

请务必使用正确的HTML标签，就\<h1> - \<h6>表示标题和\<p>表示段落：

字体大小的值可以是绝对或相对的大小。

绝对大小：

- 设置一个指定大小的文本
- 不允许用户在所有浏览器中改变文本大小
- 确定了输出的物理尺寸时绝对大小很有用

相对大小：

- 相对于周围的元素来设置大小
- 允许用户在浏览器中改变文字大小

如果你不指定一个字体的大小，默认大小和普通文本段落一样，是16像素（16px=1em）。

**设置字体大小像素**

设置文字的大小与像素，让您完全控制文字大小：

**实例**

```
h1 {font-size:40px;}
 h2 {font-size:30px;}
 p {font-size:14px;}
```


上面的例子可以在 Internet Explorer 9, Firefox, Chrome, Opera, 和 Safari 中通过缩放浏览器调整文本大小。

虽然可以通过浏览器的缩放工具调整文本大小，但是，这种调整是整个页面，而不仅仅是文本



**用em来设置字体大小**

为了避免Internet Explorer 中无法调整文本的问题，许多开发者使用 em 单位代替像素。

em的尺寸单位由W3C建议。

1em和当前字体大小相等。在浏览器中默认的文字大小是16px。

因此，1em的默认大小是16px。可以通过下面这个公式将像素转换为em：**px/16=em**

**实例**
```
h1 {font-size:2.5em;} /* 40px/16=2.5em */
 h2 {font-size:1.875em;} /* 30px/16=1.875em */
 p {font-size:0.875em;} /* 14px/16=0.875em */
```


在上面的例子，em的文字大小是与前面的例子中像素一样。不过，如果使用 em 单位，则可以在所有浏览器中调整文本大小。

不幸的是，仍然是IE浏览器的问题。调整文本的大小时，会比正常的尺寸更大或更小。



**使用百分比和EM组合**

在所有浏览器的解决方案中，设置 \<body>元素的默认字体大小的是百分比：

**实例**
```
body {font-size:100%;}
 h1 {font-size:2.5em;}
 h2 {font-size:1.875em;}
 p {font-size:0.875em;}
```

## CSS链接
**链接样式**

链接的样式，可以用任何CSS属性（如颜色，字体，背景等）。

特别的链接，可以有不同的样式，这取决于他们是什么状态。

这四个链接状态是：

- a:link - 正常，未访问过的链接
- a:visited - 用户已访问过的链接
- a:hover - 当用户鼠标放在链接上时
- a:active - 链接被点击的那一刻

**实例**

```
a:link {color:#000000;}      /* 未访问链接*/
a:visited {color:#00FF00;}  /* 已访问链接 */
a:hover {color:#FF00FF;}  /* 鼠标移动到链接上 */
a:active {color:#0000FF;}  /* 鼠标点击时 */
```

当设置为若干链路状态的样式，也有一些顺序规则：

- a:hover 必须跟在 a:link 和 a:visited后面
- a:active 必须跟在 a:hover后面

 

**常见的链接样式**

根据上述链接的颜色变化的例子，看它是在什么状态。

让我们通过一些其他常见的方式转到链接样式：

**文本修饰**

text-decoration 属性主要用于删除链接中的下划线：

```
a:link {text-decoration:none;}
a:visited {text-decoration:none;}
a:hover {text-decoration:underline;}
a:active {text-decoration:underline;}
```


**背景颜色**

背景颜色属性指定链接背景色：

**实例**

```
a:link {background-color:#B2FF99;}
a:visited {background-color:#FFFF85;}
a:hover {background-color:#FF704D;}
a:active {background-color:#FF704D;}
```

 链接样式的顺序记忆：

L(link)OV(visited)E  and  H(hover)A(active)TE

**CSS 列表**



CSS 列表属性作用如下：

- 设置不同的列表项标记为有序列表
- 设置不同的列表项标记为无序列表
- 设置列表项标记为图像

 



**列表**

在 HTML中，有两种类型的列表：

- 无序列表 **ul** - 列表项标记用特殊图形（如小黑点、小方框等）
- 有序列表 **ol** - 列表项的标记有数字或字母

使用 CSS，可以列出进一步的样式，并可用图像作列表项标记。



**不同的列表项标记**

list-style-type属性指定列表项标记的类型是：

**实例**

```
ul.a {list-style-type: circle;}
ul.b {list-style-type: square;}
 
ol.c {list-style-type: upper-roman;}
ol.d {list-style-type: lower-alpha;}
```

作为列表项标记的图像
要指定列表项标记的图像，使用列表样式图像属性：

实例
```
ul
{
    list-style-image: url('sqpurple.gif');
}
```

**浏览器兼容性解决方案**

同样在所有的浏览器，下面的例子会显示的图像标记：

**实例**

```
ul
{
    list-style-type: none;
    padding: 0px;
    margin: 0px;
}
ul li
{
    background-image: url(sqpurple.gif);
    background-repeat: no-repeat;
    background-position: 0px 5px; 
    padding-left: 14px; 
}
```


例子解释：

- ul:
  - 设置列表类型为没有列表项标记
  - 设置填充和边距 0px（浏览器兼容性）
- ul 中所有 li:
  - 设置图像的 URL，并设置它只显示一次（无重复）
  - 您需要的定位图像位置（左 0px 和上下 5px）
  - 用 padding-left 属性把文本置于列表中

**列表 - 简写属性**

在单个属性中可以指定所有的列表属性。这就是所谓的简写属性。

为列表使用简写属性，列表样式属性设置如下：

**实例**

```
ul
{
    list-style: square url("sqpurple.gif");
}
```


可以按顺序设置如下属性：

- list-style-type
- list-style-position (有关说明，请参见下面的CSS属性表)
- list-style-image

**移除默认设置**

list-style-type:none 属性可以用于移除小标记。默认情况下列表 <ul> 或 <ol> 还设置了内边距和外边距，可使用 margin:0 和 padding:0 来移除:

**实例**

```
ul {
  list-style-type: none;
  margin: 0;
  padding: 0;
}
```
表格边框

指定CSS表格边框，使用border属性。

下面的例子指定了一个表格的Th和TD元素的黑色边框：

```
table, th, td
{
  border: 1px solid black;
}
```


请注意，在上面的例子中的表格有双边框。这是因为表和th/ td元素有独立的边界。


为了显示一个表的单个边框，使用 border-collapse属性。


**折叠边框**

border-collapse 属性设置表格的边框是否被折叠成一个单一的边框或隔开：


```
table

{

  border-collapse:collapse;

}

table,th, td

{

  border: 1px solid black;

}
```

 

表格宽度和高度

Width和height属性定义表格的宽度和高度。

 

下面的例子是设置100％的宽度，50像素的th元素的高度的表格：

```
table 

{

  width:100%;

}

th

{

  height:50px;

}

```


表格文字对齐

表格中的文本对齐和垂直对齐属性。

 

text-align属性设置水平对齐方式，向左，右，或中心：


```
td

{

  text-align:right;

}

```



垂直对齐属性设置垂直对齐，比如顶部，底部或中间：


```

td

{

  height:50px;

  vertical-align:bottom;

}
```


表格填充

如需控制边框和表格内容之间的间距，应使用td和th元素的填充属性：


```


td

{

  padding:15px;

}

```



 

表格颜色

下面的例子指定边框的颜色，和th元素的文本和背景颜色：


```

table, td, th

{

  border:1px solid green;

}

th

{

  background-color:green;

  color:white;
}

```
## CSS 盒子模型(Box Model)

所有HTML元素可以看作盒子，在CSS中，"box model"这一术语是用来设计和布局时使用。

CSS盒模型本质上是一个盒子，封装周围的HTML元素，它包括：边距，边框，填充，和实际内容。

盒模型允许我们在其它元素和周围元素边框之间的空间放置元素。

下面的图片说明了盒子模型(Box Model)：

![CSS box-model](https://www.runoob.com/images/box-model.gif)

不同部分的说明：

- **Margin(****外边距****)** -     清除边框外的区域，外边距是透明的。
- **Border(****边框****)** -     围绕在内边距和内容外的边框。
- **Padding(****内边距****)** -     清除内容周围的区域，内边距是透明的。
- **Content(****内容****)** -     盒子的内容，显示文本和图像。

为了正确设置元素在所有浏览器中的宽度和高度，你需要知道的盒模型是如何工作的。



**元素的宽度和高度**

**重要****:** 当您指定一个 CSS 元素的宽度和高度属性时，你只是设置内容区域的宽度和高度。要知道，完整大小的元素，你还必须添加内边距，边框和外边距。

下面的例子中的元素的总宽度为 450px：

**实例**

```
div {
    width: 300px;
    border: 25px solid green;
    padding: 25px;
    margin: 25px;
}
```


让我们自己算算：
 300px (宽)
 \+ 50px (左 + 右填充)
 \+ 50px (左 + 右边框)
 \+ 50px (左 + 右边距)
 = 450px


最终元素的总宽度计算公式是这样的：

总元素的宽度=宽度+左填充+右填充+左边框+右边框+左边距+右边距

元素的总高度最终计算公式是这样的：

总元素的高度=高度+顶部填充+底部填充+上边框+下边框+上边距+下边距
## CSS 边框

CSS 边框（Border）是用于定义元素边框样式的属性。

边框可以应用于任何 HTML 元素，用于增强视觉效果、分隔内容或突出显示元素。

CSS 边框属性主要包括边框宽度、边框样式、边框颜色以及简写属性。



**CSS** **边框属性**

CSS边框属性允许你指定一个元素边框的样式和颜色。

在四边都有边框
`border: 1px solid #ccc!important;border-color: #000!important;padding: 14px;`


红色底部边框
`border-bottom: 1px solid #ccc!important;padding:14px;border-color: #f44336!important;`


圆角边框
`border: 1px solid #ccc!important;padding:14px;border-radius: 16px!important;`


左侧边框带宽度，颜色为蓝色
`background-color: #ddffff!important;padding: 14px;border-left: 6px solid #ccc!important;border-color: #2196F3!important;`


**边框样式**

边框样式属性指定要显示什么样的边界。

**border-style** 属性用于指定要显示的边框类型。

允许的值如下：

- dotted：定义点状边框。
- dashed：定义虚线边框。
- solid：定义实线边框。
- double：定义双线边框。两个边框的宽度和 border-width 的值相同
- groove：定义三维沟槽边框。效果取决于 border-color 的值。
- ridge：定义三维脊状边框。效果取决于 border-color 的值。
- inset：定义三维嵌入边框。效果取决于 border-color 的值。
- outset：定义三维突出边框。效果取决于 border-color 的值。
- none：定义无边框。
- hidden：定义隐藏边框。

**border-style** **演示****:**




<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"> 
<title>菜鸟教程(runoob.com)</title> 
<style>
p.none {border-style:none;}
p.dotted {border-style:dotted;}
p.dashed {border-style:dashed;}
p.solid {border-style:solid;}
p.double {border-style:double;}
p.groove {border-style:groove;}
p.ridge {border-style:ridge;}
p.inset {border-style:inset;}
p.outset {border-style:outset;}
p.hidden {border-style:hidden;}
p.mix {border-style: dotted dashed solid double;}
</style>
</head>

<body>
<p class="none">无边框。</p>
<p class="dotted">虚线边框。</p>
<p class="dashed">虚线边框。</p>
<p class="solid">实线边框。</p>
<p class="double">双边框。</p>
<p class="groove"> 凹槽边框。</p>
<p class="ridge">垄状边框。</p>
<p class="inset">嵌入边框。</p>
<p class="outset">外凸边框。</p>
<p class="hidden">隐藏边框。</p>
<p class="mix">混合边框</p>
</body>

</html>


**边框宽度**

您可以通过 border-width 属性为边框指定宽度。

为边框指定宽度有两种方法：可以指定长度值，比如 2px 或 0.1em(单位为 px, pt, cm, em 等)，或者使用 3 个关键字之一，它们分别是 thick 、medium（默认值） 和 thin。

**注意：**CSS 没有定义 3 个关键字的具体宽度，所以一个用户可能把 thick 、medium 和 thin 分别设置为等于 5px、3px 和 2px，而另一个用户则分别设置为 3px、2px 和 1px。

**实例**

```
p.one
{
    border-style:solid;
    border-width:5px;
}
p.two
{
    border-style:solid;
    border-width:medium;
}
```






**边框颜色**

border-color属性用于设置边框的颜色。可以设置的颜色：

- name - 指定颜色的名称，如 "red"
- RGB - 指定 RGB     值, 如 "rgb(255,0,0)"
- Hex - 指定16进制值, 如 "#ff0000"

您还可以设置边框的颜色为"transparent"。

**注意：** border-color单独使用是不起作用的，必须得先使用border-style来设置边框样式。

**实例**
```
p.one
{
    border-style:solid;
    border-color:red;
}
p.two
{
    border-style:solid;
    border-color:#98bf21;
}
```





**边框****-****单独设置各边**

在CSS中，可以指定不同的侧面不同的边框：

**实例**

```
p
{
    border-top-style:dotted;
    border-right-style:solid;
    border-bottom-style:dotted;
    border-left-style:solid;
}
```



上面的例子也可以设置一个单一属性：

**实例**

`border-style:dotted solid;`




border-style属性可以有1-4个值：

- **border-style:dotted solid     double dashed;**
  - 上边框是 dotted
  - 右边框是 solid
  - 底边框是 double
  - 左边框是 dashed

 

- **border-style:dotted solid     double;**
  - 上边框是 dotted
  - 左、右边框是 solid
  - 底边框是 double

 

- **border-style:dotted solid;**
  - 上、底边框是 dotted
  - 右、左边框是 solid

 

- **border-style:dotted;**
  - 四面边框是 dotted

上面的例子用了border-style。然而，它也可以和border-width 、 border-color一起使用。


**边框-简写属性**
上面的例子用了很多属性来设置边框。

你也可以在一个属性中设置边框。

你可以在"border"属性中设置：

border-width
border-style (required)
border-color
实例
`border:5px solid red;`


border-style：属性1，属性2，属性3，属性4

上->右->下->左

border-style：属性1，属性2，属性3

上->左右->下

border-style：属性1，属性2

上下->左右

border-style：属性1

上下左右属性相同

**CSS** **轮廓（****outline****）**
![alt text](https://www.runoob.com/images/box_outline.gif)

轮廓（outline）是绘制于元素周围的一条线，位于边框边缘的外围，可起到突出元素的作用。

CSS outline 属性规定元素轮廓的样式、颜色和宽度。
outline是不占空间的，既不会增加额外的width或者height（这样不会导致浏览器渲染时出现reflow或是repaint）

## **CSS margin(****外边距****)**

![alt text](https://www.runoob.com/wp-content/uploads/2013/08/VlwVi.png)

CSS margin(外边距)属性定义元素周围的空间。



**margin**

margin 清除周围的（外边框）元素区域。margin 没有背景颜色，是完全透明的。

margin 可以单独改变元素的上，下，左，右边距，也可以一次改变所有的属性。

**可能的值**

| **值**   | **说明**                                      |
| -------- | --------------------------------------------- |
| auto     | 设置浏览器边距。   这样做的结果会依赖于浏览器 |
| *length* | 定义一个固定的margin（使用像素，pt，em等）    |
| *%*      | 定义一个使用百分比的边距                      |
Margin可以使用负值，重叠的内容。



**Margin -** **单边外边距属性**

在CSS中，它可以指定不同的侧面不同的边距：

**实例**

```
margin-top:100px;
margin-bottom:100px;
margin-right:50px;
margin-left:50px;
```






**Margin -** **简写属性**

为了缩短代码，有可能使用一个属性中margin指定的所有边距属性。这就是所谓的简写属性。

所有边距属性的简写属性是 **margin** :

**实例**

`margin:100px 50px;`

CSS padding（填充）是一个简写属性，定义元素边框与元素内容之间的空间，即上下左右的内边距。



**padding****（填充）**

当元素的 padding（填充）内边距被清除时，所释放的区域将会受到元素背景颜色的填充。

单独使用 padding 属性可以改变上下左右的填充。
```
padding-top:25px;
padding-bottom:25px;
padding-right:50px;
padding-left:50px;
```
`padding:25px 50px;`


## **CSS** **分组** **和** **嵌套** **选择器**



**分组选择器**

在样式表中有很多具有相同样式的元素。

`h1 { color:green; } h2 { color:green; } p { color:green; }`
为了尽量减少代码，你可以使用分组选择器。

每个选择器用逗号分隔。

在下面的例子中，我们对以上代码使用分组选择器：

**实例**

`h1,h2,p { color:green; }`


**嵌套选择器**

它可能适用于选择器内部的选择器的样式。

在下面的例子设置了四个样式：

- **p{ }**: 为所有 **p** 元素指定一个样式。
- **.marked{ }**: 为所有 **class="marked"** 的元素指定一个样式。
- **.marked p{ }**: 为所有 **class="marked"** 元素内的 **p** 元素指定一个样式。
- **p.marked{ }**: 为所有 **class="marked"** 的 **p** 元素指定一个样式。

**实例**
```
p
{
    color:blue;
    text-align:center;
}
.marked
{
    background-color:red;
}
.marked p
{
    color:white;
}
p.marked{
    text-decoration:underline;
}
```
## CSS 尺寸 (Dimension)



| 属性                                                         | 描述                 |
| :----------------------------------------------------------- | :------------------- |
| [height](https://www.runoob.com/cssref/pr-dim-height.html)   | 设置元素的高度。     |
| [line-height](https://www.runoob.com/cssref/pr-dim-line-height.html) | 设置行高。           |
| [max-height](https://www.runoob.com/cssref/pr-dim-max-height.html) | 设置元素的最大高度。 |
| [max-width](https://www.runoob.com/cssref/pr-dim-max-width.html) | 设置元素的最大宽度。 |
| [min-height](https://www.runoob.com/cssref/pr-dim-min-height.html) | 设置元素的最小高度。 |
| [min-width](https://www.runoob.com/cssref/pr-dim-min-width.html) | 设置元素的最小宽度。 |
| [width](https://www.runoob.com/cssref/pr-dim-width.html)     | 设置元素的宽度。     |



## CSS Display(显示) 与 Visibility（可见性）

**隐藏元素** **- display:none****或****visibility:hidden**

隐藏一个元素可以通过把display属性设置为"none"，或把visibility属性设置为"hidden"。但是请注意，这两种方法会产生不同的结果。

visibility:hidden可以隐藏某个元素，但隐藏的元素仍需占用与未隐藏之前一样的空间。也就是说，该元素虽然被隐藏了，但仍然会影响布局。

**实例**

h1.hidden {visibility:hidden;}


display:none可以隐藏某个元素，且隐藏的元素不会占用任何空间。也就是说，该元素不但被隐藏了，而且该元素原本占用的空间也会从页面布局中消失。

**实例**

`h1.hidden {display:none;}`

**如何改变一个元素显示**

可以更改内联元素和块元素，反之亦然，可以使页面看起来是以一种特定的方式组合，并仍然遵循web标准。

下面的示例把列表项显示为内联元素：

**实例**

`li {display:inline;}`




`下面的示例把span元素作为块元素：`

**实例**

`span {display:block;}`



**注意：**变更元素的显示类型看该元素是如何显示，它是什么样的元素。例如：一个内联元素设置为display:block是不允许有它内部的嵌套块元素。

 

 

## CSS Display - 块和内联元素

块元素是一个元素，占用了全部宽度，在前后都是换行符。
宽度(width)、高度(height)、内边距(padding)和外边距(margin)都可控制;
块元素的例子：

·   \<h1>

·   \<p>

·   \<div>

内联元素只需要必要的宽度，不强制换行。
宽度(width)、高度(height)、内边距的top/bottom(padding-top/padding-bottom)和外边距的top/bottom(margin-top/margin-bottom)都不可改变，就是里面文字或图片的大小;
内联元素的例子：

·    \<span>

·    \<a>
可变元素(根据上下文关系确定该元素是块元素还是内联元素)：

- applet ,button ,del ,iframe , ins ,map ,object , script

**如何改变一个元素显示**
可以更改内联元素和块元素，反之亦然，可以使页面看起来是以一种特定的方式组合，并仍然遵循web标准。
- display:block  -- 显示为块级元素
- display:inline  -- 显示为内联元素
- display:inline-block -- 显示为内联块元素，表现为同行显示并可修改宽高内外边距等属性

下面的示例把列表项显示为内联元素：


`li {display:inline;}`


下面的示例把span元素作为块元素：


`span {display:block;}`

注意：变更元素的显示类型看该元素是如何显示，它是什么样的元素。例如：一个内联元素即使设置为display:block也不允许有它内部的嵌套块元素。
内联元素（比如 \<span>、\<a>）不应该包含块元素（比如 \<div>、\<p>）。

例如：`<span><div></div></span>` 这种写法是不推荐的。

## CSS Position定位

position 属性指定了元素的定位类型。
元素可以使用的顶部，底部，左侧和右侧属性定位。然而，这些属性无法工作，除非事先设定position属性。他们也有不同的工作方式，这取决于定位方法。



**static** **定位**

HTML 元素的默认值，即没有定位，遵循正常的文档流对象。

静态定位的元素不会受到 top, bottom, left, right影响。

**实例**

`div.static { position: static; border: 3px solid #43941b; }`




**fixed** **定位**

元素的位置相对于浏览器窗口是固定位置。

即使窗口是滚动的它也不会移动：

**实例**

`p.pos_fixed { position:fixed; top:30px; right:5px; }`


**注意：** Fixed 定位在 IE7 和 IE8 下需要描述 !DOCTYPE 才能支持。

Fixed定位使元素的位置与文档流无关，因此不占据空间。

Fixed定位的元素和其他元素重叠。



**relative** **定位**

相对定位元素的定位是相对其正常位置。

**实例**

`h2.pos_left { position:relative; left:-20px; } h2.pos_right { position:relative; left:20px; }`



移动相对定位元素，但它原本所占的空间不会改变。

**实例**

`h2.pos_top { position:relative; top:-50px; }`


相对定位元素经常被用来作为绝对定位元素的容器块。



**absolute** **定位**

绝对定位的元素的位置相对于最近的已定位父元素，如果元素没有已定位的父元素，那么它的位置相对于<html>:

**实例**

`h2 { position:absolute; left:100px; top:150px; }`

absolute 定位使元素的位置与文档流无关，因此不占据空间。

absolute 定位的元素和其他元素重叠。



**sticky** **定位**

sticky 英文字面意思是粘，粘贴，所以可以把它称之为粘性定位。

**position: sticky;** 基于用户的滚动位置来定位。

粘性定位的元素是依赖于用户的滚动，在 **position:relative** 与 **position:fixed** 定位之间切换。

它的行为就像 **position:relative;** 而当页面滚动超出目标区域时，它的表现就像 **position:fixed;**，它会固定在目标位置。

元素定位表现为在跨越特定阈值前为相对定位，之后为固定定位。

这个特定阈值指的是 top, right, bottom 或 left 之一，换言之，指定 top, right, bottom 或 left 四个阈值其中之一，才可使粘性定位生效。否则其行为与相对定位相同。

**注意:** Internet Explorer, Edge 15 及更早 IE 版本不支持 sticky 定位。 Safari 需要使用 -webkit- prefix (查看以下实例)。

**实例**

`div.sticky { position: -webkit-sticky; /* Safari */ position: sticky; top: 0; background-color: green; border: 2px solid #4CAF50; }`




**重叠的元素**

元素的定位与文档流无关，所以它们可以覆盖页面上的其它元素

z-index属性指定了一个元素的堆叠顺序（哪个元素应该放在前面，或后面）

一个元素可以有正数或负数的堆叠顺序：

**实例**

`img { position:absolute; left:0px; top:0px; z-index:-1; }`


具有更高堆叠顺序的元素总是在较低的堆叠顺序元素的前面。

**注意：** 如果两个定位元素重叠，没有指定z - index，最后定位在HTML代码中的元素将被显示在最前面。


1. static: 默认值，不脱离文档流。

2. relative: 不脱离文档流，位置相对于元素自己正常时的位置。

3. fixed: 脱离文档流，位置相对于浏览器窗口 。

4. absolute: 脱离文档流，位置相对于非static的父元素。如果没有则是\<html>

5. sticky: a. 显示没有超出页面的情况等于relative。b. 显示超出页面的情况等于fixed

总结：标准流盒子，低于浮动的盒子，浮动的盒子又低于定位的盒子。

定位高于浮动，浮动高于标准流。（高低和占不占位置无关）
最底层：标准流盒子（普通文档流）

中间层：浮动盒子（float）

最顶层：定位盒子（position不是static）
用法：

1、必须有定位。（除去static之外）。

2、给定 z-index 的值为层级的值。（不给默认为0）

a. 层级为0的盒子，也比标准流和浮动高。
b. 层级为负数的盒子，比标准流和浮动低。
c. 层级不取小数）
d. 层级一样，后面的盒子比前面的层级高。
e. 浮动或者标准流的盒子，后面的盒子比前面的层级高。
f. abselute是不占位置的，relative是站位的的。而层级的高低，是和占不占位置没有关系的

| 特性                | 文档流     | 层叠顺序     |
| :------------------ | :--------- | :----------- |
| **标准流**          | 占位置     | 最低         |
| **浮动**            | 半脱离     | 中间         |
| **定位(z-index负)** | 可占可不占 | 比标准流还低 |
| **定位(z-index≥0)** | 可占可不占 | 最高         |
核心记忆点：

定位盒子天生比浮动和标准流高

z-index只在定位盒子里生效

占不占位置是布局问题，层级高低是遮盖问题

## **CSS Overflow**

CSS overflow 属性可以控制内容溢出元素框时在对应的元素区间内添加滚动条。

overflow属性有以下值：

| **值**  | **描述**                                                 |
| ------- | -------------------------------------------------------- |
| visible | 默认值。内容不会被修剪，会呈现在元素框之外。             |
| hidden  | 内容会被修剪，并且其余内容是不可见的。                   |
| scroll  | 内容会被修剪，但是浏览器会显示滚动条以便查看其余的内容。 |
| auto    | 如果内容被修剪，则浏览器会显示滚动条以便查看其余的内容。 |
| inherit | 规定应该从父元素继承 overflow 属性的值。                 |

**注意:**overflow 属性只工作于指定高度的块元素上。

**注意:** 在 OS X Lion ( Mac 系统) 系统上，滚动条默认是隐藏的，使用的时候才会显示 (设置 "overflow:scroll" 也是一样的)。

**overflow: visible**

默认情况下，overflow 的值为 visible， 意思是内容溢出元素框：

**实例**

`div { width: 200px; height: 50px; background-color: #eee; overflow: visible; }`

## CSS Float(浮动)
CSS 的 Float（浮动），会使元素向左或向右移动，其周围的元素也会重新排列。

Float（浮动），往往是用于图像，但它在布局时一样非常有用。



**元素怎样浮动**

元素的水平方向浮动，意味着元素只能左右移动而不能上下移动。

一个浮动元素会尽量向左或向右移动，直到它的外边缘碰到包含框或另一个浮动框的边框为止。

浮动元素之后的元素将围绕它。

浮动元素之前的元素将不会受到影响。

如果图像是右浮动，下面的文本流将环绕在它左边：

**实例**

`img { float:right; }`



**彼此相邻的浮动元素**

如果你把几个浮动的元素放到一起，如果有空间的话，它们将彼此相邻。

在这里，我们对图片廊使用 float 属性：

**实例**

`.thumbnail { float:left; width:110px; height:90px; margin:5px; }`


**清除浮动 - 使用 clear**

元素浮动之后，周围的元素会重新排列，为了避免这种情况，使用 clear 属性。

clear 属性指定元素两侧不能出现浮动元素。

使用 clear 属性往文本中添加图片廊：

**实例**

`.text_line { clear:both; }`

## **CSS** **布局 - 水平 & 垂直对齐**



**水平 & 垂直居中对齐**



**元素居中对齐**

要水平居中对齐一个元素(如 <div>), 可以使用 **margin: auto;**。

设置到元素的宽度将防止它溢出到容器的边缘。

元素通过指定宽度，并将两边的空外边距平均分配：

div 元素是居中的

 

**实例**

`.center { margin: auto; width: 50%; border: 3px solid green; padding: 10px; }`


**注意:** 如果没有设置 **width** 属性(或者设置 100%)，居中对齐将不起作用。



**文本居中对齐**

如果仅仅是为了文本在元素内居中对齐，可以使用 **text-align: center;**

文本居中对齐

 

**实例**

`.center { text-align: center; border: 3px solid green; }`



**提示:** 更多文本对齐实例，请参阅 [CSS 文本](https://www.runoob.com/css/css-text.html) 章节。



**图片居中对齐**

要让图片居中对齐, 可以使用 **margin: auto;** 并将它放到 **块** 元素中:

 

**实例**

`img { display: block; margin: auto; width: 40%; }`





**左右对齐 - 使用定位方式**

我们可以使用 **position: absolute;** 属性来对齐元素:

菜鸟教程 -- 学的不仅是技术，更是梦想！！！

 

**实例**

`.right { position: absolute; right: 0px; width: 300px; border: 3px solid #73AD21; padding: 10px; }`




注释：绝对定位元素会被从正常流中删除，并且能够交叠元素。

**提示:** 当使用 **position** 来对齐元素时, 通常 **<body>** 元素会设置 **margin** 和 **padding** 。 这样可以避免在不同的浏览器中出现可见的差异。

当使用 position 属性时，IE8 以及更早的版本存在一个问题。如果容器元素（在我们的案例中是 <div class="container">）设置了指定的宽度，并且省略了 !DOCTYPE 声明，那么 IE8 以及更早的版本会在右侧增加 17px 的外边距。这似乎是为滚动条预留的空间。当使用 position 属性时，请始终设置 !DOCTYPE 声明：

 

**实例**

`body { margin: 0; padding: 0; } .container { position: relative; width: 100%; } .right { position: absolute; right: 0px; width: 300px; background-color: #b0e0e6; }`





**左右对齐 - 使用 float 方式**

我们也可以使用 **float** 属性来对齐元素:

**实例**

`.right { float: right; width: 300px; border: 3px solid #73AD21; padding: 10px; }`

当像这样对齐元素时，对 <body> 元素的外边距和内边距进行预定义是一个好主意。这样可以避免在不同的浏览器中出现可见的差异。

*注意：如果子元素的高度大于父元素，且子元素设置了浮动，那么子元素将溢出，这时候你可以使用 "**clearfix**(清除浮动)" 来解决该问题。*

我们可以在父元素上添加 overflow: auto; 来解决子元素溢出的问题:

**实例**

`.clearfix { overflow: auto; }`


当使用 float 属性时，IE8 以及更早的版本存在一个问题。如果省略 !DOCTYPE 声明，那么 IE8 以及更早的版本会在右侧增加 17px 的外边距。这似乎是为滚动条预留的空间。当使用 float 属性时，请始终设置 !DOCTYPE 声明：

**实例**

`body { margin: 0; padding: 0; } .right { float: right; width: 300px; background-color: #b0e0e6; }`



**垂直居中对齐 - 使用 padding**

CSS 中有很多方式可以实现垂直居中对齐。 一个简单的方式就是头部顶部使用 **padding**:

我是垂直居中。

 

**实例**

`.center { padding: 70px 0; border: 3px solid green; }`

如果要水平和垂直都居中，可以使用 **padding** 和 **text-align: center**:

我是水平和垂直都居中的。

 

**实例**

`.center { padding: 70px 0; border: 3px solid green; text-align: center; }`





**垂直居中 - 使用 line-height**

我是垂直居中的。

 

**实例**
```
.center {
    line-height: 200px;
    height: 200px;
    border: 3px solid green;
    text-align: center;
}
 
/* 如果文本有多行，添加以下代码: */
.center p {
    line-height: 1.5;
    display: inline-block;
    vertical-align: middle;
}
```



**垂直居中 - 使用 position 和 transform**

除了使用 **padding** 和 **line-height** 属性外,我们还可以使用 **transform** 属性来设置垂直居中:

 

**实例**

```
.center { 
    height: 200px;
    position: relative;
    border: 3px solid green; 
}
 
.center p {
    margin: 0;
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
}
```

1. padding：文本仍然处于容器垂直居中的位置，但是容器的 height 会随着文本行数的增加而增大；
2. line-height=height：容器的 height 不变，line-height 是文本的行间距，文本会溢出容器显示；
多行文本可使用 vertical-align: middle; 来实现元素的垂直居中，但是如果子元素的内容体积大于父元素的内容体积时，仍然会溢出，后面需要使用文字溢出处理来解决。


 
## CSS伪类
CSS伪类是用来添加一些选择器的特殊效果。



**语法**

伪类的语法：

`selector:pseudo-class {property:value;}`

CSS类也可以使用伪类：

`selector.class:pseudo-class {property:value;}`

 

**Selector（选择器）**
选择器是用来选中你想要应用样式的HTML元素的模式或表达式。

简单理解：告诉CSS“我要给谁设置样式”

常见的例子：

p - 选中所有段落

#header - 选中id为"header"的元素

.nav - 选中class为"nav"的元素

div p - 选中div里面的所有段落

**Pseudo-class（伪类）**
伪类用来定义元素的特殊状态。它不是真实的类（class），而是根据元素的状态来动态应用样式。

简单理解：告诉CSS“这个元素在什么状态下改变样式”

常见的例子：

:hover - 鼠标悬停时

:first-child - 第一个子元素

:visited - 访问过的链接

:focus - 获得焦点时


**anchor****伪类**

在支持 CSS 的浏览器中，链接的不同状态都可以以不同的方式显示

**实例**

```
a:link {color:#FF0000;} /* 未访问的链接 */
a:visited {color:#00FF00;} /* 已访问的链接 */
a:hover {color:#FF00FF;} /* 鼠标划过链接 */
a:active {color:#0000FF;} /* 已选中的链接 */
```

**注意：** 在CSS定义中，a:hover 必须被置于 a:link 和 a:visited 之后，才是有效的。

**注意：** 在 CSS 定义中，a:active 必须被置于 a:hover 之后，才是有效的。

**注意：**伪类的名称不区分大小写。



**伪类和CSS类**

伪类可以与 CSS 类配合使用：

`a.red:visited {color:#FF0000;} <a class="red" href="css-syntax.html">CSS 语法</a>`

如果在上面的例子的链接已被访问，它会显示为红色。



**CSS :first-child** **伪类**

您可以使用 :first-child 伪类来选择父元素的第一个子元素。

**注意：**在IE8的之前版本必须声明\<!DOCTYPE>，这样 :first-child 才能生效。

**匹配第一个 \<p> 元素**

在下面的例子中，选择器匹配作为任何元素的第一个子元素的 \<p> 元素：

**实例**

`p:first-child { color:blue; }`





**匹配所有\<p> 元素中的第一个 \<i> 元素**

在下面的例子中，选择相匹配的所有\<p>元素的第一个 \<i> 元素：

**实例**

`p > i:first-child { color:blue; }`





**匹配所有作为第一个子元素的 \<p> 元素中的所有 \<i> 元素**

在下面的例子中，选择器匹配所有作为元素的第一个子元素的 \<p> 元素中的所有 \<i> 元素：

**实例**

`p:first-child i { color:blue; }`






**CSS - :lang** **伪类**

:lang 伪类使你有能力为不同的语言定义特殊的规则

**注意：**IE8必须声明\<!DOCTYPE>才能支持;lang伪类。

在下面的例子中，:lang 类为属性值为 no 的q元素定义引号的类型：

**实例**

`q:lang(no) {quotes: "~" "~";}`

选择器（Selector） - 单独的元素匹配器
是用来单独选中某个或某类元素的模式：

元素选择器：div、p、h1

类选择器：.box、.nav

ID选择器：#header、#logo

属性选择器：[type="text"]

组合器（Combinator） - 元素之间的关系符号
是用来连接多个选择器，表示它们之间的关系：

空格（后代组合器）：div p（div里面的所有p）

\>（子组合器）：div > p（div的直接子元素p）

+（相邻兄弟组合器）：h1 + p（h1后面紧挨着的p）

~（通用兄弟组合器）：h1 ~ p（h1后面的所有p）

单词 = 简单选择器（div、p、.class、#id）

连词 = 组合器（空格、>、+、~）

完整句子 = 组合选择器（div p、div > p、h1 + p）



## CSS伪元素

CSS 伪元素是一种特殊的选择器，它可以在不改变 HTML 结构的情况下对页面元素的特定部分进行样式设置。

CSS 伪元素是用来添加一些选择器的特殊效果。

常用的 CSS 伪元素有 ::before、::after、::first-line、::first-letter 等。



| 版本          | 伪元素语法    | 举例                                  | 说明                     |
| :------------ | :------------ | :------------------------------------ | :----------------------- |
| **CSS2/旧版** | 一个冒号 `:`  | `:before`、`:after`、`:first-line`    | 旧标准，兼容性好         |
| **CSS3/新版** | 两个冒号 `::` | `::before`、`::after`、`::first-line` | 新标准，区分伪类和伪元素 |

**语法**

伪元素的语法：
```
selector::pseudo-element {

  property: value;

}
```

CSS 类也可以使用伪元素：

```
selector.class::pseudo-element {

  property: value;

}
```
 



**:first-line** **伪元素**

"first-line" 伪元素用于向文本的首行设置特殊样式。

在下面的例子中，浏览器会根据 "first-line" 伪元素中的样式对 p 元素的第一行文本进行格式化：

**实例**

`p:first-line { color:#ff0000; font-variant:small-caps; }`




**注意：**"first-line" 伪元素只能用于块级元素。

**注意：** 下面的属性可应用于 "first-line" 伪元素：

- font     properties
- color     properties 
- background     properties
- word-spacing
- letter-spacing
- text-decoration
- vertical-align
- text-transform
- line-height
- clear



**:first-letter** **伪元素**

"first-letter" 伪元素用于向文本的首字母设置特殊样式：

**实例**

`p:first-letter { color:#ff0000; font-size:xx-large; }`

**注意：** "first-letter" 伪元素只能用于块级元素。

**注意：** 下面的属性可应用于 "first-letter" 伪元素： 

- font     properties
- color     properties 
- background     properties
- margin     properties
- padding     properties
- border properties
- text-decoration
- vertical-align     (only if "float" is "none")
- text-transform
- line-height
- float
- clear



**伪元素和CSS类**

伪元素可以结合CSS类： 

`p.article:first-letter {color:#ff0000;}`

 

`<p class="article">文章段落</p>`

上面的例子会使所有 class 为 article 的段落的首字母变为红色。



**多个伪元素**

可以结合多个伪元素来使用。

在下面的例子中，段落的第一个字母将显示为红色，其字体大小为 xx-large。第一行中的其余文本将为蓝色，并以小型大写字母显示。

段落中的其余文本将以默认字体大小和颜色来显示：

**实例**

`p:first-letter { color:#ff0000; font-size:xx-large; } p:first-line { color:#0000ff; font-variant:small-caps; }`



 



**CSS - :before** **伪元素**

":before" 伪元素可以在元素的内容前面插入新内容。

下面的例子在每个 \<h1>元素前面插入一幅图片：

**实例**

`h1:before { content:url(smiley.gif); }`


 



**CSS - :after** **伪元素**

":after" 伪元素可以在元素的内容之后插入新内容。

下面的例子在每个 \<h1> 元素后面插入一幅图片：

**实例**

`h1:after { content:url(smiley.gif); }`
 

**伪类**选择元素基于的是当前元素处于的状态，或者说元素当前所具有的特性，而不是元素的id、class、属性等静态的标志。由于状态是动态变化的，所以一个元素达到一个特定状态时，它可能得到一个伪类的样式；当状态改变时，它又会失去这个样式。由此可以看出，它的功能和class有些类似，但它是基于文档之外的抽象，所以叫伪类。

与伪类针对特殊状态的元素不同的是，**伪元素**是对元素中的特定内容进行操作，它所操作的层次比伪类更深了一层，也因此它的动态性比伪类要低得多。实际上，设计伪元素的目的就是去选取诸如元素内容第一个字（母）、第一行，选取某些内容前面或后面这种普通的选择器无法完成的工作。它控制的内容实际上和元素是相同的，但是它本身只是基于元素的抽象，并不存在于文档中，所以叫伪元素。

## 层叠、伪类和继承

继承：爹传给儿子（自动，但有些属性不传）

层叠：多个指令打架，按优先级和顺序决定谁赢

优先级：打架的评分标准

伪类：元素的特殊状态（:hover、:link等）

## CSS实战内容
### CSS导航栏

**垂直导航栏**
见css_navbar_vertical

**水平导航栏**
见css_navbar_horizontal

### CSS下拉菜单
**基本下拉菜单**

当鼠标移动到指定元素上时，会出现下拉菜单。

**实例**

见css_menu_pulldown


**实例解析**

**HTML** **部分：**

我们可以使用任何的 HTML 元素来打开下拉菜单，如：\<span>, 或 a \<button> 元素。

使用容器元素 (如： \<div>) 来创建下拉菜单的内容，并放在任何你想放的位置上。

使用 \<div> 元素来包裹这些元素，并使用 CSS 来设置下拉内容的样式。

**CSS** **部分：**

.dropdown 类使用 position:relative, 这将设置下拉菜单的内容放置在下拉按钮 (使用 position:absolute) 的右下角位置。

.dropdown-content 类中是实际的下拉菜单。默认是隐藏的，在鼠标移动到指定元素后会显示。 注意 min-width 的值设置为 160px。你可以随意修改它。 **注意** 如果你想设置下拉内容与下拉按钮的宽度一致，可设置 width 为 100% ( overflow:auto 设置可以在小尺寸屏幕上滚动)。

我们使用 box-shadow 属性让下拉菜单看起来像一个"卡片"。

:hover 选择器用于在用户将鼠标移动到下拉按钮上时显示下拉菜单。



**下拉菜单**

创建下拉菜单，并允许用户选取列表中的某一项：

下拉菜单

这个实例类似前面的实例，当我们在下拉列表中添加了链接，并设置了样式：

**实例**

见css_menu_pulldown_2

### CSS提示工具（Tooltip）

### CSS图像透明度
实例1 - 创建一个透明图像
CSS3中属性的透明度是 opacity。
IE9，Firefox，Chrome，Opera，和Safari浏览器使用透明度属性可以将图像变的不透明。 Opacity属性值从0.0 - 1.0。值越小，使得元素更加透明。

IE8和早期版本使用滤镜：alpha（opacity= x）。 x可以采取的值是从0 - 100。较低的值，使得元素更加透明。



```
img
{
  opacity:0.4;
  filter:alpha(opacity=40); /* IE8 及其更早版本 */
}
```
实例2 - 图像的透明度 - 悬停效果
CSS样式：
```
img
{
  opacity:0.4;
  filter:alpha(opacity=40); /*  IE8 及其更早版本 */
}
img:hover
{
  opacity:1.0;
  filter:alpha(opacity=100); /* IE8 及其更早版本 */
}
```

第一个CSS块是和例1中的代码类似。此外，我们还增加了当用户将鼠标悬停在其中一个图像上时发生什么。在这种情况下，当用户将鼠标悬停在图像上时，我们希望图片是清晰的。

此CSS是：opacity=1.

IE8和更早版本使用： filter:alpha(opacity=100).

当鼠标指针远离图像时，图像将重新具有透明度。
实例3 - 透明的盒子中的文字
首先，我们创建一个固定的高度和宽度的div元素，带有一个背景图片和边框。然后我们在第一个div内部创建一个较小的div元素。 这个div也有一个固定的宽度，背景颜色，边框 - 而且它是透明的。透明的div里面，我们在P元素内部添加一些文本。

### CSS图像拼合
图像拼合
图像拼合就是单个图像的集合。

有许多图像的网页可能需要很长的时间来加载和生成多个服务器的请求。

使用图像拼合会降低服务器的请求数量，并节省带宽。

图像拼合 - 简单实例
与其使用三个独立的图像，不如我们使用这种单个图像（"img_navsprites.gif"）
实例解析：
```
img.home
{
width:46px;
height:44px;
background:url(img_navsprites.gif) 0 0;
}
```
`<img class="home" src="img_trans.gif" />` -因为不能为空,src属性只定义了一个小的透明图像。显示的图像将是我们在CSS中指定的背景图像
宽度：46px;高度：44px; - 定义我们使用的那部分图像
background:url(img_navsprites.gif) 0 0; - 定义背景图像和它的位置（左0px，顶部0px）
这是使用图像拼合最简单的方法，现在我们使用链接和悬停效果。

图像拼合 - 创建一个导航列表
我们想使用拼合图像 ("img_navsprites.gif")，以创建一个导航列表。

我们将使用一个HTML列表，因为它可以链接，同时还支持背景图像：

实例解析：
```
#navlist{position:relative;}
#navlist li{margin:0;padding:0;list-style:none;position:absolute;top:0;}
#navlist li, #navlist a{height:44px;display:block;}
#home{left:0px;width:46px;}
#home{background:url('img_navsprites.gif') 0 0;}
#prev{left:63px;width:43px;}
#prev{background:url('img_navsprites.gif') -47px 0;}
#next{left:129px;width:43px;}
#next{background:url('img_navsprites.gif') -91px 0;}
```
#navlist{position:relative;} - 位置设置相对定位，让里面的绝对定位
#navlist li{margin:0;padding:0;list-style:none;position:absolute;top:0;} - margin和padding设置为0，列表样式被删除，所有列表项是绝对定位
#navlist li, #navlist a{height:44px;display:block;} - 所有图像的高度是44px
现在开始每个具体部分的定位和样式：

#home{left:0px;width:46px;} - 定位到最左边的方式，以及图像的宽度是46px
#home{background:url(img_navsprites.gif) 0 0;} - 定义背景图像和它的位置（左0px，顶部0px）
#prev{left:63px;width:43px;} - 右侧定位63px（＃home宽46px+项目之间的一些多余的空间），宽度为43px。
#prev{background:url('img_navsprites.gif') -47px 0;} - 定义背景图像右侧47px（＃home宽46px+分隔线的1px）
#next{left:129px;width:43px;}- 右边定位129px(#prev 63px + #prev宽是43px + 剩余的空间), 宽度是43px.
#next{background:url('img_navsprites.gif') no-repeat -91px 0;} - 定义背景图像右边91px（＃home 46px+1px的分割线+＃prev宽43px+1px的分隔线）
图片实际内容（134px）：
┌──────────┬─┬─────────┬─┬─────────┐
│  home    │ │  prev   │ │  next   │
│  (46px)  │1│ (43px)  │1│ (43px)  │
└──────────┴─┴─────────┴─┴─────────┘
0         46 47       90 91       134

显示效果：
元素home (46px)    元素prev (43px)    元素next (43px)
┌──────────┐       ┌─────────┐        ┌─────────┐
│   home   │       │  prev   │        │  next   │
│ 显示区域  │       │ 显示区域 │        │ 显示区域 │
└──────────┘       └─────────┘        └─────────┘
left:0             left:63             left:129
bg:0 0             bg:-47 0            bg:-91 0

图像拼合s - 悬停效果
现在，我们希望我们的导航列表中添加一个悬停效果。
图像拼合s - 悬停效果
现在，我们希望我们的导航列表中添加一个悬停效果。

lamp	:hover 选择器用于鼠标悬停在元素上的显示的效果

提示： :hover 选择器可以运用于所有元素。
我们的新图像 ("img_navsprites_hover.gif") 包含三个导航图像和三幅图像：
因为这是一个单一的图像，而不是6个单独的图像文件，当用户停留在图像上不会有延迟加载。

我们添加悬停效果只添加三行代码：
实例解析：
```
#home a:hover{background: url('img_navsprites_hover.gif') 0 -45px;}
#prev a:hover{background: url('img_navsprites_hover.gif') -47px 
-45px;}
#next a:hover{background: url('img_navsprites_hover.gif') -91px 
-45px;}
```
由于该列表项包含一个链接，我们可以使用：hover伪类
#home a:hover{background: transparent url(img_navsprites_hover.gif) 0 -45px;} - 对于所有三个悬停图像，我们指定相同的背景位置，只是每个再向下45px
### CSS媒体类型
媒体类型
一些 CSS 属性只设计了某些媒体。例如 voice-family 属性是专为听觉用户代理。其他一些属性可用于不同的媒体类型。例如， font-size 属性可用于屏幕和印刷媒体，但有不同的值。屏幕和纸上的文件不同，通常需要一个更大的字体，sans-serif 字体比较适合在屏幕上阅读，而 serif 字体更容易在纸上阅读。

@media 规则
@media 规则允许在相同样式表为不同媒体设置不同的样式。

在下面的例子告诉我们浏览器屏幕上显示一个 14 像素的 Verdana 字体样式。但是如果页面打印，将是 10 个像素的 Times 字体。请注意，font-weight 在屏幕上和纸上设置为粗体：

实例
```
@media screen
{
    p.test {font-family:verdana,sans-serif;font-size:14px;}
}
@media print
{
    p.test {font-family:times,serif;font-size:10px;}
}
@media screen,print
{
    p.test {font-weight:bold;}
}
```

### CSS表单
输入框(input) 样式
使用 width 属性来设置输入框的宽度：

CSS 实例
input {
  width: 100%;
}
以上实例中设置了所有 <input> 元素的宽度为 100%，如果你只想设置指定类型的输入框可以使用以下属性选择器：

input[type=text] - 选取文本输入框
input[type=password] - 选择密码的输入框
input[type=number] - 选择数字的输入框
...
输入框填充
使用 padding 属性可以在输入框中添加内边距。

CSS 实例
input[type=text] {
  width: 100%;
  padding: 12px 20px;
  margin: 8px 0;
  box-sizing: border-box;
}
注意我们设置了 box-sizing 属性为 border-box。这样可以确保浏览器呈现出带有指定宽度和高度的输入框是把边框和内边距一起计算进去的。
更多内容可以阅读 CSS3 框大小 。

输入框(input) 边框
使用 border 属性可以修改 input 边框的大小或颜色，使用 border-radius 属性可以给 input 添加圆角：

CSS 实例
input[type=text] {
  border: 2px solid red;
  border-radius: 4px;
}

尝试一下 »
如果你只想添加底部边框可以使用 border-bottom 属性:

CSS 实例
input[type=text] {
  border: none;
  border-bottom: 2px solid red;
}

尝试一下 »
输入框(input) 颜色
可以使用 background-color 属性来设置输入框的背景颜色，color 属性用于修改文本颜色：

CSS 实例
input[type=text] {
  background-color: #3CBC8D;
  color: white;
}

尝试一下 »
输入框(input) 聚焦
默认情况下，一些浏览器在输入框获取焦点时（点击输入框）会有一个蓝色轮廓。我们可以设置 input 样式为 outline: none; 来忽略该效果。

使用 :focus 选择器可以设置输入框在获取焦点时的样式：

CSS 实例
input[type=text]:focus {
  background-color: lightblue;
}

尝试一下 »
CSS 实例
input[type=text]:focus {
  border: 3px solid #555;
}

尝试一下 »
输入框(input) 图标
如果你想在输入框中添加图标，可以使用 background-image 属性和用于定位的background-position 属性。注意设置图标的左边距，让图标有一定的空间：

CSS 实例
input[type=text] {
  background-color: white;
  background-image: url('searchicon.png');
  background-position: 10px 10px; 
  background-repeat: no-repeat;
  padding-left: 40px;
}

尝试一下 »
带动画的搜索框
以下实例使用了 CSS transition 属性，该属性设置了输入框在获取焦点时会向右延展。你可以在 CSS 动画 章节查看更多内容。

CSS 实例
input[type=text] {
  -webkit-transition: width 0.4s ease-in-out;
  transition: width 0.4s ease-in-out;
}
 
input[type=text]:focus {
  width: 100%;
}

尝试一下 »
文本框（textarea）样式
注意: 使用 resize 属性来禁用文本框可以重置大小的功能（一般拖动右下角可以重置大小）。

CSS 实例
textarea {
  width: 100%;
  height: 150px;
  padding: 12px 20px;
  box-sizing: border-box;
  border: 2px solid #ccc;
  border-radius: 4px;
  background-color: #f8f8f8;
  resize: none;
}

尝试一下 »
下拉菜单（select）样式
CSS 实例
select {
  width: 100%;
  padding: 16px 20px;
  border: none;
  border-radius: 4px;
  background-color: #f1f1f1;
}

尝试一下 »
按钮样式
CSS 实例
input[type=button], input[type=submit], input[type=reset] {
  background-color: #4CAF50;
  border: none;
  color: white;
  padding: 16px 32px;
  text-decoration: none;
  margin: 4px 2px;
  cursor: pointer;
}
 
/* 提示: 使用 width: 100% 设置全宽按钮 */

尝试一下 »
更多内容可以参考我们的 CSS 按钮 教程。

响应式表单
响应式表单可以根据浏览器窗口的大小重新布局各个元素，我们可以通过重置浏览器窗口大小来查看效果：

高级: 以下实例使用了CSS3 多媒体查询 来创建一个响应式表单。

### CSS计数器
CSS 计数器通过一个变量来设置，根据规则递增变量。

使用计数器自动编号
CSS 计数器根据规则来递增变量。

CSS 计数器使用到以下几个属性：

counter-reset - 创建或者重置计数器
counter-increment - 递增变量
content - 插入生成的内容
counter() 或 counters() 函数 - 将计数器的值添加到元素
要使用 CSS 计数器，得先用 counter-reset 创建：

以下实例在页面创建一个计数器 (在 body 选择器中)，每个 <h2> 元素的计数值都会递增，并在每个 <h2> 元素前添加 "Section <计数值>:"

CSS 实例
body {
  counter-reset: section;
}
 
h2::before {
  counter-increment: section;
  content: "Section " counter(section) ": ";
}

尝试一下 »
嵌套计数器
以下实例在页面创建一个计数器，在每一个 <h1> 元素前添加计数值 "Section <主标题计数值>.", 嵌套的计数值则放在 <h2> 元素的前面，内容为 "<主标题计数值>.<副标题计数值>":

CSS 实例
body {
  counter-reset: section;
}
 
h1 {
  counter-reset: subsection;
}
 
h1::before {
  counter-increment: section;
  content: "Section " counter(section) ". ";
}
 
h2::before {
  counter-increment: subsection;
  content: counter(section) "." counter(subsection) " ";
}

尝试一下 »
计数器也可用于列表中，列表的子元素会自动创建。这里我们使用了 counters() 函数在不同的嵌套层级中插入字符串:

CSS 实例
ol {
  counter-reset: section;
  list-style-type: none;
}
 
li::before {
  counter-increment: section;
  content: counters(section,".") " ";
}

尝试一下 »

### CSS网页布局
CSS 网页布局
网页布局
网页布局有很多种方式，一般分为以下几个部分：头部区域、菜单导航区域、内容区域、底部区域。