css浮动,清除浮动

浮动目的:创建多列布局

浮动元素 会脱离正常的文档布局流,并吸附到其父容器的左边 。在正常布局中位于该浮动元素之下的内容,此时会围绕着浮动元素,填满其右侧的空间。
注意浮动内容仍然遵循盒子模型诸如外边距和边界。

多列浮动布局

两列布局

body {
  width: 90%;
  max-width: 900px;
  margin: 0 auto;
}

上边代码的含义:
在宽度小于900px时,整个视图的宽度为90%;
当宽度大于900px时,整个视图的宽度保持900*90%的宽度、
水平居中

列使用宽度百分比——这是一个很好的策略,因为它创建一个流式布局(liquid layout),一种调整为不同的屏幕尺寸,并在较小的屏幕尺寸下保持相同的列宽度比例。

<DOCTYPE!>
<html>
<head>
<link rel="stylesheet" type="text/css" href="style.css" />
</head>
<body>
<h1>2 column layout example</h1>
<div>
  <h2>First column</h2>
  <p> Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla luctus aliquam dolor, eu lacinia lorem placerat vulputate. Duis felis orci, pulvinar id metus ut, rutrum luctus orci. Cras porttitor imperdiet nunc, at ultricies tellus laoreet sit amet. Sed auctor cursus massa at porta. Integer ligula ipsum, tristique sit amet orci vel, viverra egestas ligula. Curabitur vehicula tellus neque, ac ornare ex malesuada et. In vitae convallis lacus. Aliquam erat volutpat. Suspendisse ac imperdiet turpis. Aenean finibus sollicitudin eros pharetra congue. Duis ornare egestas augue ut luctus. Proin blandit quam nec lacus varius commodo et a urna. Ut id ornare felis, eget fermentum sapien.</p>
</div>

<div>
  <h2>Second column</h2>
  <p>Nam vulputate diam nec tempor bibendum. Donec luctus augue eget malesuada ultrices. Phasellus turpis est, posuere sit amet dapibus ut, facilisis sed est. Nam id risus quis ante semper consectetur eget aliquam lorem. Vivamus tristique elit dolor, sed pretium metus suscipit vel. Mauris ultricies lectus sed lobortis finibus. Vivamus eu urna eget velit cursus viverra quis vestibulum sem. Aliquam tincidunt eget purus in interdum. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.</p>
</div>
</body>
</html>


body {

  width: 50%;
  max-width: 600px;
  margin: 0 auto;

}

div:nth-of-type(1){
    width:48%;
    float:left;
}

div:nth-of-type(2){
    width:48%;
    float:right;
}

三列布局

关键:前两列float:left 最后一列float:right,通过margin来分隔列与列

<DOCTYPE!>
<html>
<head>
<link rel="stylesheet" type="text/css" href="style.css" />
</head>
<body>
<h1>2 column layout example</h1>
<div>
  <h2>First column</h2>
  <p> Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla luctus aliquam dolor, eu lacinia lorem placerat vulputate. Duis felis orci, pulvinar id metus ut, rutrum luctus orci. Cras porttitor imperdiet nunc, at ultricies tellus laoreet sit amet. Sed auctor cursus massa at porta. Integer ligula ipsum, tristique sit amet orci vel, viverra egestas ligula. Curabitur vehicula tellus neque, ac ornare ex malesuada et. In vitae convallis lacus. Aliquam erat volutpat. Suspendisse ac imperdiet turpis. Aenean finibus sollicitudin eros pharetra congue. Duis ornare egestas augue ut luctus. Proin blandit quam nec lacus varius commodo et a urna. Ut id ornare felis, eget fermentum sapien.</p>
</div>

<div>
  <h2>Second column</h2>
  <p>Nam vulputate diam nec tempor bibendum. Donec luctus augue eget malesuada ultrices. Phasellus turpis est, posuere sit amet dapibus ut, facilisis sed est. Nam id risus quis ante semper consectetur eget aliquam lorem. Vivamus tristique elit dolor, sed pretium metus suscipit vel. Mauris ultricies lectus sed lobortis finibus. Vivamus eu urna eget velit cursus viverra quis vestibulum sem. Aliquam tincidunt eget purus in interdum. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.</p>
</div>
<div>
  <h2>Third column</h2>
  <p>Nam consequat scelerisque mattis. Duis pulvinar dapibus magna, eget congue purus mollis sit amet. Sed euismod lacus sit amet ex tempus, a semper felis ultrices. Maecenas a efficitur metus. Nullam tempus pharetra pharetra. Morbi in leo mauris. Nullam gravida ligula eros, lacinia sagittis lorem fermentum ut. Praesent dapibus eros vel mi pretium, nec convallis nibh blandit. Sed scelerisque justo ac ligula mollis laoreet. In mattis, risus et porta scelerisque, augue neque hendrerit orci, sit amet imperdiet risus neque vitae lectus. In tempus lectus a quam posuere vestibulum. Duis quis finibus mi. Nullam commodo mi in enim maximus fermentum. Mauris finibus at lorem vel sollicitudin.</p>
</div>
</body>
</html>

body {

  width: 50%;
  max-width: 600px;
  margin: 0 auto;

}

div:nth-of-type(1){
    width:36%;
    float:left;
}

div:nth-of-type(2){
    width:30%;
    float:left;
    margin-left:4%;
}
div:nth-of-type(3) {
  width: 26%;
  float: right;
}

清除浮动

clear 属性。当你把这个应用到一个元素上时,它主要意味着”此处停止浮动”——这个元素和源码中后面的元素将不浮动,除非您稍后将一个新的float声明应用到此后的另一个元素。

footer {
  clear: both;
}

clear 可以取三个值:

  1. left:停止任何活动的左浮动
  2. right:停止任何活动的右浮动
  3. both:停止任何活动的左右浮动

清除浮动方法

  1. 添加额外的div 设置clear
  2. 使用br自身的clear属性

    <br clear='all'>

  3. 父元素 overflow:hidden/auto

  4. 使用:after 伪元素
.clearfix:after {
  content:".";
  display:block;
  height:0; 
  clear:both; }
.clearfix { *zoom:1; }

1) display:block 使生成的元素以块级元素显示,占满剩余空间;
2) height:0 避免生成内容破坏原有布局的高度。
3) visibility:hidden 使生成的内容不可见,并允许可能被生成内容盖住的内容可以进行点击和交互;
4)通过 content:”.”生成内容作为最后一个元素,至于content里面是点还是其他都是可以的,例如oocss里面就有经典的 content:”XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX”,有些版本可能content 里面内容为空,一丝冰凉是不推荐这样做的,firefox直到7.0 content:”” 仍然会产生额外的空隙;
5)zoom:1 触发IE hasLayout。
通过分析发现,除了clear:both用来闭合浮动的,其他代码无非都是为了隐藏掉content生成的内容,这也就是其他版本的闭合浮动为什么会有font-size:0,line-height:0。

精益求精方法1
通过查询发现Unicode字符里有一个“零宽度空格”,也就是U+200B ,这个字符本身是不可见的,所以我们完全可以省略掉 visibility:hidden了

.clearfix:after {content:"200B"; display:block; height:0; clear:both; }
.clearfix { *zoom:1; }.

改进方案一由于存在Unicode字符不适合内嵌CSS的GB2312编码的页面,使用原始方法完全可以解决我们的需求了

小结:
清除浮动两个思路
1、浮动元素的末尾添加一个空元素,设置 clear:both属性,
2,通过设置父元素 overflow 或者display:table 属性来闭合浮动,
块级格式化上下文 BFC
综上所述: 在支持BFC的浏览器(IE8+,firefox,chrome,safari)通过创建新的BFC闭合浮动;
在不支持 BFC的浏览器 (IE6-7),通过触发 hasLayout 闭合浮动。
overflow:hidden/auto会出发创建新的BFC,因为父元素创建了新的BFC.BFC外边不再受里面影响

浮动问题

  1. 非浮动元素的外边距margin不能用于它们和浮动元素之间来创建空间
  2. 浮动元素不能撑开父元素高度
    解决办法:
    在footer上边添加一个清除浮动块。然后footer就可以设置margin来分离
<DOCTYPE!>
<html>
<head>
<link rel="stylesheet" type="text/css" href="style.css" />
</head>
<body>
<h1>2 column layout example</h1>
<div class="column">
  <h2>First column</h2>
  <p> Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla luctus aliquam dolor, eu lacinia lorem placerat vulputate. Duis felis orci, pulvinar id metus ut, rutrum luctus orci. Cras porttitor imperdiet nunc, at ultricies tellus laoreet sit amet. Sed auctor cursus massa at porta. Integer ligula ipsum, tristique sit amet orci vel, viverra egestas ligula. Curabitur vehicula tellus neque, ac ornare ex malesuada et. In vitae convallis lacus. Aliquam erat volutpat. Suspendisse ac imperdiet turpis. Aenean finibus sollicitudin eros pharetra congue. Duis ornare egestas augue ut luctus. Proin blandit quam nec lacus varius commodo et a urna. Ut id ornare felis, eget fermentum sapien.</p>
</div>

<div class="column">
  <h2>Second column</h2>
  <p>Nam vulputate diam nec tempor bibendum. Donec luctus augue eget malesuada ultrices. Phasellus turpis est, posuere sit amet dapibus ut, facilisis sed est. Nam id risus quis ante semper consectetur eget aliquam lorem. Vivamus tristique elit dolor, sed pretium metus suscipit vel. Mauris ultricies lectus sed lobortis finibus. Vivamus eu urna eget velit cursus viverra quis vestibulum sem. Aliquam tincidunt eget purus in interdum. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.</p>
</div>
<div class="column">
  <h2>Third column</h2>
  <p>Nam consequat scelerisque mattis. Duis pulvinar dapibus magna, eget congue purus mollis sit amet. Sed euismod lacus sit amet ex tempus, a semper felis ultrices. Maecenas a efficitur metus. Nullam tempus pharetra pharetra. Morbi in leo mauris. Nullam gravida ligula eros, lacinia sagittis lorem fermentum ut. Praesent dapibus eros vel mi pretium, nec convallis nibh blandit. Sed scelerisque justo ac ligula mollis laoreet. In mattis, risus et porta scelerisque, augue neque hendrerit orci, sit amet imperdiet risus neque vitae lectus. In tempus lectus a quam posuere vestibulum. Duis quis finibus mi. Nullam commodo mi in enim maximus fermentum. Mauris finibus at lorem vel sollicitudin.</p>
</div>
<div class="clearfix"></div>
<footer>
  <p>&copy;2016 your imagination. This isn't really copyright, this is a mockery of the very concept. Use as you wish.</p>
</footer>
</body>
</html>


* {
  box-sizing: border-box;
}
body {

  width: 50%;
  max-width: 600px;
  margin: 0 auto;

}
.column, footer {
  padding: 1%;
  border: 2px solid black;
  background-color: red;
}
 .column{
    height: 550px;
    overflow: auto;
 }
div:nth-of-type(1){
    width:36%;
    float:left;
}

div:nth-of-type(2){
    width:30%;
    float:left;
    margin-left:4%;
}
div:nth-of-type(3) {
  width: 26%;
  float: right;
}
.clearfix {
  clear: both;
}
footer {
        margin-top: 4%;
      } 

参考文章:https://developer.mozilla.org/zh-CN/docs/Learn/CSS/CSS_layout/Floats
https://www.zhihu.com/question/19915431

猜你喜欢

转载自blog.csdn.net/xiaoliangsu/article/details/80691627