css的浮动问题的解决方法

浮动会使当前标签产生向上浮的效果,同时会影响到前后标签、父级标签的位置及 width height

性。会导致盒子高度的塌陷.

清除浮动是一个前端开发人员必须掌握的技巧

1.固定高度法


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        * {
            padding: 0;
            margin: 0;
        }
        /*可以为父标签设定一个高度, 这里就为父元素设置了高度防止了浮动影响和塌陷的问题*/
        #box1 {
            height: 100px;
        }
        #box1 div {
            float: left;
            width: 100px;
            background: red;
            height: 100px;
        }
        #box2 {
            width: 100px;
            height: 100px;
            border: 1px solid #000;
            background: yellow;
        }
    </style>
</head>
<body>
<div id="box1">
    <div></div>
</div>
<div id="box2"></div>
</body>
</html>

2外墙法

在两个盒子之间防止一个div,设置clear属性为both;

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        * {
            padding: 0;
            margin: 0;
        }
        #box1 div {
            float: left;
            width: 100px;
            background: red;
            height: 100px;
        }
        /*这是外墙*/
        #wall{ 
            height: 0;
            clear: both;
        }
        #box2 {
            width: 100px;
            height: 100px;
            border: 1px solid #000;
            background: yellow;
        }
    </style>
</head>
<body>
<div id="box1">
    <div></div>
</div>
<div id="wall"></div>
<div id="box2"></div>
</body>
</html>

但是有个问题,会导致上面的盒子下外边距失效,要设外边距只能通过下面的盒子去设定

3内墙法

和外墙法差不多,只是在第一个盒子的尾部放置一个div,设置清除浮动的属性

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        * {
            padding: 0;
            margin: 0;
        }
        #box1>#float {
            float: left;
            width: 100px;
            background: red;
            height: 100px;
        }
        #wall{
            height: 0;
            clear: both;
        }
        #box2 {
            width: 100px;
            height: 100px;
            border: 1px solid #000;
            background: yellow;
        }
    </style>
</head>
<body>
<div id="box1">
    <div id="float"></div>
    <div id="wall"></div>
</div>
<div id="box2"></div>
</body>
</html>

4overflow 清除法
在父元素设置一个overflow为hidden或者auto属性就都以.;其实就是bfc,bfc容器就会导致大家河水不犯井水,除了overflow,position不为relative,float,display为inline-block,table-cell都是可以形成bfc容器

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        * {
            padding: 0;
            margin: 0;
        }
        #box1 {
            overflow: hidden; /*这里设置了overflow就会防止因为盒子浮动*/
        }
        #box1 #float {
            float: left;
            width: 100px;
            background: red;
            height: 100px;
        }
        #box2 {
            width: 100px;
            height: 100px;
            border: 1px solid #000;
            background: yellow;
        }
    </style>
</head>
<body>
<div id="box1">
    <div id="float"></div>
</div>
<div id="box2"></div>
</body>
</html>

这个方法很简单,也是我比较喜欢用的一种办法

5通过css3的伪类选择器添加一个外墙

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        * {
            padding: 0;
            margin: 0;
        }
        #box1::after {
            display:block;
            clear:both;
            content:"";
            visibility:hidden;
            height:0
        }
        #box1 #float {
            float: left;
            width: 100px;
            background: red;
            height: 100px;
        }
        #box2 {
            width: 100px;
            height: 100px;
            border: 1px solid #000;
            background: yellow;
        }
    </style>
</head>
<body>
<div id="box1">
    <div id="float"></div>
</div>
<div id="box2"></div>
<script>
</script>
</body>
</html>

这个比较常用,而且兼容性也不错

6还有一个是5方法的加强版

#box1::after {
            clear:both;
            content:"";
            display:table;
        }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 13,844评论 1 92
  • 1.CSS基本概念 1.1 CSS的定义 CSS(Cascading Style Sheets)层叠样式表,主要用...
    寥寥十一阅读 1,902评论 0 6
  • CSS学习感言: CSS明显比HTML复杂一些,用的时间也多,而且也还有许多迷惑的地方,特别是关于定位和浮动,理解...
    雨夜月风阅读 463评论 0 1
  • 我们开始进入正题了,Redux中专门为react提供了一个库叫做React-redux。你也可以直接使用redux...
    心跳_Zy阅读 1,138评论 0 51
  • “伟霆,你出去帮我买点木瓜和牛奶呗!”「膩穎,怎麼啦,怎麼突然想起來吃木瓜了呢」?“还不赖你,别人都说你的胸肌...
    颖霆cp粉阅读 2,163评论 1 4