子div有内容,父div高度为0的解决方法
原始代码:
<html> <head> <title>Float</title> <style type = "text/css"> ul { list-style-type: none; width: 800px; background: blue; } li { float: left; } </style> </head> <body> <ul> <li><img src = "1.jpg" /></li> <li><img src = "2.jpg" /></li> <li><img src = "3.jpg" /></li> <li><img src = "4.jpg" /></li> <li><img src = "5.jpg" /></li> <li><img src = "6.jpg" /></li> </ul> </body> </html>
子div有内容,父div高度为0是因为子元素设置了 float属性的缘故。
解决方法
1 给包含元素设置高度height 值。
ul { list-style-type: none; width: 800px; background: blue; height: 300px; /*添加高度属性*/ }
2 利用overflow属性
可以包含元素设置overflow属性,并设置属性值为auto或者hidden。
ul { list-style-type: none; width: 800px; background: blue; overflow: hidden; /*添加overflow属性,可以设置为auto或者hidden*/ }
3 添加一个空的div
这种方法是添加一个空的div,这个div和浮动元素同一级别,且位于浮动元素的最后。这种方法要改动两个地方,一个是html代码,另一个是必须要为这个div添加一个clear属性:
<html> <head> <title>Float</title> <style type = "text/css"> ul { list-style-type: none; width: 800px; background: blue; } li { float: left; } /*为添加的空div设置的样式*/ .clearDiv { clear: both; } </style> </head> <body> <ul> <li><img src = "1.jpg" /></li> <li><img src = "2.jpg" /></li> <li><img src = "3.jpg" /></li> <li><img src = "4.jpg" /></li> <li><img src = "5.jpg" /></li> <li><img src = "6.jpg" /></li> <div class = "clearDiv"></div> <!--新添加的空div,它和浮动元素同一级别,且位于最后--> </ul> </body> </html>
4 利用伪元素:after
用这种方法时要为包含元素先添加一个类名,这里为ul标签设置的类名.clearUl,代码如下:
<html> <head> <title>Float</title> <style type = "text/css"> ul { list-style-type: none; width: 800px; background: blue; } li { float: left; } /*利用:after伪元素*/ .clearUl:after { content:""; display: block; clear: both; } </style> </head> <body> <ul class = "clearUl"> <!--为包含的外围元素设置类--> <li><img src = "1.jpg" /></li> <li><img src = "2.jpg" /></li> <li><img src = "3.jpg" /></li> <li><img src = "4.jpg" /></li> <li><img src = "5.jpg" /></li> <li><img src = "6.jpg" /></li> </ul> </body> </html>
在:after为元素里面用到了content属性,这样这条样式的意思是在ul元素后面生成指定的内容,这里生成的内容是一个空字符串,因为只是让它来消除ul标签的高度折叠,并不让它显示出来。还有,这条样式里有display属性,要将他设置成block,这样clear属性才会起作用,因为清除操作只作用于块级元素,它的原理是为要执行清除操作的元素添加上边距,以此让元素降到浮动元素的下面,而操作行内元素的上边距不起作用。
当我们没有给父div设置高度的时候,子div的高度,就会撑开父div,而在另一个方面,当我们给父div加上一个高度值,那么无论子div的高度是多少,父div高度都是我们设定的值。而当子div的高度超过父div的高度的时候,超出的部分就会被隐藏。
-------------------
原文链接:https://blog.csdn.net/cedar777/article/details/53886182