class="hide-preCode-box">

偏移20px后:

在这里插入图片描述

虚线是初始的位置空间,现在看明白了吧,相对定位相对的是它原本在文档流中的位置而进行的偏移,而我们也知道relative定位也是遵循正常的文档流,它没有脱离文档流,但是它的top/left/right/bottom属性是生效的,可以说它是static到absoult的一个中间过渡属性,最重要的是它还占有文档空间,而且占据的文档空间不会随 top / right / left / bottom 等属性的偏移而发生变动,也就是说它后面的元素是依据虚线位置( top / left / right / bottom 等属性生效之前)进行的定位,这点一定要理解。

那好,我们知道了top / right / left / bottom 属性是不会对relative定位的元素所占据的文档空间产生偏移,那么margin / padding会让该文档空间产生偏移吗?答案是肯定的,我们一起来做个试验吧:

3、添加margin属性:

<style type="text/css">
    #first {
        width: 200px;
        height: 100px;
        border: 1px solid red;
        position: relative;
        top: 20px;
        left: 20px;
        /* add margin*/
        margin: 20px;
    }

    #second {
        width: 200px;
        height: 100px;
        border: 1px solid blue;
    }
style> 
 class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"> class="hide-preCode-box">

设置margin:20px后:

在这里插入图片描述

对比一下,是不是就很清晰了,我们先将first元素外边距设为20px,那么second元素就得向下偏移40px,所以margin是占据文档空间!

相对定位总结:

4、绝对定位 absolute(重点)

所谓绝对定位是元素在移动位置时,是相对于它祖先元素来说的。

使用absoult定位的元素脱离文档流后,就只能根据祖先类元素(父类以上)进行定位,而这个祖先类还必须是以postion非static方式定位的, 举个例子,a元素使用absoulte定位,它会从父类开始找起,寻找以position非static方式定位的祖先类元素(注意,一定要是直系祖先才算哦~),直到标签为止,这里还需要注意的是,relative和static方式在最外层时是以标签为定位原点的,而absoulte方式在无父级是position非static定位时是以作为原点定位。元素相差8px左右。原因是body有一个浏览器提供的默认样式margin:8px;

我们来看下效果:

添加absoulte属性:

<html> 
    <style type="text/css">
        html {
            border: 1px dashed green;
        }

        body {
            border: 1px dashed purple;
        }

        #first {
            width: 200px;
            height: 100px;
            border: 1px solid red;
            position: relative;
        }

        #second {
            width: 200px;
            height: 100px;
            border: 1px solid blue;
            position: absolute;
            top: 0;
            left: 0;
        }
    style> 

    <body> 
        <div id="first">relativediv> 
        <div id="second">absoultdiv> 
    body> 
html> 
 class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"> class="hide-preCode-box">

效果图:
在这里插入图片描述
在这里插入图片描述

绝对定位一般和相对定位一起使用(子绝父相)

示例代码:

DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>子绝父相title>
    <style>
        div {
            width: 100px;
            height: 100px;
            border: 1px solid black;
        }

        .nofather {
                /* 使用绝对定位 */
            position: absolute;
            top: 0;
            left: 100px;
        }

        .father {
            width: 200px;
            height: 200px;
            /* 父元素使用相对定位 */
            position: relative;
            left: 100px;
        }

        .son {
            /* 子元素使用绝对定位 */
            position: absolute;
            left: 50px;
            top: 30px;
        }
    style>
head>

<body>
    <div class="nofather">我没有父元素div>

    <h1>内容h1>
    <h1>内容h1>
    <h1>内容h1>
    <h1>内容h1>
    <div class="father">
        <div class="son">我有父元素div>
    div>
    <h1>内容h1>
    <h1>内容h1>
    <h1>内容h1>
    <h1>内容h1>
    <h1>内容h1>

body>

html>
 class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"> class="hide-preCode-box">

在这里插入图片描述

从运行结果上可以看出,使用绝对定位,如果没有父元素则是相对于html进行定位,如果有父元素,父元素需要使用相对定位,子元素使用绝对定位,子元素则会相对于父元素进行定位。并且使用绝对定位,元素会脱离文档流,后面的元素会自动进行填补。

绝对定位总结:

5、固定定位 fixed(重点)

固定定位相对于浏览器窗口,脱离文档流,使用fixed的元素不会随窗口的滚动而滚动

示例代码:

DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>固定定位title>

    <style>
        .fixed {
            width: 200px;
            height: 200px;
            background-color: aqua;

            /* 使用固定定位 */
            position: fixed;
            top: 50px;
            left: 300px;

        }
    style>
head>

<body>
    <div class="fixed">
    div>

    <h1>我是h的内容h1>
    <h1>我是h的内容h1>
    <h1>我是h的内容h1>
    <h1>我是h的内容h1>
    <h1>我是h的内容h1>
    <h1>我是h的内容h1>
    <h1>我是h的内容h1>
    <h1>我是h的内容h1>
    <h1>我是h的内容h1>
    <h1>我是h的内容h1>
    <h1>我是h的内容h1>
    <h1>我是h的内容h1>
    <h1>我是h的内容h1>
    <h1>我是h的内容h1>
    <h1>我是h的内容h1>
    <h1>我是h的内容h1>

body>

html>
 class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"> class="hide-preCode-box">

在这里插入图片描述

固定定位总结:

6、粘性定位 sticky

sticky 英文字面意思是粘,粘贴,所以可以把它称之为粘性定位。

position: sticky; 基于用户的滚动位置来定位。

粘性定位的元素是依赖于用户的滚动,在 position:relativeposition:fixed 定位之间切换。

它的行为就像 position:relative; 而当页面滚动超出目标区域时,它的表现就像 position:fixed;,它会固定在目标位置。

元素定位表现为在跨越特定阈值前为相对定位,之后为固定定位。

这个特定阈值指的是 top, right, bottom 或 left 之一,换言之,指定 top, right, bottom 或 left 四个阈值其中之一,才可使粘性定位生效。否则其行为与相对定位相同。

注意: Internet Explorer, Edge 15 及更早 IE 版本不支持 sticky 定位。 Safari 需要使用 -webkit- prefix (查看以下实例)。

示例代码:

DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>sticky 定位title>
        <style>
            div.sticky {
                position: -webkit-sticky;
                position: sticky;
                top: 0;
                padding: 5px;
                background-color: #cae8ca;
                border: 2px solid #4CAF50;
            }
        style>
    head>

    <body>
        <p>尝试滚动页面。p>
        <p>注意: IE/Edge 15 及更早 IE 版本不支持 sticky 属性。p>

        <div class="sticky">我是粘性定位!div>

        <div style="padding-bottom:2000px">
            <p>滚动我p>
            <p>来回滚动我p>
            <p>滚动我p>
            <p>来回滚动我p>
            <p>滚动我p>
            <p>来回滚动我p>
        div>
    body>
html>
 class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"> class="hide-preCode-box">

在这里插入图片描述

粘性定位总结:

有时候设置会发现粘性定位不起作用,又找不到原因,可以看看有没有以下几点原因:

  1. 父元素不能overflow:hidden或者overflow:auto属性。
  2. 必须指定top、bottom、left、right4个值之一,否则只会处于相对定位
  3. 父元素的高度不能低于sticky元素的高度
  4. sticky元素仅在其父元素内生效

7、重叠元素

在对元素进行定位时,它们可以与其他元素重叠。

z-index 属性指定元素的堆栈顺序(哪个元素应放置在其他元素的前面或后面)。

元素可以设置正或负的堆叠顺序。

示例代码:

DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>重叠元素title>
    <style>
        .div1 {
            width: 200px;
            height: 200px;
            background-color: red;
            position: absolute;
            top: 0;
            /* 值越大,元素就会显示在其他元素上面 */
            z-index: 999;

        }

        .div2 {
            width: 100px;
            height: 100px;
            background-color: yellowgreen;
            position: absolute;
            top: 150px;
            left: 150px;
        }
    style>
head>

<body>
    <div class="div1">div>

    <div class="div2">div>
body>

html>
 class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"> class="hide-preCode-box">

在这里插入图片描述

注意:

总结:

position 属性规定应用于元素的定位方法的类型。

class="table-box">
定位模式是否脱离文档流移动位置是否常用
static 静态定位不能使用边偏移很少
relative 相对定位否(占有原来位置)相对于自身位置偏移常用
absolute 绝对定位是(不占有原来位置)带有定位的父级常用
fixed 固定定位是(不占有原来位置)浏览器可视区常用
sticky 粘性定位否(占有原来位置)浏览器可视区偶尔用
  1. 我们学习定位时,一定要记住 相对定位、固定定位、绝对定位 两个大的特点:
  1. 学习定位,重点要学会子绝父相,这是开发中最常用的。
data-report-view="{"mod":"1585297308_001","spm":"1001.2101.3001.6548","dest":"https://blog.csdn.net/wshwsh_/article/details/131930681","extend1":"pc","ab":"new"}">>
注:本文转载自blog.csdn.net的lwd_up的文章"https://blog.csdn.net/weixin_44630490/article/details/115434643"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接

评论记录:

未查询到任何数据!