批改状态:合格
老师批语:
在CSS中,box-sizing属性定义了用户代理(浏览器)应该如何计算一个元素的总宽度和总高度。
通常情况下,在默认的CSS盒模型定义里,一个元素的宽(width)高(height)只会应用到当前元素的内容区里。如果这个元素有padding(内边距)或border(边框),那么这个盒子在显示的时候,宽高会加上内边距和边框的值。这就意味着我们在布局的时候,需要时刻主要到这个盒子的内边距和边框,尤其是在使用响应式布局的时候,这点非常烦人。因此,w3c给出了一个新属性,box-sizing,它可以被用来调整这些烦人的特点。
box-sizing有两个值:
content-box: 默认值,元素的宽高只用到内容区,在该元素的宽高之外绘制内边距和边框。
尺寸计算公式:
width = 内容区的宽度
height = 内容区的高度
宽度和高度的结果值都不包含内边距(padding)和边框(border)
border-box: 元素的内边距和元素宽高都是包含在宽高内的。
尺寸计算公式:
width = 内容区的宽度 + padding + border
height = 内容区的高度 + padding +border
以下是根据box-sizing不同的值渲染出来的元素尺寸:
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>box-sizing:不同值渲染的元素</title><style>html {font-size: 10px;}div.box {width: 20em;height: 12em;padding: 2em;border: 5px solid red;background-color: violet;}.content-box {box-sizing: content-box;margin-bottom: 5em;}.border-box {box-sizing: border-box;}</style></head><body><div class="box content-box"></div><div class="box border-box"></div></body></html>


从上图可以看出,content-box和border-box的总宽高的值是不一样的。当属性值为content-box时的总宽高:
当属性值为border-box时的总宽高:
这里有一点值得注意的是,我在写这个demo的时候为了方便区分两个盒模型,我在第一个box上加了一个margin-bottom,但是我发现这个margin-bottom貌似并不影响这个宽高的结果,不论box-sizing的值是哪个。后来我在MDN上得到了结果,确定了我的猜想是正确的。
1.行内元素和行内块元素的水平居中:
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>元素居中问题</title><style>html {font-size: 1em;}.box {width: 15rem;height: 10rem;border: 1px solid #000;box-sizing: border-box;}.box {text-align: center;}</style></head><body><!-- 行内元素、行内块元素的水平居中 --><div class="box"><a href="">Hello World!</a><img src="https://img.php.cn/upload/course/000/117/584/5aa8cd08b9cf9363.jpg" width="150" alt=""></div></body></html>

2.行内元素的垂直居中:
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>元素居中问题</title><style>html {font-size: 16px;}.box {width: 15em;height: 10em;border: 1px solid #000;box-sizing: border-box;}.box {text-align: center;}.box a {line-height: 10em;}</style></head><body><div class="box"><a href="">Hello World!</a></div></body></html>
效果图:
注意:如果要想使行内元素垂直居中,只需要将line-height的值设置成等于height的值就可以了。但是,这个方法对于行内块元素是无效的,需要注意。
3.垂直居中问题-padding:
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>垂直居中问题:padding</title><style>html {font-size: 16px;}/* padding是最简单的方式 */.box {width: 15em;/* 不要给高度,这个高度应该由padding挤出来 *//* height: 10em; */border: 1px solid #000;}.box {padding: 5em 0;}.box > div {width: 5em;height: 5em;background-color: greenyellow;margin: 0 auto;}</style></head><body><div class="box"><div></div></div></body></html>

3.水平且垂直
1.行内元素的水平垂直居中:text-align + line-height
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>行内元素的水平垂直居中</title><style>/* 行内元素的水平垂直居中 *//* text-align:center + line-height */.box {width: 15em;height: 10em;border: 1px solid #000;box-sizing: border-box;}.box {text-align: center;line-height: 10em;}</style></head><body><div class="box"><a href="">Hello World!</a></div></body></html>

2.padding实现水平和垂直居中
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>padding实现水平和垂直居中</title><style>.box {width: auto;height: auto;padding: 5em;text-align: center;}</style></head><body><div class="box"><a href="">Hello World!</a></div></body></html>

3.margin实现水平垂直居中
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>margin实现水平垂直居中</title><style>.box {width: 15em;height: 10em;border: 1px solid #000;box-sizing: border-box;position: relative;}.box div {position: absolute;top: 0;left: 0;right: 0;bottom: 0;margin: auto;}.box > div {width: 5em;height: 5em;background-color: greenyellow;}</style></head><body><div class="box"><div></div></div></body></html>

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号