您的位置:

CSS box-sizing:border-box应用详解

一、什么是box-sizing

box-sizing是CSS3新增的一个属性,用于控制元素宽高的计算方式,常见的有两种值:

box-sizing: content-box;  // 默认值,宽高只计算内容区域
box-sizing: border-box;   // 宽高计算包括内容、内边距和边框

box-sizing属性的主要作用是让开发者控制元素的盒模型,从而更加灵活地进行页面布局。下面我们来看一些实际应用。

二、box-sizing实战-响应式布局

在移动端开发中,响应式布局是比较常见的技术,使用box-sizing可以很好地实现这一点。我们可以通过设置所有元素的box-sizing为border-box,然后使用百分比作为宽度,达到自适应的效果。

* {
  box-sizing: border-box;
  margin: 0;
  padding: 0;
}

.container {
  width: 100%;
  max-width: 1200px;
  margin: 0 auto;
}

.box {
  width: 25%;
  padding: 20px;
  float: left;
}

在上面的代码中,我们将所有元素都设置为border-box盒模型,这样可以计算内边距和边框的宽高,避免了使用传统的盒模型(content-box)时会出现的盒子宽度换算问题。接着,设置.container宽度为100%,防止盒子超出父容器,然后限制最大宽度为1200px,实现响应式布局。最后是.box的样式,宽度为25%时,可以自适应宽度,而padding的值不会改变宽度,均布四个盒子。

三、box-sizing实战-响应式表格

使用box-sizing实现响应式表格也是一种常见的技术。我们可以使用border-spacing属性来控制单元格间距,同时设置单元格宽度为百分比,使用box-sizing: border-box属性。这样可以实现表格在不同尺寸的设备上自适应的效果。

table {
  border-collapse: separate;
  border-spacing: 0px;
  width: 100%;
}

td {
  width: 50%;
  padding: 10px;
  box-sizing: border-box;
}

在上面的代码中,通过设置table的border-collapse为separate,使单元格有一个边框。同时,使用border-spacing: 0px来控制单元格的间距。接着,设置td的宽度为50%和 padding 10px,实现表格单元格水平分布和自适应。

四、box-sizing实战-图片自适应

当图片大小不同时,如何保持图片的比例不受影响呢?可以使用box-sizing实现图片自适应的效果。我们可以将图片包裹在div中,将box-sizing设为border-box、将div的padding-bottom属性值设置为图片高度与宽度比例的百分比。

.wrapper {
  position: relative;
  width: 100%;
}

.img-box {
  position: absolute;
  top: 0;
  bottom: 0;
  left: 0;
  right: 0;
  margin: auto;
  max-width: 100%;
  max-height: 100%;
  box-sizing: border-box;
  padding-bottom: 75%; // 图片高度与宽度比例为4:3
}

.img-box img {
  display: block;
  max-width: 100%;
  max-height: 100%;
}

在上面的代码中,我们用div包含了图片,将其放在一个相对定位的wrapper中,然后用绝对定位的方式将div居中。接着,将div的width设置成100%,padding-bottom设置成图片高度与宽度的比例(这里是4:3)。最后再将img的max-width和max-height都设置为100%,实现图片的自适应效果。

总结

box-sizing属性使得开发者可以更加灵活地控制元素的盒模型,较好地实现手机端的响应式布局、响应式表格、图片自适应等效果。使用box-sizing: border-box时,需要注意内边距和边框的宽高计算问题,从而准确计算元素的实际大小。