首先看一个例子:
直接写background-image导入图片,为了看到模型,加上了border,可以看到只有一条红色的线。
background-imagedeveloper.mozilla.org![d5d403eb0967ee91f140106e36b36e75.png](https://img-blog.csdnimg.cn/img_convert/d5d403eb0967ee91f140106e36b36e75.png)
![13b14e641dc76c451ca9beab2955fb16.png](https://img-blog.csdnimg.cn/img_convert/13b14e641dc76c451ca9beab2955fb16.png)
这说明里面文档流高度为零,需要手动设置高度。
增加 height: 515px;
![937b18054c4bb0b7dd6d1e9cfb9079bb.png](https://img-blog.csdnimg.cn/img_convert/937b18054c4bb0b7dd6d1e9cfb9079bb.png)
如果背景图片想换成别的,分享一个图片网站。
Awesome Wallpapers - wallhaven.ccalpha.wallhaven.cc可以初步看到这就是文档流导致的效果。
关键一句话——div高度由其内部文档流元素的高度总和决定
关键一句话——文档流:文档流元素的流动方向要看下面很长的介绍:
下面来详细看看文档流的效果
内联元素span
![ea2dc1301412537baaef55a07c648905.png](https://img-blog.csdnimg.cn/img_convert/ea2dc1301412537baaef55a07c648905.png)
增加块级元素div
![954320e42d4c269f599c0fa529138057.png](https://img-blog.csdnimg.cn/img_convert/954320e42d4c269f599c0fa529138057.png)
可以看到每个块级元素都占一行,而内联元素都挤在一行。
有几个注意点:
1、内联元素一行占满了,会按照Z字形从左往右,然后从上往下排列:
![16cf2d90689068e8b3748e20b9dd02a5.png](https://img-blog.csdnimg.cn/img_convert/16cf2d90689068e8b3748e20b9dd02a5.png)
2、内联元素的中文字体和英文字体本身的分割方式不同。
英文的最后b已经没有了,但是还是不换行,中文的文字8每个字如果一行满了都会上下按照Z字行排列分开。
![1ee667fb788f548e2a4223e0dcfa5b9d.png](https://img-blog.csdnimg.cn/img_convert/1ee667fb788f548e2a4223e0dcfa5b9d.png)
如果想把英文的分开可以使用另外属性,这个属性叫做word-break。
word-breakdeveloper.mozilla.org![d5d403eb0967ee91f140106e36b36e75.png](https://img-blog.csdnimg.cn/img_convert/d5d403eb0967ee91f140106e36b36e75.png)
设置word-break:break-all;这样英文内联元素一行占满了也可以分割;
![c00573af921bde5530c87418d3440c51.png](https://img-blog.csdnimg.cn/img_convert/c00573af921bde5530c87418d3440c51.png)
3、块级元素就算设置宽度很小,还是会占用一行。
![7897036a2f0c37be40340653161bf9ec.png](https://img-blog.csdnimg.cn/img_convert/7897036a2f0c37be40340653161bf9ec.png)
想让一行占用多个块级元素就需要设置别的样式,有两种方式:
(1)利用display: inline-block; 不过这种方式会产生一些意想不到的bug,一般建议不要使用这种方式。
![b2456ae79fc3a4e2a10c6e60fb05959b.png](https://img-blog.csdnimg.cn/img_convert/b2456ae79fc3a4e2a10c6e60fb05959b.png)
(2)推荐使用方式:使用float:
在子元素上设置——float: left;
然后在父元素上设置一个伪类——
父元素::after{content: '';
display: block;
clear: both;
}
bomber:利用float竖排变成横排笔记zhuanlan.zhihu.com如果在body上作为父元素加伪类:效果有点奇怪。
![31952e247010b497db20496a0d9c91a1.png](https://img-blog.csdnimg.cn/img_convert/31952e247010b497db20496a0d9c91a1.png)
这个时候的父元素最好是包括了所有的float属性,这样可以增加一个nav来当代替body作为包括了所有的float属性。
![bc5d9bd1786eb445c4f6b2f1f717209f.png](https://img-blog.csdnimg.cn/img_convert/bc5d9bd1786eb445c4f6b2f1f717209f.png)
文档内元素的流动方向介绍到这里结束。
所以body块级元素的总高度由所有内部所有元素文档流的高度决定,不是相等。
![f52b245b7512cbdbae43ec6a21444055.png](https://img-blog.csdnimg.cn/img_convert/f52b245b7512cbdbae43ec6a21444055.png)
如果body里面没有元素。那么高度就是零。
![e63ba4c51885cf4c1c242b5f731f3e02.png](https://img-blog.csdnimg.cn/img_convert/e63ba4c51885cf4c1c242b5f731f3e02.png)
总结:
1、内联元素从左往右流动;一行占用满了才会按照Z字行另起一行;
2、块级元素从上往下流动,块级元素不管宽度大小,都会占用一行;
3、块级元素的高度由内部文档流元素的总和决定的,不是相等。
最后内联元素的行高怎么确定呢,这个有点复杂,简单介绍可以参考链接:
bomber:内联元素的高度zhuanlan.zhihu.com所以回到最开始的背景图,这里就不得不设置一个高度height:515px。
但是不到万不得已请不要使用该属性来定义高度,因为块元素内部是按照内部文档流元素的高度决定了,如果设置的高度比原来要小就麻烦了。
![e6f7eedfad6127939f5afdb93c18c305.png](https://img-blog.csdnimg.cn/img_convert/e6f7eedfad6127939f5afdb93c18c305.png)
本文为本人的原创文章,著作权归本人和饥人谷所有,转载务必注明来源