display属性
块元素、行内元素、行内块元素
块元素(block)特点:
- 块元素独占一行,排斥其他元素(包括块元素和行内元素)与其位于同一行。
- 块元素内部可以容纳其他块元素和行内元素。
- 可以定义width,也可以定义height。
- 可以定义4个方向的margin。
行内元素(inline)特点:
- 行内元素可以与其他行内元素位于同一行。
- 行内元素内部可以容纳其他行内元素,但不可以容纳块元素。
- 无法定义height,也无法定义width。
- 可以定义margin-left和margin-right,无法定义margin-top和margin-bottom。
行内块元素(inline-block)特点:
同时具备了block元素和inline元素的特点。
在HTML5中,最典型的inline-block元素有两个:img和input。
display:none
对于display:none,我们需要注意以下两点:
- display:none元素一般用来配合JavaScript动态隐藏元素,被隐藏的元素不占据原来的位置。
- display:none不推荐用来隐藏一些对SEO关键的部分,因为对于搜索引擎而言,它不会将display:none隐藏的内容加入权重考虑。
display:none和visibility:none的区别
虽然两种方式都可以隐藏元素,但二者之间有本质的区别:
- display:none:元素被隐藏后,不占据原来的位置。
- visibility:none:元素被隐藏后,依然占据原来的位置。
display:table-cell
display:table-cell可以让元素以表格单元格的形式呈现。换句话说,就是table-cell类型元素具有td元素的特点。
常见用途有以下三种:
- 图片垂直居中于元素
- 等高布局
- 自动平均划分元素
图片垂直居中于元素
我们可以配合使用display:table-cell和vertical-align: middle来实现大小不固定的图片的垂直居中效果。
(图片的水平居中可以使用text-align:center来实现)
/* 父元素 */
{
display: table-cell;
vertical-align: middle;
}
/* 子元素 */
{
vertical-align: middle;
}
等高布局
我们知道,同一行的单元格td元素高度是相等的,因此,table-cell元素也具备这个特点。根据这个特点,我们可以实现等高布局效果。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title></title>
<style type="text/css">
/* 定义父元素具备的特点 */
#wrapper{
display: table-row;
}
#img-box{
display: table-cell;
/* 垂直居中 */
vertical-align: center;
/* 水平居中 */
text-align: center;
width: 100px;
height: 100px;
}
#text-box{
display: table-cell;
width: 200px;
height: 100px;
}
</style>
<script>
</script>
</head>
<body>
<div id="wrapper">
<div id="img-box">
<img src="http://www.cxy521.com/static/img/index/image/baidu_favicon.ico" alt="" class="img" />
</div>
<div id="text-box">
<span>baidu</span>
</div>
</div>
</body>
</html>
自动平均划分元素
可以为每一个li元素定义display:table-cell,它会自动平均划分元素,并且使得它们在同一行显示。
/* 父元素 */
{
display: table;
}
/* 子元素 */
{
display: table-cell;
}
然后为父元素定义一定的宽度,那么此时子元素的宽度就会根据子元素的个数自动平均划分。
inline-block元素间距
inline-block元素之间有一定的间距。在实际开发中,这种间距有时会对我们的布局产生影响。大多数时候我们需要去除inline-block元素的间距。
在CSS中,我们可以为父元素定义一个"font-size:0;"来去除inline-block元素的间距。
/* 父元素 */
{
font-size:0;
}
注意:因为父元素使用了font-size:0,所以子元素如果有文字需要定义自身的font-size,不然会因为继承而看不到文字。