浮动
普通流
CSS的定位机制有3种:普通流(标准流)、浮动和定位。
html语言当中另外一个相当重要的概念----------标准流!或者普通流。普通流实际上就是一个网页内标签元素正常从上到下,从左到右排列顺序的意思,比如块级元素会独占一行,行内元素会按顺序依次前后排列;按照这种大前提的布局排列之下绝对不会出现例外的情况叫做普通流布局。
什么是浮动?
浮动的目的就是为了让多个块级元素同一行上显示。
元素的浮动是指设置了浮动属性的元素会脱离标准普通流的控制,移动到其父元素中指定位置的过程。
在CSS中,通过float属性来定义浮动,其基本语法格式如下:
选择器{float:属性值;}
属性值 | 描述 |
---|---|
left | 元素向左浮动 |
right | 元素向右浮动 |
none | 元素不浮动(默认值) |
display: inline-block; 转换为行内块元素 就可以放一行上 有宽度高度 但是 元素之间有空隙 不方便处理
浮动详细内幕特性
浮动脱离标准流,不占位置。漂在标准流的上面,压住标准流。浮动只有左右浮动。
浮动的元素总是找离它最近的父级元素对齐。但是不会超出内边距的范围。
两个盒子都浮动,则盒子会顶对齐。
第一个盒子不浮动 第二个盒子浮动,第二个盒子会跑到下一行,和第一个盒子的底部对齐。
一个父盒子里面的子盒子,如果其中一个子级有浮动的,则其他子级都需要浮动。这样才能一行对齐显示。
元素添加浮动后,元素会具有行内块元素的特性(可以一行可以放多个元素,有宽度与高度)。元素的大小完全取决于定义的大小或者默认的内容多少,浮动根据元素书写的位置来显示相应的浮动。
版心和布局流程
“版心”(可视区) 是指网页中主体内容所在的区域。一般在浏览器窗口中水平居中显示,常见的宽度值为960px、980px、1000px、1200px等。
相同的样式,使用并集选择器,减少繁琐的代码,更加简洁。
- {
margin: 0;
padding: 0; /* 清除内外边距 css 第一讲句话 */
}
margin: 0 auto; 可以让盒子居中对齐 只要保证 左右auto就阔以了
布局流程
为了提高网页制作的效率,布局时通常需要遵守一定的布局流程,具体如下:
1、确定页面的版心(可视区)。
2、分析页面中的行模块,以及每个行模块中的列模块。
3、制作HTML结构 。
4、CSS初始化,然后开始运用盒子模型的原理,通过DIV+CSS布局来控制网页的各个模块。
一列固定宽度且居中
最普通的,最为常用的结构
两列左窄右宽型
外面套着一个div盒子如960px
两列都加上float: left;
想要中间加上8px 则左边宽度300px 右边652px
通栏平均分布型
列表 list-style: none; 取消列表的默认样式小点
通栏的盒子,可以不用写宽度,默认的宽度与浏览器的一样宽
清除浮动
为什么要清除浮动
准确地说,并不是清除浮动,而是清除浮动后造成的影响
清除浮动本质
很多情况下,我们父级盒子,不方便给高度 考虑孩子高度会变
清除浮动主要为了解决父级元素(不写高度)因为子级浮动(不占位置,浮动)引起内部高度为0(下面的盒子会跑上面) 的问题。
清除浮动的方法
在CSS中,clear属性用于清除浮动,其基本语法格式如下:
选择器{clear:both;}
both 同时清除左右两侧浮动的影响
额外标签法
是W3C推荐的做法是通过在浮动元素末尾添加一个空的标签例如 <div style=”clear:both”></div>,或则其他标签br等亦可。
优点: 通俗易懂,书写方便
缺点: 添加许多无意义的标签,结构化较差。 我只能说,w3c你推荐的方法我不接受,你不值得拥有。。。
父级添加overflow属性方法
可以通过触发BFC的方式,可以实现清除浮动效果。(BFC后面讲解)
可以给父级添加: overflow为 hidden|auto|scroll 都可以实现。
优点: 代码简洁
缺点: 内容增多时候容易造成不会自动换行导致内容被隐藏掉,无法显示需要溢出的元素。
使用after伪元素清除浮动
:after 方式为空元素的升级版,好处是不用单独加标签了
使用方法:
.clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; }
.clearfix {*zoom: 1;} /* IE6、7 专有 */
优点: 符合闭合浮动思想 结构语义化正确
缺点: 由于IE6-7不支持:after,使用 zoom:1触发 hasLayout。
注意: content:"." 里面尽量跟一个小点,或者其他,尽量不要为空,否则再firefox 7.0前的版本会有生成空格。
clearfix是类名,在需要清除浮动的选择器后面加上这个类名
使用before和after双伪元素清除浮动(推荐)
使用方法:
.clearfix:before,.clearfix:after {
content:"";
display:table; /* 这句话可以出发BFC BFC可以清除浮动,BFC我们后面讲 */
}
.clearfix:after {
clear:both;
}
.clearfix {
*zoom:1;
}
优点: 代码更简洁
缺点: 由于IE6-7不支持:after,使用 zoom:1触发 hasLayout。
代表网站: 小米、腾讯等