CSS 盒模型以内边距 padding属性

内边距是元素的边框和内容之间的空白区域,用来控制元素边框和内容之间的距离。css

设置内边距的最简单办法就是使用 padding属性,其值能够是百分比、长度值,默认值是 0,不容许负值。html

内边距是可选的,默认值是 0。因此,若是没有显式声明 padding属性,元素就不会出现内边距。可是,浏览器却为许多元素提供了默认的样式,内边距也不例外。因此,为了在全部浏览器下表现一致,经常须要设计师将元素的 padding属性设置为 0,来覆盖浏览器的默认样式。该项工做能够针对具体元素进行,也可使用通用选择器对全部元素进行设置:html5

 
  1. * {
  2. padding: 0;
  3. }

不过,请记住,通用选择器不区分元素,所以对某些元素(如,select 控件中的 option)产生不利影响。而且,通用选择器会影响效率。因此,使用全局 reset 来显式地将内边距设置为 0 可能会更安全。如:css3

 
  1. body, p, h1, h2, h3, ul, ol {
  2. padding: 0;
  3. }

使用长度值设置内边距时,能够接受任何长度值,包括绝对长度和相对长度。如,让全部 h1 元素的各边都有 10px 的内边距:git

 
  1. h1 {
  2. padding: 10px;
  3. }

有时候,可能但愿一个元素各边上的内边距不一样,这也很简单。若是但愿 h1 元素的上内边距为10px、右内边距为20px、下内边距为30px、左内边距为40px,只需应用如下规则:github

 
  1. h1 {
  2. padding: 10px 20px 30px 40px;
  3. }

这些值的顺序很重要,必须遵循上、右、下、左的模式,即从上(top)开始,围着元素顺时针旋转。因此,若是要获得想要的效果,必须正确安排各个值的顺序。json

不过,若是只增长内边距,要真正看到所设置的内边距可能有些困难。因为默认状况下,背景色会延伸到边框的外边界,所以能够为元素添加背景色,在内边距区域就能看到背景色,能够间接看到内边距:bootstrap

 
  1. h1 {
  2. background: #ccc;
  3. padding: 10px 20px 30px 40px;
  4. }

使用百分比设置内边距时,元素的左右内边距和上下内边距,都是相对于父元素的 width 进行计算。假如在容器 div 中有一个 h1 标题:浏览器

 
  1. <h1>带有内边距的 h1 标题</h1>

如今,把容器的宽度设置为 400px,把 h1 标题的 padding属性的值设置为 5%,则获得内边距的值为 400px * 5% = 20px,为了便于观察,为 h1 标题增长了 1px 的虚线边框:安全

 
  1. div {
  2. width: 400px;
  3. }
  4. h1 {
  5. padding: 5%;
  6. border: 1px dashed #444;
  7. }

运行结果如图 4‑2 所示:

内边距图4-2 内边距

当内边距设置为百分比时,若是父元素的 width 以某种方式发生改变,则内边距的值也会随之改变。如,在父元素的 width 的也设置为百分比时,改变浏览器窗口大小,h1 的内边距也会随之改变。

内边距的值也能够混合使用长度值和百分比,而且,可使用各类类型的长度值,一个规则并不限制只能使用一种长度类型:

 
  1. h1 {
  2. padding: 10px 10% 2em 20mm;
  3. }

有时候,为内边距输入的值可能会重复。为了方便,CSS容许为 padding属性提供 1~4 个值,让浏览器根据提供的参数值个数来决定做用对象。规则以下:

1)若是提供一个值,将用于所有的四4个方向。

2)若是提供两个值,第一个用于上、下,第二个用于左、右。

3)若是提供三个值,第一个用于上,第二个用于左、右,第三个用于下。

4)若是提供四个值,将按上、右、下、左的顺序做用于四边。

有时候,确实须要仅仅设置元素单边上的外边距。幸运的是,CSS提供了 padding-top属性、padding-right属性、padding-bottom属性、padding-left属性,这些属性专门用来设置元素的单边内边距。

这些属性的名字一目了然,使用其中任何一个属性,将只设置该边上的内边距,而不影响其余内边距。一个规则中可使用多个单边属性。如,使用单边属性把 h1 元素的上内边距为10px、右内边距为20px、下内边距为30px、左内边距为40px:

 
  1. h1 {
  2. padding-top: 10px;
  3. padding-right: 20px;
  4. padding-bottom: 30px;
  5. padding-left: 40px;
  6. }

固然,对于这种状况,使用 padding属性可能更容易一些:

 
  1. h1 {
  2. padding: 10px 20px 30px 40px;
  3. }

上述两种规则是等价的,不管使用哪一种,获得的结果都同样。通常状况下,若是想为多个边设置内边距,使用 padding属性会更容易一些。不过,从显示结果的角度看,使用哪一种方法都不重要,因此应该选择一种更容易的方法。

说明:

当使用em 来定义元素的宽度、高度、内边距、外边距、边框宽度时,它的值是相对于元素自身的字体大小,而不是相对于父元素的字体大小。

关于做者

歪脖先生,十五年以上软件开发经验,酷爱Web开发,精通 HTML、CSS、JavaScript、jQuery、JSON、Python、Less、Bootstrap等,著有《HTML宝典》、《揭秘CSS》、《Less简明教程》、《JSON教程》、《Bootstrap2用户指南》、《Bootstrap3实用教程》,并所有在 GitHub 上开源。