CSS 盒模型是 CSS 布局的基础,它描述了元素如何占据空间以及如何与其他元素交互。理解盒模型对于掌握 CSS 布局至关重要。
CSS 盒模型由以下几个部分组成:
这些部分共同构成了元素的盒模型,决定了元素在页面中的大小和位置。
在标准盒模型中,元素的宽度和高度只包括内容区域,不包括内边距、边框和外边距。
.box {width: 300px;height: 200px;padding: 20px;border: 5px solid black;margin: 10px;}
在这个例子中:
width
和 height
属性用于设置元素内容区域的宽度和高度。
.box {width: 300px;height: 200px;}
可以使用 min-width
、min-height
、max-width
和 max-height
属性来限制元素的尺寸。
.box {min-width: 200px;max-width: 600px;min-height: 100px;max-height: 400px;}
这些属性对于创建响应式布局非常有用,可以确保元素在不同屏幕尺寸下保持合适的大小。
可以使用百分比来设置元素的宽度和高度,这样元素的大小会相对于其父元素。
.container {width: 80%;height: 50%;}
Tips: 当使用百分比设置高度时,父元素必须有明确的高度,否则子元素的高度将无法计算。
CSS3 引入了视口单位,可以相对于视口(浏览器窗口)设置元素的尺寸。
.header {width: 100vw; /* 视口宽度的 100% */height: 50vh; /* 视口高度的 50% */}
常用的视口单位包括:
vw
:视口宽度的百分比vh
:视口高度的百分比vmin
:视口宽度和高度中较小值的百分比vmax
:视口宽度和高度中较大值的百分比外边距是元素与其他元素之间的空白区域,用于控制元素之间的间距。
.box {margin: 10px; /* 上、右、下、左外边距均为 10px */}
外边距可以单独设置:
.box {margin-top: 10px;margin-right: 20px;margin-bottom: 15px;margin-left: 25px;}
也可以使用简写形式:
.box {margin: 10px 20px; /* 上下 10px,左右 20px */}
.box {margin: 10px 20px 15px 25px; /* 上 10px,右 20px,下 15px,左 25px */}
内边距是内容区域与边框之间的空白区域,用于控制内容与边框之间的距离。
.box {padding: 10px; /* 上、右、下、左内边距均为 10px */}
内边距可以单独设置:
.box {padding-top: 10px;padding-right: 20px;padding-bottom: 15px;padding-left: 25px;}
也可以使用简写形式:
.box {padding: 10px 20px; /* 上下 10px,左右 20px */}
.box {padding: 10px 20px 15px 25px; /* 上 10px,右 20px,下 15px,左 25px */}
当两个垂直相邻的元素都有外边距时,它们的外边距会发生折叠,取两者中的较大值。
.box1 {margin-bottom: 20px;}.box2 {margin-top: 30px;}
在这个例子中,box1
和 box2
之间的实际间距为 30px,而不是 50px。
Tips: 只有垂直方向的外边距会发生折叠,水平方向的外边距不会折叠。
边框是围绕元素内容区域和内边距的线。
border-style
属性设置边框的样式:
.box {border-style: solid;}
常用的边框样式包括:
none
:无边框solid
:实线dashed
:虚线dotted
:点线double
:双线groove
:凹槽ridge
:凸槽inset
:内嵌outset
:外嵌border-width
属性设置边框的宽度:
.box {border-width: 2px;}
border-color
属性设置边框的颜色:
.box {border-color: #333;}
border
属性可以一次性设置边框的样式、宽度和颜色:
.box {border: 2px solid #333;}
可以单独设置元素各边的边框:
.box {border-top: 2px solid #333;border-right: 1px dashed #666;border-bottom: 3px double #999;border-left: 1px dotted #ccc;}
border-radius
属性用于设置边框的圆角:
.box {border-radius: 10px;}
可以单独设置各角的圆角:
.box {border-radius: 10px 20px 15px 5px; /* 左上、右上、右下、左下 */}
box-shadow
属性用于为元素添加阴影效果:
.box {box-shadow: 5px 5px 10px rgba(0, 0, 0, 0.5);}
box-shadow
属性的值包括:
可以添加多个阴影:
.box {box-shadow: 5px 5px 10px rgba(0, 0, 0, 0.5),-5px -5px 10px rgba(0, 0, 0, 0.3);}
可以使用 inset
关键字创建内阴影:
.box {box-shadow: inset 5px 5px 10px rgba(0, 0, 0, 0.5);}
让我们来创建一个漂亮的卡片组件,练习盒模型的各种属性。
这个练习包含了以下要点:
盒模型基础:
box-sizing: border-box
设置盒模型类型width
和 height
控制元素尺寸padding
设置内边距margin
设置外边距border
和 border-radius
设置边框样式布局技巧:
max-width
限制容器宽度margin: auto
实现水平居中overflow: hidden
处理溢出内容视觉效果:
box-shadow
添加阴影效果transition
添加过渡动画transform
实现悬停效果你可以尝试修改这些样式,看看不同的效果。比如: