浮动、定位

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

1.窗体自上而下分成一行行, 并在每行中按从左至右的顺序排放元素,即为文档流.
2.脱离文档流:使用定位或浮动

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

三种基本的定位机制:普通流(文档流)、浮动和绝对定位

  • 普通流:
    除非专门指定,否则所有框都在普通流中定位。也就是说,普通流中的元素的位置由元素在 (X)HTML 中的位置决定。
    块级框从上到下一个接一个地排列,框之间的垂直距离是由框的垂直外边距计算出来。
    行内框在一行中水平布置。可以使用水平内边距、边框和外边距调整它们的间距。但是,垂直内边距、边框和外边距不影响行内框的高度。由一行形成的水平框称为行框(Line Box),行框的高度总是足以容纳它包含的所有行内框。不过,设置行高可以增加这个框的高度。
  • 定位:通过使用 position 属性,我们可以选择 4 种不同类型的定位
属性 描述
static 默认值。没有定位,元素出现在正常的流中(忽略 top, bottom, left, right 或者 z-index 声明)。
relative 相对定位是“相对于”元素在文档中的初始位置进行定位,使用相对定位时,无论是否进行移动,元素仍然占据原来的空间。因此,移动元素会导致它覆盖其它框
absolute 相对于 static 定位以外的第一个父元素进行定位。元素的位置通过 "left", "top", "right" 以及 "bottom" 属性进行规定,绝对定位使元素的位置与文档流无关,因此不占据空间
fixed 生成绝对定位的元素,相对于浏览器窗口进行定位。元素的位置通过 "left", "top", "right" 以及 "bottom" 属性进行规定。对于定位元素,z-index值越大优先级越高

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

  • absolute:相对于 static 定位以外的第一个父元素进行定位, 前提是父元素是定位元素,如果父元素不是定位元素,那么就按照嵌套关系逐级向上寻找,直到根节点(视窗)进行定位。
    如图,灰色盒子没有设置相对定位时,2号盒子相对于页面定位,.box设置相对定位时,2号盒子相对于灰色盒子定位
  • fixed:fixed属性值相对于浏览器视窗进行定位
    如图,红色边框盒子设置fixed属性,相对于浏览器定位
  • relative:相对定位是“相对于”元素在文档中的初始位置进行定位
    如图,2号盒子相对于它的初始位置进行定位


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

  • z-index 属性设置元素的堆叠顺序。拥有更高堆叠顺序的元素总是会处于堆叠顺序较低的元素的前面。
  • 元素可拥有负的 z-index 属性值。
  • Z-index 仅能在定位元素上奏效(例如 position:absolute;)
    如图,原先3号盒子覆盖2号盒子,3号盒子默认z-index值为0,设置2号盒子z-index属性为1时,2号盒子覆盖了3号盒子


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

position:relative元素发生偏移时,初始空间还被占据着。而负margin不再占据初始空间。也就是说,margin设置负值,不但改变了元素本身,还改变了周围其他元素的布局。
如图,设置2号盒子的position:relative属性,left为20px,1号盒子和3号盒子不受影响

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

<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style media="screen">
.box {
        width: 550px;
        height: 550px;
        border: 1px solid;
        background-color: #ccc;
    }
        .box1 {
            width: 50px;
            height: 50px;
            border: 1px solid red;
            background-color: red;
        }
        .box2 {
            width: 50px;
            height: 50px;
            border: 1px solid blue;
            background-color: blue;
            position: relative;
            left: 20px;
        }
        .box3 {
            width: 50px;
            height: 50px;
            border: 1px solid green;
            background-color: green;
        }
    </style>
</head>

<body>
<div class="box">
    <div class="box1">1</div>
    <div class="box2">2</div>
    <div class="box3">3</div>
  </div>
</body>

</html>

如图,设置2号盒子margin:-20px,1号盒子和3号盒子均受影响

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

<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style media="screen">
    .box {
        width: 550px;
        height: 550px;
        border: 1px solid;
        background-color: #ccc;
    }
        .box1 {
            width: 50px;
            height: 50px;
            border: 1px solid red;
            background-color: red;
        }
        .box2 {
            width: 50px;
            height: 50px;
            border: 1px solid blue;
            background-color: blue;
          margin: -20px;
        }
        .box3 {
            width: 50px;
            height: 50px;
            border: 1px solid green;
            background-color: green;

        }
    </style>
</head>

<body>
  <div class="box">


    <div class="box1">1</div>
    <div class="box2">2</div>
    <div class="box3">3</div>

  </div>
</body>

</html>

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

.box1 { 
width: 50px; 
height: 50px; 
border: 1px solid ;
background-color:red;
 position: absolute; 
left: 50%; top: 50%;
 margin-left: -25px; 
margin-top: -25px;
}

利用position: absolute;将元素脱离文本流,然后设置left: 50%; top: 50%;从而使元素的左上角点位于页面中点,最后通过调节元素的margin值(左上各负一半)将元素居中。


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

  • 浮动的框可以左右移动,直至它的外边缘遇到包含框或者另一个浮动框的边缘
  • 浮动框不属于文档中的普通流,顾名思义,就是漂浮于普通流之上,像浮云一样,但是只能左右浮动,文档中的普通流就会表现得和浮动框不存在一样
  • 当一个元素浮动之后,不会影响到块级框的布局而只会影响内联框(通常是文本)的排列
  • 当浮动框高度超出包含框的时候,也就会出现包含框不会 自动伸高来闭合浮动元素(“高度塌陷”现象)
    如图,1号盒子(红色)设置浮动后不占据原有空间,2号和3号盒子向上移动



    如图,设置所有的盒子左浮动,将按顺序从左开始排列


如图,设置浮动对文字造成影响,形成文字环绕

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

浮动元素引起的问题:

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

使用CSS中的clear:both;属性来清除元素的浮动可解决2、3问题。


如图,对 p标签设置clear:right,清除浮动,这时文字不再环绕图片

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、文档流的概念指什么?有哪种方式可以让元素脱离文档流? 1、文档流指的是元素在排列布局中所占用的位置,具体的说是...
    鸿鹄飞天阅读 806评论 0 0
  • 一,浮动元素有什么特征?对父容器、其他浮动元素、普通元素、文字分别有什么影响? 浮动模型是一种可视化格式模型,浮动...
    DeeJay_Y阅读 907评论 0 4
  • 浮动元素有什么特征?对父容器、其他浮动元素、普通元素、文字分别有什么影响? 特征: 1、浮动元素会脱离正常的文档流...
    我要认真学前端阅读 2,800评论 0 5
  • 学习建议 定位、浮动是 CSS 核心知识点,必须熟练掌握。 1.文档流的概念指什么?有哪种方式可以让元素脱离文档流...
    饥人谷_任磊阅读 1,126评论 0 3
  • 夜深人静的时候不是我想家的时候,却是最想你的时候。刚刚收拾完衣服,有一件你给我买的红色的长袖衬衣,想起来有一张照片...
    孙有腾阅读 260评论 0 0