浮动、定位

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

答:

  • 文档流就是按照文档的顺序出现,自上而下自左往右的进行排列,块级元素与行内元素都遵循自己的排版方式来进行排列,这种方式就叫做文档流。
  • 脱离文档流就是将一个元素从普通的布局排版中拿走,在原布局排版中的其他元素会当做脱离元素不存在而进行定位。
  • 使用float、fixed、absolute可以脱离文档流
  • float可以脱离文档流,在脱离文本流时其他元素的盒子会挤占脱离元素的空间,但是盒子的内容会给元素让出位置,围绕在其周围。
  • 当使用absolute和fixed进行定位时,其他元素的盒子和盒子内的内容都会无视脱离元素。
2.有几种定位方式,分别是如何实现定位的,使用场景如何?

答:
CSS中有4种方式:

属性
static 默认值,没有定位,元素出现在正常的流中(忽略 top, bottom, left, right 或者 z-index 声明)
relative 生成相对定位的元素,相对于元素本身正常位置进行定位,因此,left:20px会向元素的 left 位置添加20px
absolute 生成绝对定位的元素,相对于static定位以外的第一个祖先元素(offset parent)进行定位,元素的位置通过 left, top, right 以及 bottom属性进行规定
fixed 生成绝对定位的元素,相对于浏览器窗口进行定位。元素的位置通过 left, top, right以及 bottom 属性进行规定

DEMO:


<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>定位的demo</title>
  <style>
    .ct{
      width:500px;
      height:500px;
      border:1px solid;
      margin:50px;
    }
    .box{
      width:100px;
      height:100px;
      border:1px solid;
    }
    .box:nth-child(1){
      background:red;
      position:relative;
      left:100px;
      top:30px
    }
    .box:nth-child(2){
      background:#00ff00;
      position:fixed;
      top:500px;
      left:600px;
    }
    .box:nth-child(3){
      background:#0000ff;
      position:absolute;
      top:150px;
      left:300px;
    }
  </style>
</head>
<body>
  <div class="ct">
    <div class="box">relative</div>
    <div class="box">fixed</div>
    <div class="box">absolute</div>
  </div>

</body>
</html>````
效果图:
![](http://upload-images.jianshu.io/upload_images/2487339-15e90421b9901d1d.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
- 由此我们可以看到fixed是脱离于父元素之外的,一直占据着浏览器的一定空间,这就是脱离文档流的定位,一般fixed可以用来定位网页弹窗、广告、提示消息等等(原来我们所看到的烦人的广告都是这么来的哈哈!)
- 我们可以看到relative元素是相对于自身原来的位置进行定位的,而且与父元素的位置有关,给父元素设置了margin后它也会随之移动。
- absolute会不断的寻找一个已经定位的父元素进行定位,但是在demo中我们并没有给ct进行任何定位,所以元素absolute找到了我们的根节点进行定位。
如果我们给ct加入`<position:relative>`那么就会发生下图情况
![搜狗截图16年07月25日1647_2.png](http://upload-images.jianshu.io/upload_images/2487339-5e4372d858bee8df.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
对,absolute就会偏移出`<margin:50px>`的距离 也就是相对于ct元素进行定位了。

#####3.absolute, relative, fixed偏移的参考点分别是什么?
答:
- absolute偏移的参考点是具有position属性的最近的祖先元素。
- relative偏移的参考点是元素本身的初始位置。
- fixed偏移的参考点是浏览器窗口。

#####4.z-index 有什么作用? 如何使用?
答:相当于在一个二维的页面的第三个轴,用于区别元素的层级。层级的值越大,也就越靠在上面。
使用方法:z-index只对有position的元素有效,数值越大越在上面,也可以采用负值。
demo:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>z-index的demo</title>
<style>
.ct{
width:500px;
height:500px;
border:1px solid;
margin:50px;
position:relative;
}
.box{
width:100px;
height:100px;
border:1px solid;
}
.box:nth-child(1){
background:red;
position:relative;

}
.box:nth-child(2){
  background:#00ff00;
  position:absolute;
  top:25px;
  left:25px;
}
.box:nth-child(3){
  background:#00ffff;
  position:absolute;
  top:50px;
  left:50px;
}

</style>
</head>
<body>
<div class="ct">
<div class="box">relative</div>
<div class="box">fixed</div>
<div class="box">absolute</div>
</div>

</body>
</html>

效果图:

![搜狗截图16年07月25日1659_3.png](http://upload-images.jianshu.io/upload_images/2487339-c642a987247f47e3.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
如果我们对child(1)加入`<z-index:1>`则会变成
![搜狗截图16年07月25日1702_4.png](http://upload-images.jianshu.io/upload_images/2487339-5791c7d2fd20cc6b.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

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

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>margin负值与position:relative的demo</title>
<style>
.ct{
width:500px;
height:500px;
border:1px solid;
margin:50px;
position:relative;
}
.box{
width:100px;
height:100px;
border:1px solid;
}
.box:nth-child(1){
background:red;
position:relative;
z-index:2;

}
.box:nth-child(2){
  background:#00ff00;
  margin:-20px;
}
.box:nth-child(3){
  background:#ffff00;
  
  
}

</style>
</head>
<body>
<div class="ct">
<div class="box">relative</div>
<div class="box">fixed</div>
<div class="box">fixed</div>

</div>

</body>
</html>

当对child(2)使用`<margin:-20px>`时 它的表现如下:

![搜狗截图16年07月25日1721_5.png](http://upload-images.jianshu.io/upload_images/2487339-34314dba2594bed5.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
当我们设置:``position:relative;
      top:-20px;
      left:-20px;``
会变成下图:

![搜狗截图16年07月25日1723_6.png](http://upload-images.jianshu.io/upload_images/2487339-cb6e8e72f102409e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
所以当设置为`<position:relative>`时它只影响自身并不会对底下的元素造成影响,而`<margin>`会使底下的元素跟着变动。

#####6.如何让一个固定宽高的元素在页面上垂直水平居中?
答:先使用绝对定位absolute将上左的值定位50%,此时元素的左上角处于正中心位置再使用margin负值元素宽高的一半,就可以使该元素垂直水平居中了。

![搜狗截图16年07月25日1749_7.png](http://upload-images.jianshu.io/upload_images/2487339-1d0dabaaf3347215.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

#####7.浮动元素有什么特征?对其他浮动元素、普通元素、文字分别有什么影响?
答:浮动元素特征:
- 浮动元素会脱离文档流,并且后面的浮动元素会跟着前面的浮动元素浮动,直到碰到浮动元素的边,后面的普通元素会自动占据浮动元素原来的位置,但是元素里的内容不会走。
- 浮动元素是针对块级元素的,当父容器不能同时容纳3个浮动的子元素时,第三个子元素会自动下移。
demo:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>浮动元素</title>
<style>
.ct{
width:500px;
height:500px;
border:1px solid;
margin:50px;

}
.box{
  width:100px;
  height:100px;
  border:1px solid;
}

.box:nth-child(1){
background:red;
float:left;
}
.box:nth-child(2){
background:#00ff00;
float:left;
}
.box:nth-child(3){
background:#ffff00;
float:right;
}
</style>
</head>
<body>
<div class="ct">
<div class="box">relative</div>
<div class="box">fixed</div>
<div class="box">fixed</div>
</div>
</body>
</html>


![搜狗截图16年07月25日1814_8.png](http://upload-images.jianshu.io/upload_images/2487339-66a9ac6ac0fa30cd.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
由此可以看出浮动元素可以使块级元素并排在一行中,浮动元素之间是跟进的关系,直到碰到同级元素的边缘或者父元素的边缘才停止。

![搜狗截图16年07月25日1819_9.png](http://upload-images.jianshu.io/upload_images/2487339-515235b34be4e816.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
由此可以看出浮动元素不会占据文字的空间且文字围绕着浮动元素边缘排列。


![搜狗截图16年07月25日1821_10.png](http://upload-images.jianshu.io/upload_images/2487339-d1d50e19c963323d.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
由此可以看出对普通元素的影响:浮动元素脱离文档流,普通元素会占据浮动元素原来的空间,但是普通元素内的元素不会跟着普通元素。

#####8.清除浮动指什么? 如何清除浮动?
答:元素浮动了会使元素脱离文档流,对没有浮动的元素和父元素会造成影响,也会对文字排版产生影响,所以要清除浮动。
demo:使用`clear:both`清除浮动

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>清除浮动</title>
<style>
.ct{
border:1px solid;
margin:50px;
}
.box{
width:100px;
height:100px;
border:1px solid;
}
.box:nth-child(1){
background:red;
float:left;
margin-left:50px;
}
.box:nth-child(2){
background:#00ff00;
float:left;
}
.box:nth-child(3){
background:#ffff00;
float:left;
clear:both;
}

</style>
</head>
<body>
<div class="ct">
<div class="box">relative</div>
<div class="box">fixed</div>
<div class="box">fixed</div>

</div>

</body>
</html>

效果图:
![搜狗截图16年07月25日1911_11.png](http://upload-images.jianshu.io/upload_images/2487339-c2827a9eb1d6dbb4.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
当我们将3号box清除浮动时,3号元素会自己跑到下面去,所以清除浮动只对自己有效,不会影响其他元素。

如果我们需要让父元素包裹浮动元素,那么我们需要使用伪类选择器`:after`
例 .`ct:after {
 content: "";
 display:block;
 clear: both;
}`
![搜狗截图16年07月25日1918_12.png](http://upload-images.jianshu.io/upload_images/2487339-4a8832e264bc4dfe.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

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

推荐阅读更多精彩内容

  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 13,703评论 1 92
  • 一、文档流的概念指什么?有哪些方式可以让元素脱离文档流? 文档里指元素在文档中的位置由元素在html里的位置决定,...
    dengpan阅读 525评论 0 3
  • 学习建议 定位、浮动是 CSS 核心知识点,必须熟练掌握。 1.文档流的概念指什么?有哪种方式可以让元素脱离文档流...
    饥人谷_任磊阅读 1,050评论 0 3
  • relative:生成相对定位的元素,通过top,bottom,left,right的位置相对于其正常位置进行定位...
    zx9426阅读 927评论 0 2
  • 一、文档流的概念指什么?有哪种方式可以让元素脱离文档流? 1、文档流指的是元素在排列布局中所占用的位置,具体的说是...
    鸿鹄飞天阅读 752评论 0 0