什么是盒子模型

所有HTML元素可以看作盒子,在CSS中,"box model"这一术语是用来设计和布局时使用。

CSS盒模型本质上是一个盒子,封装周围的HTML元素,它包括:边距,边框,填充,和实际内容。

盒模型允许我们在其它元素和周围元素边框之间的空间放置元素。

下面的图片说明了盒子模型(Box Model):

CSS盒子模型_CSS

元素显示模式

元素的显示模式通俗来说就是元素以什么形式在网页显示,常见的显示模式有块元素和行内元素、以及行内块元素。不同的显示模式拥有各自独特的属性,可以在网页显示中搭配出非常完美的效果。

块元素

常见的块元素有

~


、、、、等,其中 标签是最典型的元素。

  1. 块级元素的特点:

  2. 自己独占一行。

  3. 高度,宽度、外边距以及内边距都可以控制。

  4. 宽度默认是容器(父级宽度)的100%。

  5. 是一个容器及盒子,里面可以放行内或者块级元素。

注意:

  • 文字类的元素内不能使用块级元素


  • 标签主要用于存放文字,因此


    里面不能放块级元素,特别是不能放

  • 同理,

    ~
    等都是文字类块级标签,里面也不能放其他块级元素

行内元素

常见的行内元素有、、<b>、<em>、、、、、、等,其中

标签是最典型的行内元素。有的地方也将行内元素称为内联元素。

行内元素的特点:

  1. 相邻行内元素在一行上,一行可以显示多个。
  2. 高、宽直接设置是无效的。
  3. 默认宽度就是它本身内容的宽度。
  4. 行内元素只能容纳文本或其他行内元素。

注意:

  1. 链接里面不能再放链接
  2. 特殊情况链接 里面可以放块级元素,但是给 转换一下块级模式最安全

行内块元素

在行内元素中有几个特殊的标签——、、


,它们同时具有块元素和行内元素的特点。

有些资料称它们为行内块元素。

行内块元素的特点:

  1. 和相邻行内元素(行内块)在一行上,但是他们之间会有空白缝隙。一行可以显示多个(行内元素特点)。
  2. 默认宽度就是它本身内容的宽度(行内元素特点)。
  3. 高度,行高、外边距以及内边距都可以控制(块级元素特点)。

元素类型转换

  1. 转换为块元素:display:block;
  2. 转换为行内元素:display:inline;
  3. 转换为行内块:display: inline-block;
元素属性

高度宽度元素属性

高度宽度只在块级元素或者行内块元素中有效,行内元素想要使用下列属性需要将行内元素转换成块级元素:

height:元素高度属性

weight:元素宽度属性

例如想要设置一个高度为40,宽度为60的盒子:


边框(border)

border可以设置元素的边框。边框有三部分组成:边框宽度(粗细) 边框样式边框颜色。

语法:

border : border-width || border-style || border-color

边框样式border-style 可以设置如下值:

  • none:没有边框即忽略所有边框的宽度(默认值)
  • solid:边框为单实线(最为常用的)
  • dashed:边框为虚线
  • dotted:边框为点线
描述
border-width规定边框的宽度。参阅:border-width 中可能的值。
border-style规定边框的样式。参阅:border-style 中可能的值。
border-color规定边框的颜色。参阅:border-color 中可能的值。

例如,我们设置div的边框为一像素的黑色实线边框


CSS 边框属性允许你指定一个元素边框的样式和颜色。

边框简写:

border: 1px solid red; /* 没有顺序*/

边框分开写法:

border-top: 1px solid red; /* 只设定上边框,其余同理*/

border-collapse 属性控制浏览器绘制表格边框的方式。它控制相邻单元格的边框。

语法:

border-collapse:collapse;
  • collapse 单词是合并的意思
  • border-collapse: collapse; 表示相邻边框合并在一起

注意:边框会额外增加盒子的实际大小

内边距

padding 属性用于设置内边距,即边框与内容之间的距离。

属性说明
padding使用简写属性设置在一个声明中的所有填充属性
padding-bottom设置元素的底部填充
padding-left设置元素的左部填充
padding-right设置元素的右部填充
padding-top设置元素的顶部填充

padding 属性(简写属性)可以有一到四个值。

padding:25px 50px 75px 100px;
  • 上填充为25px
  • 右填充为50px
  • 下填充为75px
  • 左填充为100px
padding:25px 50px 75px;
  • 上填充为25px
  • 左右填充为50px
  • 下填充为75px
 padding:25px 50px;
  • 上下填充为25px
  • 左右填充为50px
 padding:25px;
  • 所有的填充都是25px

当我们给盒子指定padding 值之后,发生了2 件事情:

  1. 内容和边框有了距离,添加了内边距。
  2. padding影响了盒子实际大小。
    也就是说,如果盒子已经有了宽度和高度,此时再指定内边框,会撑大盒子。

外边距

margin 属性用于设置外边距,即控制盒子和盒子之间的距离。

属性描述
margin简写属性。在一个声明中设置所有外边距属性。
margin-bottom设置元素的下外边距。
margin-left设置元素的左外边距。
margin-right设置元素的右外边距。
margin-top设置元素的上外边距。

margin 简写方式代表的意义跟padding 完全一致。

外边距可以让块级盒子水平居中,但是必须满足两个条件:

  1. 盒子必须指定了宽度(width)。
  2. 盒子左右的外边距都设置为auto 。

注意:以上方法是让块级元素水平居中,行内元素或者行内块元素水平居中给其父元素添加text-align:center 即可。

外边距合并

使用margin 定义块元素的垂直外边距时,可能会出现外边距的合并。
主要有两种情况:

  1. 相邻块元素垂直外边距的合并
  2. 嵌套块元素垂直外边距的塌陷

1. 相邻块元素垂直外边距的合并

使用margin 定义块元素的垂直外边距时,可能会出现外边距的合并。

当上下相邻的两个块元素(兄弟关系)相遇时,如果上面的元素有下外边距margin-bottom,下面的元素有上外边距margin-top ,则他们之间的垂直间距不是margin-bottom 与margin-top 之和。取两个值中的较大者这种现象被称为相邻块元素垂直外边距的合并。

解决方案:
尽量只给一个盒子添加margin 值。

CSS盒子模型_盒子模型_02

2. 嵌套块元素垂直外边距的塌陷

对于两个嵌套关系(父子关系)的块元素,父元素有上外边距同时子元素也有上外边距,此时父元素会塌陷较大的外边距值。

解决方案:

  1. 可以为父元素定义上边框。
  2. 可以为父元素定义上内边距。
  3. 可以为父元素添加overflow:hidden。
  4. 盒子内设置属性尽量用内边距不要用外边距

CSS盒子模型_盒子模型_03

还有其他方法,比如浮动、固定,绝对定位的盒子不会有塌陷问题。

其他元素属性

圆角边框

在CSS3 中,新增了圆角边框样式,这样我们的盒子就可以变圆角了。

border-radius 属性用于设置元素的外边框圆角。

语法:

border-radius:length;
  1. 参数值可以为数值或百分比的形式
  2. 如果是正方形,想要设置为一个圆,把数值修改为高度或者宽度的一半即可,或者直接写为50%
  3. 该属性是一个简写属性,可以跟四个值,分别代表左上角、右上角、右下角、左下角
  4. 分开写:border-top-left-radius、border-top-right-radius、border-bottom-right-radius 和
    border-bottom-left-radius
  5. 兼容性ie9+ 浏览器支持, 但是不会影响页面布局,可以放心使用

盒子阴影

CSS3 中新增了盒子阴影,我们可以使用box-shadow 属性为盒子添加阴影。

语法:

box-shadow: h-shadow v-shadow blur spread color inset;
说明
h-shadow必需的。水平阴影的位置。允许负值
v-shadow必需的。垂直阴影的位置。允许负值
blur可选。模糊距离
spread可选。阴影的大小
color可选。阴影的颜色。在CSS颜色值寻找颜色值的完整列表
inset可选。从外层的阴影(开始时)改变阴影内侧阴影
div
{
	box-shadow: 10px 10px 5px #888888;
}

注意:

  1. 默认的是外阴影(outset), 但是不可以写这个单词,否则造成阴影无效
  2. 盒子阴影不占用空间,不会影响其他盒子排列。

文字阴影

在CSS3 中,我们可以使用text-shadow 属性将阴影应用于文本。

语法:

text-shadow: h-shadow v-shadow blur color;
描述
h-shadow必需。水平阴影的位置。允许负值。
v-shadow必需。垂直阴影的位置。允许负值。
blur可选。模糊的距离。
color可选。阴影的颜色。参阅 CSS 颜色值。
h1
{
    text-shadow: 2px 2px #ff0000;
}