[html5入门-10]解决设置了float了的子元素的父级边框和背景不显示的问题
2016-10-04 18:36
751 查看
前面讨论了html5布局中float的用法,具体请见:浅谈html5中float的用法
Float直接把一个元素弄成了块级内联标签,用起来是挺爽的,但是偶尔也会产生一些小问题,比如下面这个例子:
给d1设置了背景和宽高,d1的子元素d2设置float之后d1的背景和宽高不显示了,而且d2的上边缘似乎跑到d1边框上面了,效果如下图:
当然,如果给d1加上高度就会显示出来,但是这样做有一个缺点,在页面布局中,如果改变了子级的高度,那么也要调整父级的高度,对于具有多层或多个子级的情况,这种情况并不太实用。
下面比较一下这些防止设置float子级的父级边框和宽高不显示的方法
1.给父级设置宽高
缺点:不利于扩展,也就是子集元素的高度发生了变化,也要同时取修改父级元素的高。
2.让父级元素也浮动
缺点:如果其他元素要保留文档流的问题,也要同样设置浮动。
举个例子
给d2的父级d1也设置了浮动:
可见父级元素的边框和宽高显示出来了。
3.将父级元素设置为块级内联标签或设置overflow:hidden;
举例说明:
父级边框和宽高显示出来了。
给父级元素设置overflow:hidden的效果也是一样,不再举例说明。
4.对设置浮动的子级利用标签清除浮动
举例说明:
注意:清除浮动的标签一定要用在body里面子级元素的下面,否则没有效果。
5.利用伪元素清除浮动
在父级元素上设置after标签清除浮动
举例说明:
也能产生同样的效果。
6.总结
防止子级设置浮动导致父级边框和宽高不显示的方法,大致可分为两类:
6.1设置清除浮动:利用标签给子级清除浮动,或利用伪元素给父级清除浮动;
6.2 给父级设置属性:给父级设置高度,或者让父级也浮动,或者给父级设置overflow:hidden,或者设置父级display:block
Float直接把一个元素弄成了块级内联标签,用起来是挺爽的,但是偶尔也会产生一些小问题,比如下面这个例子:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>float布局问题</title> <style type="text/css"> .d1{ width:200px; border: 2px solid blue; background: salmon; } .d2{ width: 100px; height: 100px; background: aqua; float: left; } </style> </head> <body> <div class="d1"> <div class="d2"></div> </div> </body> </html>
给d1设置了背景和宽高,d1的子元素d2设置float之后d1的背景和宽高不显示了,而且d2的上边缘似乎跑到d1边框上面了,效果如下图:
当然,如果给d1加上高度就会显示出来,但是这样做有一个缺点,在页面布局中,如果改变了子级的高度,那么也要调整父级的高度,对于具有多层或多个子级的情况,这种情况并不太实用。
下面比较一下这些防止设置float子级的父级边框和宽高不显示的方法
1.给父级设置宽高
缺点:不利于扩展,也就是子集元素的高度发生了变化,也要同时取修改父级元素的高。
2.让父级元素也浮动
缺点:如果其他元素要保留文档流的问题,也要同样设置浮动。
举个例子
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>float布局问题</title> <style type="text/css"> .d1{ width:200px; border: 2px solid blue; background: salmon; float: left; } .d2{ width: 100px; height: 100px; background: aqua; float: left; } </style> </head> <body> <div class="d1"> <div class="d2"></div> </div> </body> </html>
给d2的父级d1也设置了浮动:
可见父级元素的边框和宽高显示出来了。
3.将父级元素设置为块级内联标签或设置overflow:hidden;
举例说明:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>float布局问题</title> <style type="text/css"> .d1{ width:200px; border: 2px solid blue; background: salmon; display: inline-block; } .d2{ width: 100px; height: 100px; background: aqua; float: left; } </style> </head> <body> <div class="d1"> <div class="d2"></div> </div> </body> </html>
父级边框和宽高显示出来了。
给父级元素设置overflow:hidden的效果也是一样,不再举例说明。
4.对设置浮动的子级利用标签清除浮动
举例说明:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>利用标签清除浮动</title> <style type="text/css"> .div1{ width: 200px; border: 4px solid blue; } .div2{ width: 150px; height: 200px; background: salmon; float: right; } .clean{ clear: both; } </style> </head> <body> <div class="div1"> <div class="div2"></div> <div class="clean"></div><!--利用标签清除浮动,一定要在浮动标签的后面加一个空标签--> </div> </body> </html>
注意:清除浮动的标签一定要用在body里面子级元素的下面,否则没有效果。
5.利用伪元素清除浮动
在父级元素上设置after标签清除浮动
举例说明:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>利用标签清除浮动</title> <style type="text/css"> .div1{ width: 200px; border: 4px solid blue; } .div2{ width: 150px; height: 200px; background: salmon; float: right; } .div1:after{ content: ""; display: block; clear: both; } </style> </head> <body> <div class="div1"> <div class="div2"></div> </div> </body> </html>
也能产生同样的效果。
6.总结
防止子级设置浮动导致父级边框和宽高不显示的方法,大致可分为两类:
6.1设置清除浮动:利用标签给子级清除浮动,或利用伪元素给父级清除浮动;
6.2 给父级设置属性:给父级设置高度,或者让父级也浮动,或者给父级设置overflow:hidden,或者设置父级display:block
相关文章推荐
- 解决设置float样式后父级元素不适应问题
- 解决设置float样式后父级元素不适应问题
- 父级元素未设置高度和宽度时高度塌陷问题的解决方法
- div+css总结—FF下div不设置高度背景颜色或外边框不能显示的解决方法 (新浪博客 )
- 父级设置了float,子元素不显示了
- div+css总结—FF下div不设置高度背景颜色或外边框不能正常显示的解决方法(借鉴)
- android在根布局组件设置背景不显示的问题解决
- div不设置高度背景颜色或外边框不能显示的解决方法
- div+css总结—FF下div不设置高度背景颜色或外边框不能显示的解决方法
- 未设置高度的容器背景和边框不显示问题(CSS)
- 关于CSS中内层使用float导致外层的背景无法显示的问题的解决方法
- 关于CSS中内层使用float导致外层的背景无法显示的问题的解决
- div+css总结—FF、IE7下div不设置高度背景颜色或外边框不能显示的解决方法
- css解决select不能被遮盖和不能设置边框背景补白等样式的问题
- div+css div不设置高度背景颜色或外边框不能显示的解决方法
- HTML5_CSS入门(尺寸大小、颜色单位、溢出、哪些元素可以设置尺寸、边框,边框倒角、边框阴影,轮廓)
- CSS样式设置语法全解,样式优先级、值和单位、字体、文本、块级元素,行内元素,替换元素、非替换元素、display、float、position、table、li、光标、边距边框、轮廓、颜色背景
- z-index设置无效和元素重叠显示的问题解决
- 利用CSS设置背景图片不显示的问题