详解CSS布局中浮动问题的四种解决方案

所属分类: 网页制作 / CSS 阅读数: 609
收藏 0 赞 0 分享

一、起因:

子盒子设置浮动之后效果:

由此可见,蓝色的盒子设置浮动之后,因为脱离了标准文档流,它撑不起父盒子的高度,导致父盒子 高度塌陷 。如果网页中出现了这种问题,会导致我们整个网页的布局紊乱

二、解决方案:

  • 父盒子设置固定高度------------------给父元素添加固定的高度
  • 内墙法 -------------------------------在父元素的后面添加一个空的div添加样式为  clear:both
  • 伪元素清除法-------------------------给父元素类名添加一个类叫   clearfix   (推荐)
  • overflow:hidden---------------------给父元素样式添加  overflow:hidden

(1)父盒子设置固定高度

虽然,给父盒子设置了固定高度能暂时解决我们的问题,但是它的使用不灵活,如果未来子盒子的高度需求发生了改变(网页的多处地方),那么我们得手动需要更改父盒子的高度。后期不易维护。

应用:网页中盒子固定高度区域,比如固定的导航栏。

缺点:使用不灵活,后期不易维护

(2)内墙法

在浮动元素的后面加一个空的 块级元素 (通常是div),并且该元素设置 clear:both; 属性。clear属性,字面意思就是清除,那么both,就是清除浮动元素对我左右两边的影响。

代码如下:

<!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8">
        <title>浮动元素的破坏性</title>
        <style type="text/css">
            .father{
                border: 1px solid red;
            }
            .child{
                width: 200px;
                height: 200px;
                float: left;
                background-color: green;
            }
            .clearfix{
                clear: both;
            }
        </style>
    </head>
    <body>
        <div class="father">
            <div class="child">儿子</div>
            <div class="clearfix"></div>
        </div>
    </body>
    </html>

应用:网页中应用不多,只是为了引导下一个清除浮动的方式。

缺点:结构冗余

(3)伪元素清除法

内墙法是在浮动元素的后面加一个空的 块级元素 (通常是div),并且该元素设置 clear:both; 属性。

那么正好在css3的属性用法中整好有个选择器也完全符合这个用法,伪元素选择器。它就像伪类一样,让伪元素添加了选择器,但不是描述特殊的状态,允许为元素的 某些部分设置样式 。

 

表示在p标签元素的最后面添加样式,同时这也正好符合内墙法的用法。

代码如下:

<!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8">
        <title>浮动元素的破坏性</title>
        <style type="text/css">
            .father{
                border: 1px solid red;
            }
            .child{
                width: 200px;
                height: 200px;
                float: left;
                background-color: green;
            }
            .cleafix:after{
                content:'.';
                display: block;
                clear: both;
                overflow: hidden;
                height: 0;
            }
        </style>
    </head>
    <body>
        <div class="father clearfix">
            <div class="child">儿子</div>
        </div>
    </body>
    </html>

当以后需要清除浮动时只需要在标签中再添加一个 “clearfix” 类就行,十分的方便快捷 !

编写的伪元素清除法内容解释:

.clearfix:after{
        content:'';       表示给.clearfix元素内部最后添加一个内容,该内容为行内元素。
        display: block;       设置该元素为块级元素,符合内墙法的需求。(有的地方使用table,因为table也是一个块级元素)
        clear: both;      清除浮动的方法。必须要写
        overflow: hidden;     如果用display:none;,那么就不能满足该元素是块级元素了。overflow:hidden;表示隐藏元素,但是该元素占位置;而display:none;不占位置。
        height: 0;
    }

此处梳理一下:after(伪类)和::after(伪元素)的区别

相同点

  • 都可以用来表示伪类对象,用来设置对象前的内容
  • :before和::before写法是等效的; :after和::after写法是等效的,版本不同而已
     

不同点

  • :before/:after是Css2的写法,::before/::after是Css3的写法
  • :before/:after 的兼容性要比::before/::after好 ,
  • 不过在H5开发中建议使用::before/::after比较好
     

注意

  • 这些伪元素 要配合content属性一起使用
  • 这些伪元素 不会出现在DOM中,所以不能通过js来操作,仅仅是在 CSS 渲染层加入
  • 这些伪元素 的特效通常要使用:hover伪类样式来激活

(4)overflow:hidden

CSS属性overflow定义一个元素的内容太大而无法适应盒子的时候该做什么。它是overflow-x和overflow-y的简写属性

overflow属性不仅仅能实现以上效果,那么当一个元素设置了overflow:hidden|auto|scroll属性之后,它会形成一个BFC区域,我们叫做它为 块级格式化上下文

BFC只是一个规则。它对浮动定位都很重要。浮动定位和清除浮动只会应用于同一个BFC的元素。

浮动不会影响其它BFC中元素的布局,而清除浮动只能清除同一BFC中在它前面的元素的浮动。

优点:代码简洁

缺点:内容增多的时候容易造成不会自动换行导致内容被隐藏掉,无法显示要溢出的元素

总结:只要我们让父盒子形成BFC的区域,那么它就会自动清除区域中浮动元素带来的影响 。

哪些会形成BFC区域:

到此这篇关于详解CSS布局中浮动问题的四种解决方案的文章就介绍到这了,更多相关CSS布局浮动内容请搜索脚本之家以前的文章或继续浏览下面的相关文章,希望大家以后多多支持脚本之家!

更多精彩内容其他人还在看

CSS教程:CSS命名参考

在XHTML中定义ID、CLASSS都用得上,主要是方面CSS定义样式时能一眼看穿。所以,CSS命名仅作参考。 (1)页面结构类 容器: container 页头:header 内容:content/container 页面主体:main 页尾:footer 导航:na
收藏 0 赞 0 分享

CSS教程:控制网页文件大小通过精简CSS实现

尽管对于现如今的带宽来说,网页文件那仅以K来算的大小实在是微不足道,但如何将这以K来计算的网页文件精简到最小还是网页设计师们所应该考虑的问题之一。 众所周之,在不影响整个网页构架与功能的情况下,网页文件越小越好,因为更小的网页文件有利于浏览器对网页的解释
收藏 0 赞 0 分享

CSS教程:关于文字溢出问题的研究

首先引起对这个溢出问题进行研究是因为看到一个朋友的帖子,里面提到ie7下出现的文字溢出问题; 于是又重新翻了以前怿飞斑竹的帖子,他提到的是注释引起的文字溢出问题,我今天看的时候发现在ie7下并没有产生多猪的问题(以前我没有装ie7,所以没有测试),今天看到这个新
收藏 0 赞 0 分享

符合web标准的嵌入Flash的方法

  常有网友提问,如何让网页中嵌入的Flash标签也符合web标准。目前还没有一个完美的解决办法,这篇文章中,我们将Flash嵌入标签写入js文件中,通过变量传递参数的办法来回避不符合标准的标签。   请注意,这只是一个变通的方法,换汤不换药,并未能最终解决存在的
收藏 0 赞 0 分享

学习WEB标准必备的四项技能

今天在群里,熊猫君提议整理一个帖子,一方面为初学者提供一个入门指南,另一方面也象借此和已经在从事这个行业进行一点交流。下面是我从事这个行当多年的一些经验总结,希望抛砖引玉,大家不吝赐教。 1、必备工具 其实web标准并不是很复杂的技术,实现web标准的工具
收藏 0 赞 0 分享

CSS对表格单元格强制换行和不换行

CSS控制Table单元格强制换行与强制不换行   我们知道Div的换行和不换行的css写法。但对于表格单元格只知道一个属性nowrap可以使其不换行。   近日有此需要,但发现加上nowrap在某些情况下还是会换行!无奈,没有一个强制不换行的方法吗?   用C
收藏 0 赞 0 分享

CSS制作符合网站标准的细线表格

css教程:实现符合Web标准的细线表格   随着应用CSS网页布局构建网页,   以及web标准的广泛普及与发展,   表格渐渐被人们遗忘,   但是表格还是有它优秀的一面,   数据处理用表格的确省了不少麻烦!   这个是细表格的代码,并且通过了标准验证! tab
收藏 0 赞 0 分享

区分IE6,IE7和firefox的CSS hack

这篇文章主要为介绍了CSS小技巧之有效区分IE6,IE7,Firefox,需要的朋友可以参考下
收藏 0 赞 0 分享

CSS教程:用dl dt dd来制作列表

  今天有人发邮件问的一个问题,最开始的想法是用ul列表来实现;但是这样用出现两个比较麻烦的地方:   1、如果用UL还布局,右边一栏比较麻烦;   2、文字外边的边框自适应比较麻烦;   3、很可能要定死高度;   所以,细细地看一看这个布局,想一想还是用DL.DT.DD作
收藏 0 赞 0 分享

性感的CSS菜单(Menus)

当你需要一个简单易用的导航菜单得时候。CSSMenu是个不错的选择。相对于Flash/Javascript,他们小巧轻便,而且方便使用。当然,他们也能做出很多很漂亮的效果。 CssMenuExample 这里有几个专门收集CSS导航菜单的站点,其中有很多优秀的作品。也许能给
收藏 0 赞 0 分享
查看更多