利用clear清除浮动的一些问题

栏目: Html · 发布时间: 5年前

内容简介:下面这段代码是用来清除浮动带来的高度塌陷问题Question 1: 上面的代码的能够实现清除浮动的问题吗?Answer: Can't. 因为clear属性只能控制元素本身与前面的浮动元素的关系。在本例中,使用

下面这段代码是用来清除浮动带来的高度塌陷问题

.clearfix:before {
    content: "."; 
    display: block; 
    height: 0; 
    clear: both; 
    visibility: hidden;
}

Question 1: 上面的代码的能够实现清除浮动的问题吗?

Answer: Can't. 因为clear属性只能控制元素本身与前面的浮动元素的关系。在本例中,使用 :before 伪元素明显位于所有子元素之前,故而clear属性不会因后面的浮动元素产生任何作用效果。 clear属性的官方定义可以查看 CSS文档 。那么应该如何修改呢?将 :before 换成 :after 即可。最终代码如下:

.clearfix:after {
    content: "."; 
    display: block; 
    height: 0; 
    clear: both; 
    visibility: hidden;
}

Question 2: content 属性的内容能改成空吗 content: '';

Answer: Yes. 因为设置了 height:0;visibility: hidden 。 如果设置了 content:''; ,那么 height:0;visibility: hidden 和 可以去掉吗? 当然可以,因为块元素没有内容就不会有高度咯。

更改后的代码如下:

.clearfix:after {
    content: ""; 
    display: block;
    clear: both;
}

Question 3: display 属性的内容能改成 inlineinline-block 吗?

Answer: 不能。 我们要明白float属性的初衷————让文字环绕图片展示。翻译成另外一句话:内联级别的元素会环绕浮动元素展示。那么为什么 display: block; 可以解决高度塌陷的问题呢。 因为 clear 属性的含义是不让元素本身与浮动元素的边界相邻。如果块级元素要不与块级元素边界相邻,只有换到下一行展示。也正为换行,才将父元素到高度撑开了,正式上面的代码解决高度塌陷的原理。

Question 4: 下面到div元素会存在高度塌陷问题吗?

<style>
    .clearfix::after {
        content: "";
        display: block;
        clear:left;
    }
    img { float: right; }
</style>
<div class="clearfix">
    <span>历史的天空</span>
    <img src="images/naruto.gif">
</div>

Answer: 存在。为什么呢?要知道 clear属性中, clear:left;clear:right; 的区别。

  • left : 不与左浮动的元素产生边界接触;
  • right : 不与右浮动的元素产生边界接触;
  • both : 不与左浮动和右浮动的元素产生边界接触;

所以上面的代码不会解决高度塌陷到问题。

如果有如下代码:

<style>
    .clear-left { clear:left; }
    .clear-right { clear:right; }
    .fl { float: left;}
    .fr { float: right;}
    .box { 
        height: 30px; width: 30px;
        background: yellowgreen;
        margin: 5px;
    }
</style>

<div>
    <div class="box fl">1</div>
    <div class="box fr">2</div>
    <div class="box clear-left">3</div>
</div>
<div>
    <div class="box fl">1</div>
    <div class="box fr">2</div>
    <div class="box clear-right">3</div>
</div>å

你会发现,两个div的展示效果是相同的。也就是说,如果前面同时存在左浮动和右浮动到元素,那么clear属性值无论设成 left 还是 right 都无关紧要。 反过来想,如果clear属性设成 both ,那么无论前面的元素是左浮动还是右浮动,都无关紧要。这也是clearfix通常设置 clear:both; 的原因。

注意一点,我们一直在说 解决 高度塌陷都问题,从来没有说清除浮动。 是因为本质上,浮动并没被清除,我们只是利用clear属性解决了浮动元素带来的父级元素高度塌陷问题。而且clear属性影响也只是设置clear属性的元素本身,而不是浮动元素。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

PHP 5权威编程

PHP 5权威编程

(美)古曼兹等 / 简张桂 / 电子工业出版社 / 2007-12 / 90.00元

《BRUCE PERENS开源系列丛书•PHP 5权威编程》为大家全面介绍了PHP 5中的新功能、面向对象编程方法及设计模式,还分析阐述了PHP5中新的数据库连接处理、错误处理和XML处理等机制。希望能够帮助读者系统了解、熟练掌握PHP,最大程度地挖掘:PHP的潜力,以更低的成本搭建更加稳健、高效的PHP应用。 近年来,随着使用PHP的大流量网站逐渐增加,企业在使用PHP的时候开始面临新的问......一起来看看 《PHP 5权威编程》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具