Float && Position-Assignment

1.文档流的概念指什么?有哪种方式可以让元素脱离文档流?

文档流(normal flow),也称为标准文档流、常规流、普通流等,是元素在html文档的定位方式之一,标准流的元素的位置由该元素在html中的位置所决定。主要表现形式是元素由上到下、由左到右依次排版布局。
总的来说,css的定位机制可分为:文档流、浮动和定位

  • 文档流:包括块级元素的块级格式、行内元素的行内格式

  • 浮动:浮动将元素从文档流中脱离出来,向左或向右浮动直至碰到另一元素的边框或边界才停止浮动;

  • 定位

    • 绝对定位:以父元素的左上角的顶点为参考点,进行定位,元素将脱离文档流
    • 相对定位:元素相对于自身所处的原来位置进行定位,元素不脱离文档流(相对定位可以说是特殊的文档流)

综上所述,通过浮动绝对定位机制都可使元素脱离文档流。

2.有几种定位方式,分别是如何实现定位的,使用场景如何?

css的定位机制包括:文档流、浮动和定位

  • 文档流
    文档流是默认的定位方式,实现方式是直接在标签内写入内容,html会自动排版布局。
    具体演示效果如下:
  • 浮动
    css浮动属性提供左浮或右浮两种属性值,元素的浮动规则是元素的边框浮动至包含框或另一个浮动框(必须是浮动着的元素)才停止,并且浮动元素将脱离文档流。
    浮动的基本原理如下:

出现上述的情况是:
当某个div遇到浮动元素的时候,会产生同一个div下内容和包裹它的盒子的分离,而盒子的内容则会环绕在浮动元素周围,解决方法在后面会提及。


此时,3个方块都是浮动元素,方块2左浮遇到方块1这浮动元素停止左浮,方块3同理。


同样是3个方块左浮,但是如果一行的宽度不足以让某个浮动元素容纳,则它会自动左浮至下一行。


如果,方块1过于高的话,那么它会自动挡住方块3的左浮线路。
浮动本来是为实现文字环绕而诞生的,但是后来开发者常将它用于页面的布局

  • 定位(position)
    定位可分为static、absolute、relative和fixed,下面主要讲解absolute、relative和fixed。
    • absolute是绝对定位,参考点是以已经定位的父元素的左上顶点

上图显示,方块2相对于已经定位的父元素实现绝对定位。

  • relative是相对定位,参考点是以元素所在的原来位置的左上顶点


上图显示,方块2相对于自己的原来位置发生top:10px; left:10px;的移动

  • fixed,参考点是浏览器的页面视窗的左上顶点


以上三个三种定位方式,fixed常用来放置开发者希望用户一直在浏览器能看到的固定区块,relative和absolute常用来精心精确布局

3.absolute, relative, fixed偏移的参考点分别是什么

  • absolute是绝对定位,参考点是以已经定位的父元素的左上顶点
  • relative是相对定位,参考点是以元素所在的原来位置的左上顶点
  • fixed,参考点是浏览器的页面视窗的左上顶点

4.z-index 有什么作用? 如何使用?

z-index是设置元素的堆叠顺序,拥有高堆叠顺序的元素总是会处于堆叠顺序较低的元素的前面。
注意,这里所指的是堆叠顺序而不是z-index的值的大小,并且z-index 仅能在定位元素上奏效

  • 堆叠顺序
    • 不对元素设position时,文档流后面的元素覆盖前面的元素;
    • 将元素设置的position设置为relative ,absolute 或者 fixed,元素会覆盖没有设置 position 属性或者属性值为 static 的元素
  • 当存在3个元素
<div id="a">
 <div id="a-1" style="position:relative;">A-1</div></div>
<div id="b">B</div>

A、B均没有设置position,但A的子元素A-1设置了,那么B会覆盖A,A-1会覆盖B

  • 在不存在父子关系的4个元素中,z-index最大的覆盖其余3个,z-index为0的和没设置position的堆叠关系遵循先后顺序,z-index为负数的位于z-index:0的后面
  • 存在父子关系情况下,子元素会继承父元素的堆叠关系


  • 若所有元素都定义了 position:relative, 并且A 元素的 z-index 和 B 元素一样大, 但因为顺序规则, B 元素覆盖在 A 元素前面. 就算 A 的子元素z-index 值比 B 的子元素大, B 的子元素还是会覆盖在 A 的子元素前面。

5.position:relative和负margin都可以使元素位置发生偏移?二者有什么区别

6.如何让一个固定宽高的元素在页面上垂直水平居中?

 .box{
  background:lightgreen;
  width:100px;
  height:100px;
  position:absolute;
  top:50%;
  left:50%;
  margin-left:-50px;
  margin-top:-50px;
}
/* 左外边距和上外边距分别设置成宽高的一半 */

具体效果如下:


7.浮动元素有什么特征?对其他浮动元素、普通元素、文字分别有什么影响?

浮动元素的特征:

  • 浮动元素将脱离文档流,不占据文档的空间
  • 添加浮动属性且不设置宽高,内容会将撑开盒子,类似inline-block


  • 设置宽高和float后,相当于悬浮的inline-block

    浮动元素对其他元素的影响:
  • 对浮动元素的影响,详见第2题浮动篇;
  • 对普通元素的影响,普通元素会占据浮动元素原来所在的文档位置;
  • 对文字而言,除了自身的文字外,其他元素中的文字一律环绕浮动元素周围;

8.清除浮动指什么? 如何清除浮动?

清除浮动是指对浮动元素所产生的影响其他元素的浮动效果予以清除,以期达到开发者期望的布局。
针对浮动产生的问题,清除浮动可以分为两种:

  • 浮动元素使得同级的非浮动元素紧随其后

可以在浮动元素中添加clear:left|right|both达到清除浮动,即不允许浮动元素的左侧、右侧或两侧出现其他浮动元素

  • 如果子元素是包裹在自适应宽高的父元素中,那么一旦该子元素浮动,父元素的高度会“塌陷”,因为父元素的高度就是子元素的高度,浮动使得子元素脱离文档流,让父元素认为子元素“不存在”了

方法:在父元素中添加clearfix样式,设计思想就是在父元素前或后加入一个内容为空的盒子,并设置这个盒子具有clear属性,从而使得前面的浮动元素“无处可逃”
具体代码如下:

.clearfix{
  overflow:hidden;
  *zoom:1; /* for ie 6*/
}

或者

.clearfix:before, .clearfix:after
{ content: ""; display: table;}
.clearfix:after{ clear: both;}
.clearfix
{ *zoom: 1; /* for ie 6,7*/}

demo


9.代码

代码地址:github
写出如下两栏布局, 其中中间区块宽度900px, 居中,左侧边栏宽度200px, 右侧边栏宽度700px

  • ps: 图片左浮动,导航栏整体右浮动,导航栏里面的li元素左浮动。
  • ps: aside左浮动,main左浮动
  • 凡是有浮动的地方,其直接父元素必须清除浮动

不使用背景图片实现如下效果


参考资料

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

推荐阅读更多精彩内容

  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 13,725评论 1 92
  • 浮动定位 BFC 边距合并 浮动元素 div的顺序是HTML代码中div的顺序决定的。 浮动可以理解为让某个div...
    nianxiaoge阅读 709评论 0 0
  • 一、文档流的概念指什么?有哪种方式可以让元素脱离文档流? 1、文档流指的是元素在排列布局中所占用的位置,具体的说是...
    鸿鹄飞天阅读 765评论 0 0
  • 学习CSS的最佳网站没有之一 http://www.w3school.com.cn/tags/index.asp ...
    Amyyy_阅读 1,023评论 0 1
  • “我们不设计页面,我们设计构成元素的系统。”——Stephen Hay 随着网页设计的持续发展,我们认识到开发设计...
    王小其阅读 8,595评论 6 26