如何清除 float 的影响
2020/2/21 4:13:31
本文主要是介绍如何清除 float 的影响,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
抗浮动的专用属性 clear
clear 的定义
clear 属性的本质意义是让元素本身不能与前面的浮动元素相邻( 不在一行显示 )。
例子:
<style> ul { background-color: cornsilk; margin: 0; padding: 0; } li { background-color: brown; width: 40px; height: 40px; color: #fff; list-style: none; float: left; } li:first-child { background-color: cadetblue; } li:last-child { background-color: coral; } </style> <ul> <li>1</li> <li style="clear: both;">2</li> <li>3</li> </ul>
例子中,为第二个 li 元素设置了 clear 属性,这里需要注意,clear
属性元素只会抗拒自身与前面浮动元素相邻,对于后面的浮动元素,并没有效果。
实现原理
CSS2.1 之前,通过为抗浮动元素( 设置 clear 的元素 )增加上外边距( 即 margin-top ),来实现这种换行效果;CSS2.1 规范中,引入" 清除空间 "的概念,而上外边距不再改变。不管哪种方式,效果都是相同的。
例子:
<style> ul { background-color: cornsilk; margin: 0; padding: 0; overflow: hidden; } li { background-color: brown; width: 40px; height: 40px; color: #fff; list-style: none; float: left; } li:first-child { background-color: cadetblue; } li:last-child { background-color: coral; } </style> <ul> <li>1</li> <li style="clear: both;">2</li> <li>3</li> </ul>
clear 的应用
1、推荐使用 clear:both
clear 属性值 left( 左侧抗浮动 )、right( 右侧抗浮动 ) 和 both( 两侧抗浮动 ),实际上,凡是 left 和 right 可以发挥作用的情况,直接使用 both 就可以。所以推荐直接使用 clear:both。
2、只有块级元素才有效
clear 属性只有块级元素才有效,因此可以直接使用块级元素,或者通过伪元素,设置为块级盒子,来消除浮动造成的高度塌陷。
例子:
<style> nav { outline: dotted; } p { margin: 0; color: #fff; line-height: 40px; float: left; } p:nth-of-type(1) { background-color: fuchsia; } p:nth-of-type(2) { background-color: dodgerblue; } p:nth-of-type(3) { background-color: coral; } /* div { height: 2px; background: #FFEB3B; clear: both; } */ nav::after { content: ""; /* 转换为块级元素 table 或 list-item 也可以 */ display: block; clear: both; height: 0; } </style> <nav> <p>111</p> <p>222</p> <p>333</p> <!-- <div></div> --> </nav>
利用 BFC 避免高度塌陷
元素一旦具有 BFC ,那么无论其子元素如何折腾,都不会影响到外部元素。利用这一点,也可以避免 float 造成的高度塌陷。
触发 BFC 的方式有很多,但从效果上来看,float、display、position 等属性都会影响原来的布局,而 overflow 取值 hidden,既可以保持父元素块级盒子的流动性,又实现了区域的封闭性,实属最佳的选择。
例子:
<style> nav { outline: dotted; overflow: hidden; /* display: inline-block; position: absolute; float: left; */ } p { margin: 0; color: #fff; line-height: 40px; float: left; } p:nth-of-type(1) { background-color: fuchsia; } p:nth-of-type(2) { background-color: dodgerblue; } p:nth-of-type(3) { background-color: coral; } </style> <nav> <p>111</p> <p>222</p> <p>333</p> </nav> <label>我只想在nav下面!</label>
如有错误,欢迎指正,本人不胜感激。
这篇关于如何清除 float 的影响的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-27前端高频面试题详解与实战攻略
- 2024-12-27前端高频面试真题解析与实战指南
- 2024-12-27前端面试实战:初级工程师必备技巧与案例分析
- 2024-12-27前端面试题及答案:新手必备指南
- 2024-12-27前端面试真题及答案解析:初级前端工程师必备指南
- 2024-12-25前端大厂面试真题解析与实战攻略
- 2024-12-25如何准备前端面试:新手指南
- 2024-12-25前端面试题详解与实战攻略
- 2024-12-25前端面试真题详解与实战攻略
- 2024-12-252024前端大厂面试真题详解及备考指南