浮动与定位

CSS有三种基本的定位机制:普通流(文档流),定位和浮动

  • <strong>普通流</strong>:普通流中元素框的位置由元素在 XHTML 中的位置决定。块级元素从上到下依次排列,框之间的垂直距离由框的垂直 margin 计算得到。行内元素在一行中水平布置。
  • <strong>定位</strong>:
    ① <strong>无定位(position:static)</strong>:默认值。没有定位,元素出现在正常的流中(忽略 top,bottom,left,right 或者 z-index 的声明)

定位前.png

② <strong>相对定位(position:relative)</strong>:定位元素的位置相对于它在普通流中的位置进行移动。使用相对定位的元素<u>不管它是否进行移动,元素仍占据它原来的位置(空间)</u>,但移动元素会使该元素覆盖其他的框。如"left:20px”会向元素的 LEFT 位置添加 20 像素。
下面我给了一个例子,可以发现在定位前后,粉框所占据的空间并没有改变,但是粉框覆盖到了黄框上。

定位后.png

③ <strong>绝对定位(position:absolute)</strong>:绝对定位的元素位置是相对于距离他最近的那个<u>已经定位的父级元素(相对/绝对)来决定的</u>。如果自身父级元素没有定位,则往更上级的有定位的父级元素,如果元素没有已定位的祖先元素,那么他的位置就相对于初始包含块儿(body 或html 类似的)元素。以此类推。<u>绝对定位使元素与文档流无关, 因此不占据空间</u>。
普通文档流中其他的元素的布局不受绝对定位元素的影响。就等同于绝对定位的元素不存在一样。
ps: 由于绝对定位的元素脱离普通流,所以它可以覆盖页面上的其他元素,可以通过设置 z-Iindex 属性来控制这些框的堆放次序。
下面我举了一个例子,我们可以看到对粉框定位后,它下面的黄框上移占据了粉框原本的位置, 仿佛粉框不存在一般。

定位后2.png

④ <strong>固定定位(position:fixed)</strong>:固定定位是绝对定位的一种,相对于浏览器窗口进行定位。元素的位置通过 "left", "top", "right" 以及 "bottom" 属性进行规定。固定定位的元素也不包含在普通文档流中,差异是固定元素的包含块儿是视口(viewport)。

  • <strong>浮动</strong>:浮动的框可以向左或向右移动,直到它的外边缘碰到包含框或另一个浮动框的边框为止。 <u>由于浮动框不在文档的普通流中,所以文档的普通流中的块框表现得就像浮动框不存在一样</u>。
    如果包含块太窄,无法容纳水平排列的浮动元素,那么其他浮动元素向下移动,直到有足够多的空间。如果浮动元素的高度不同,那么当它们向下移动时可能会被其他浮动元素卡住。
    行内元素会围绕着浮动框排列。例子如下图:
浮动的参考示例.png

参考:CSS中的三种基本的定位机制(普通流、定位、浮动)


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

  • 文档流中的元素的位置由元素在 (X)HTML 中的位置决定。
  • 通过定位与浮动的方法可以让元素脱离文档流。

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

<strong>共有四种定位方式</strong>:普通流,相对定位,绝对定位和固定定位。

  • 相对定位(position:relative):定位元素的位置相对于它在普通流中的位置进行移动。用于
  • 绝对定位(position:absolute):绝对定位的元素位置是相对于距离他最近的那个已经定位的父级元素(相对/绝对)来决定的。用于九宫格效果,整体布局等。
  • 固定定位(position:fixed):固定定位是绝对定位的一种,相对于浏览器窗口进行定位。用于广告栏之类的固定位置使用。

参考:CSS绝对定位的应用


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

  • absolute 参考点是相对于 static 定位以外的第一个已经定位的父级元素(相对/绝对)来决定的。
  • relative 参考点是相对于其正常位置进行定位。
  • fixed 参考点是相对于浏览器窗口进行定位。

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

z-index:针对网页显示中的一个特殊属性,为了表示三维立体的概念如元素的上下层的叠加顺序引入了 z-index 属性来表示 Z 轴。<strong>但其只对定位元素有效。</strong>下面是不同场景下的显示顺序:
① z-index 值:值较大的元素将叠加在 z-index 值较小的元素之上,正数值将叠加在负数值得对象上。
②相同 z-index 的叠加顺序:

  • 如果两个元素都没有定位发生位置重合现象或者两个都已定位元素且z-index 相同发生位置重合现象,那么按文档流顺序,后面的覆盖前面的。
  • 如果两个元素都没有设置z-index,使用默认值,一个定位一个没有定位,那么定位元素覆盖未定位元素。

③父子关系处理:

  • 如果父元素z-index有效,那么子元素无论是否设置z-index都和父元素一致,会在父元素上方,即使是子元素的 z-index 值比父元素小,也会出现在父元素上方。
  • 如果父元素z-index 失效(未定位或者使用默认值),那么定位子元素的 z-index 设置生效。

④兄弟之间子元素叠加顺序:由其父元素决定,父元素值高的叠加低的,不管子元素 z-index 值得大小。

参考:z-index 应用简单总结


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

position:relative 和负 margin 都可以使元素位置发生偏移。

  • position:relative 的偏移所产生的结果是该元素仍占据它原来的位置(空间),但移动元素会使该元素覆盖其他的框,也就是说不会影响整体的布局。
  • 负 margin 的偏移所产生的结果是带动该元素周围的元素一起移动,也就是该元素不占据原来的位置,而是真的发生了偏移改变了布局。

下面我给出了两个例子:

<!DOCTYPE html>
<html lang="en">

<head>
    <title>text10</title>
    <meta charset="UTF-8">
    <link href="css/style.css" rel="stylesheet">
    <style>
        .text1,
        .text3 {
            background-color: yellow;
            width: 150px;
            height: 100px;
            margin: 0;
        }
        
        .text2 {
            background-color: pink;
            margin-top: 3px;
            width: 150px;
            height: 100px;
            display: inline-block;
        }
    </style>
</head>

<body>
    <div class="text1"></div>
    <div class="text2"></div>
    <a href="#">这是一个链接</a>
    <div class="text3"></div>
</body>

</html>

在该代码的基础上我添加了 position:relative 命令,使其在左方与下方分别增加了-30px。结果如下图,我们可以发现 position:relative 命令所带来的结果并不会改变 a 链接的位置发生任何变化。

position:relative结果.png

在初始代码的基础上我又添加了负 margin 的命令,使其在左方与下方分别移动了 -30px。结果如下图,我们可以发现负 margin 命令所带来的结果不仅让 a 元素的位置发生的变化,使得下方的 div 黄框也上移了。

负margin结果.png

<strong>总结</strong>:position:relative 的偏移不会带动周围元素的偏移,因为其元素仍占据该元素本来的位置。而负 margin 的偏移会带来周围元素的偏移。


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

利用 position:absolute 与负 margin 来实现。具体如下代码:

<!DOCTYPE html>
<html lang="en">
    <head>
        <title>text10</title>
        <meta charset="UTF-8">
        <link href="css/style.css" rel="stylesheet">
        <style>
        .ct{
            position: relative;
            height: 500px;
            background-color: #eee;
        }
        .box{
            position: absolute;
            top: 50%;
            left: 50%;
            margin: -50px;
            width: 100px;
            height: 100px;
            background: pink;
        }
        </style>
    </head>
    <body>
        <div class="ct">
            <div class="box"></div>
        </div>
    </body>
</html>
垂直水平居中原理.jpg

所以我们得到如下图的结果,有宽高的 div 垂直水平居中了。

div垂直水平居中.png

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

浮动模型也是一种可视化格式模型,浮动的框可以左右移动(根据float属性值而定),直到它的外边缘碰到包含框或者另一个浮动元素的框的边缘。浮动元素不在文档的普通流中,文档的普通流中的元素表现的就像浮动元素不存在一样。
对于不同的情况我举了几个例子:

  • 正常形况下不浮动如下图。
正常情况.jpg
  • 第一个框向右浮动,第二个框会顶上它的位置,效果如图。
box1 向右浮动.jpg
  • 第一个框向左浮动,因为 box1 脱离文档流,z-index值高,所以覆盖 box2。效果如图。
box1 向左浮动 覆盖 box2.jpg
  • 三个框均向左浮动,在包含快空间足够的情况下依次排列,否则包含块太窄无法容纳水平排列三个浮动元素,那么其他浮动块向下移动。两个效果如下图。
三块均左移(父级宽度足够).jpg
三块均左移(父级宽度不足).jpg
  • 若浮动元素的高度不同,那么向下移动的时候可能会被卡住。效果如图。
浮动元素的高度不同.jpg
  • 浮动会让元素脱离文档流,不影响不浮动元素。效果如图。
浮动元素不影响不浮动元素.jpg
  • 如果浮动的元素后面有一个文档流中元素,那么这个元素的框会表现的像浮动元素不存在,但是框的文本内容会受到浮动元素的影响,会移动以留出空间,也就是常见的文字环绕。效果如图。
文字环绕现象代码.jpg

参考:课件-浮动


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

浮动元素引起的问题:

  • 父元素的高度无法被撑开,影响与父元素同级的元素
  • 与浮动元素同级的非浮动元素会跟随其后
  • 若非第一个元素浮动,则该元素之前的元素也需要浮动,否则会影响页面显示的结构

清楚浮动实际上为前面的浮动元素留出了垂直空间,也可以解决上面问题中的第二个问题与第三个问题。

语法:clear : none | left | right | both

  • none:默认值。允许两边都可以有浮动对象
  • left:不允许左边有浮动对象
  • right:不允许右边有浮动对象
  • both:不允许有浮动对象

清除浮动的应用我们可以直接从上个问题中的文字环绕来解答。在我们没有清楚浮动时,我们的文字是围绕着浮动元素,那么我们添加了去除浮动(代码如下),可以得到如下图结果。

<!DOCTYPE html>
<html lang="en">

<head>
    <title>text10</title>
    <meta charset="UTF-8">
    <link href="css/style.css" rel="stylesheet">
    <style>
        .ct {
            width: 300px;
            height: 300px;
            border: 2px solid #eee;
        }
        
        .box1 {
            float: left;
            height: 50px;
            width: 100px;
            background-color: pink;
        }
        
        .box2 {
            clear: both;
            height: 100px;
            width: 200px;
            background-color: yellow;
        }
        
    </style>
</head>

<body>
    <div class="ct">
        <div class="box1"></div>
        <div class="box2">
            如果浮动的元素后面有一个文档流中元素,那么这个元素的框会表现的像浮动元素不存在
        </div>
    </div>
</body>

</html>
清除浮动.png

<strong>本文版权归作者和饥人谷所有,转载请注明出处

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念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

推荐阅读更多精彩内容

  • 一.文档流的概念指什么?有哪种方式可以让元素脱离文档流? 文档流是指元素在排列布局中所占用的位置。具体来说就是页面...
    婷楼沐熙阅读 1,791评论 3 9
  • 一、浮动元素有什么特征?对父容器、其他浮动元素、普通元素、文字分别有什么影响? 特征:1、浮动模型是一种可视化格式...
    青鸣阅读 951评论 0 0
  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 13,725评论 1 92
  • 问答## 1 . 浮动的特征,影响##### 浮动模型也是一种可视化格式模型,浮动的框可以左右移动(根据float...
    mhy_web阅读 367评论 0 0
  • 这一天显得比较平静,但是燥热的天气烘干了我内心的狂热
    AA李海霞阅读 129评论 0 0