浮动与定位

浮动

float属性最初只是用于浮动图像内的文本块,但是现在它已成为在网页上创建多列布局的最常用工具之一。当元素设置浮动属性后,会脱离正常文档流,从而影响到其他元素在页面上的布局排列,先不要着急,总会有好的解决办法。本文将阐述它的有关知识。

浮动的起源

最初,引入float属性是为了能让web开发人员实现简单的布局,包括在一列文本中浮动的图像,文字环绕在他的左边或右边。通常在报纸上可以看到这样的布局。

但web开发人员很快意识到,它可以浮动任何东西,不仅仅是图像,所以浮动的使用范围扩大了。

现在,浮动通常用来创建整个网站的布局,其中包括浮动多列信息,因此他们彼此并排放置(默认行为是列彼此之间的排列顺序和它们在html源中)。浮动的兼容性很好,可以支持到IE4。

浮动的特征

  • 浮动元素会脱离普通文档流,沿着容器的左侧和右侧放置,碰到另一个浮动元素时或容器边缘会停下来。行内元素使用float属性后,具有块级元素的特征,可以对其设置宽高及margin(块级元素与行内元素有什么区别中有相关介绍)。
    普通/正常文档流:
    浏览器根据元素在HTML中出现的位置读取,再按照元素的和模型呈现,具体表现为块级元素从上至下、行内元素在每行中按照从左至右的依次摆放元素。每个元素都会再HTML中占据一个位置,占用的大小和位置由盒模型来决定。

    从图中可以看到,当我们给box1设置右浮动后,box1就脱离了普通文档流,下面的块元素依次上移占据了box1原有的位置。它造成的一个常见后果就是:其父容器(元素)将得不到脱离普通文档流的子元素高度;即当元素设置了浮动后,它的父元素高度会塌陷。
  • 如果没有足够的空间可供浮动,这个浮动元素会跳到下一行,直到有足够的空间位置。

    从图中可以看到浮动元素依次排列,但当位置不够box3的宽度时,box3会在下一行可以容纳其宽度的位置浮动。且浮动元素之间不会产生重叠,说明:相同级别的浮动元素很安全,不用担心会与其它同级别元素相互重叠。而利用position定位的时候很容易出现元素相互覆盖的情况
  • 设置了浮动元素,会将display属性设置为block。宽度默认为auto,也就是说假如不指明宽度,它的宽度会尽可能的小。请看下面实例:

浮动的影响

  • 对父元素的影响
    元素浮动后脱离正常文档流,无法撑开父元素(容器),会影响父元素的宽高。
  • 对子元素的影响
    假如某个浮动元素没有设置宽高,那么这个浮动元素的宽高取决于子元素所撑开的宽高。(包含了子元素是浮动元素的情况)
  • 对其他浮动元素的影响
    在父容器中排列时,宽高会影响其他浮动元素的排列。
  • 对其它普通元素的影响
    浮动元素会将块级元素覆盖,而行内元素会围绕浮动元素。(详细可参照块级元素与行内元素有什么区别)
    对行内元素的影响
  • 对文字的影响
    和行内元素一样,文字会围绕着浮动元素。

如何清除浮动

清除浮动指什么:清除浮动元素脱离普通文档流后造成父容器高度坍塌对其他元素产生的影响。
为什么要清除浮动?
  1. 对后续元素位置产生影响


    问题一
  2. 父容器高度计算出现问题


    问题二
清除浮动的方法

先介绍一种:
给包含浮动元素的容器设置 clearfix

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

问题一被解决:



问题二被解决:


聊一聊定位

有几种定位方式?
  • 正常文档流(Normal Flow)
    是浏览器默认的文档布局方式,可以通过设置position属性的值来覆盖默认样式
    • top
    • left
    • righT
    • bottom
  • 静态定位
    position: static; 默认布局方式。
  • 相对定位
    position: relative; 相对默认布局位置进行定位。
    如果对一个元素进行相对定位,它将出现在它所在的位置上。然后,可以通过设置垂直或水平位置,让这个元素“相对于”它的起点进行移动。
    如果将 top 设置为 20px,那么框将在原位置顶部下面 20 像素的地方。如果 left 设置为 30 像素,那么会在元素左边创建 30 像素的空间,也就是将元素向右移动。
.box {
      position: relative;
      left: 300px;
      top: 200px;
    }

对框2设置相对定位

注:在使用相对定位时,无论是否进行移动,元素仍然占据原来的空间。因此,移动元素会导致它覆盖其它框。

  • 绝对定位
    position: absolute; 绝对定位元素脱离正常文档流,相对其定位上下文(Positioning Context)进行定位。设置为绝对定位的元素会从普通文档流中完全删除,就好像该元素之前完全不存在一样,因为已经与普通文档流中的元素不在同一个z-index层面上。元素定位后生成一个块级框,而不论原来它在普通文档流中生成何种类型的框。
    定位上下文:指的是绝对定位元素相对于哪个元素定位,默认的定位上下文是<html>
    注:设置绝对定位后,会覆盖其它非定位元素,可以使用z-index来改变层级。
    z-index:z-index属性设置元素在y轴上的层叠顺序。z-index: 的值默认为auto,设置值为数字,设置的值越大,越靠近显示屏前的我们。当元素z-index的值相同时,文档流中靠后的元素会覆盖前面的元素。
    注:使用z-index必须保证元素的样式中含有定位方式
  • 固定定位
    position: fixed; 相对浏览器窗口进行定位。因此当滚动产生时,固定定位元素依然处于窗口的某个固定位置。
  • 粘性定位
    position: sticky; 是相对定位和固定定位的结合。默认情况表现为相对定位,当浏览器窗口顶端与元素的距离等于top属性值时,转变为固定定位。
    可以参考:Macbook Pro产品导航栏
  • 浮动定位
    float 属性定义元素在那个方向浮动。以往这个属性总应用于图像,使文本围绕在图像周围,不过在 CSS 中,任何元素都可以浮动,在值不为none的情况下,浮动定位与绝对定位一样会脱离普通文档流。
    可能的值:left/right/none/inherit

参考资料:

w3school.com.cn
MDN float
再议浮动

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,752评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,100评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,244评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,099评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,210评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,307评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,346评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,133评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,546评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,849评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,019评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,702评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,331评论 3 319
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,030评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,260评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,871评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,898评论 2 351

推荐阅读更多精彩内容

  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 13,744评论 1 92
  • 一、浮动元素有什么特征?对父容器、其他浮动元素、普通元素、文字分别有什么影响? 特征:1、浮动模型是一种可视化格式...
    青鸣阅读 981评论 0 0
  • 一.文档流的概念指什么?有哪种方式可以让元素脱离文档流? 文档流是指元素在排列布局中所占用的位置。具体来说就是页面...
    婷楼沐熙阅读 1,796评论 3 9
  • 1 ,文档流的概念指什么?有哪种方式可以让元素脱离文档流? 文档流指的是元素没有浮动和绝对定位是的正常的布局方式。...
    春木橙云阅读 338评论 0 1
  • 我醒来的时候,正赶上早上八九点钟的太阳。 我看到阳光正纠缠在玻璃窗的一抹油污上,折射出绚丽而又耀眼的光芒,这肮脏的...
    鲜于车前草阅读 1,374评论 1 16