<前端技术>css

时间:July 23, 2017 分类:

目录:

什么是css

CSS是Cascading Style Sheets的简称,中文称为层叠样式表,用来控制网页数据的表现,可以使网页的表现与数据内容分离

简单点讲,css可以修饰html中的标签属性。

更多的可以参考http://www.w3school.com.cn/h.asp

css的四种引入模式

行内式

行内式是在标记的style属性中设定css样式,不过这样使用并不能体现出css的优势,所以并不推荐使用。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <p style="background-color:aqua;color:red">why</p>
</body>
</html>

展示效果

嵌入式

嵌入式是将css的样式集中写在网页的<head></head>标签中

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        p{
            background-color:aqua;
            color:red;
        }

    </style>
</head>
<body>
    <p>why</p>
</body>
</html>

展示效果

导入式

导入式是将一个独立的css文件引入HTML文件中,导入使用CSS规则引入外部的css文件,<style>标记也是写在<head>标记中

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        @import "test03.css"
    </style>
</head>
<body>
    <p>why</p>
</body>
</html>

test03.css代码

        p{
            background-color:aqua;
            color:red;
        }

展示效果

链接式

和导入式使用方式类似,但是展示的时候方式不同

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <link href="test03.css" rel="stylesheet">
</head>
<body>
    <p>why</p>
</body>
</html>

展示效果

导入式会在网页装载完成后,再装载css文件,因此这样就导致了一个问题,如果网页比较大的话,就是先显示无样式的页面,然后闪烁一下,再出现网页样式。 而使用链接式与导入式不同的是,会在网页主体文件装载前先装载css文件,因此显示出来的网页从一开始就是带样式的效果,不会像导入式那样最开始的时候是无样式的网页,然后是有样式的文件。

所以我们在导入css的时候,直接用链接式即可。

css注释

/* 注解注释内容 */

css选择器(selector)

选择器指明了{}中的样式的作用对象,或者说作用于网页中那些元素

基础选择器

通用元素选择器*

匹配任何元素

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        * {
            color:red;
        }
    </style>
</head>
<body>
    <p>why</p>
    <div>why</div>
</body>
</html>

展示效果

可以看到p标签和div标签内的文本都被添加css样式

标签选择器

匹配所有使用该标签的元素

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        p {
            color:red;
        }
    </style>
</head>
<body>
    <p>why</p>
    <div>why</div>
</body>
</html>

展示效果

可以看到p标签进行了渲染,而div标签没有

class选择器

匹配所有class属性中包含www的元素

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        .www {
            color:red;
        }
    </style>
</head>
<body>
    <p class="www">why</p>
    <p>why</p>
</body>
</html>

展示效果

可以看到只有class为www的内容进行了渲染

class选择器可以根据标签进行选择,下边为示例代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        p.www {
            color:red;
        }
    </style>
</head>
<body>
    <p class="www">why</p>
    <p>why</p>
    <div class="www">why</div>
</body>
</html>

展示效果

只有p标签中的有class为www的进行了渲染,而p标签和div标签中的class为www的文本都没有被进行渲染

id选择器

通过比配id来实现渲染

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        #www {
            color:red;
        }
    </style>
</head>
<body>
    <p id="www">why</p>
    <p>why</p>
</body>
</html>

可以看到只有id为www中的内容被进行了渲染。

另外对于id也有p#www的操作,只匹配p标签中的www的id

注意,id是唯一的,而class是可以重复的。

组合选择器

多元素选择器

  • E,F 同时匹配所有E和所有F有的标签元素,用逗号隔开
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        p,div {
            color:red;
        }
    </style>
</head>
<body>
    <p>why</p>
    <div>why</div>
    <a>why</a>
</body>
</html>

可以看到p标签和div标签的内容都进行了渲染,而a标签没有进行渲染

后代元素选择器

  • E F 匹配所有属于E元素的后代F元素,E和F之间用空格隔开
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        .r1 p {
            color:red;
        }
    </style>
</head>
<body>
    <div class="r1">why1
        <div class="r2">why2
            <p>why3</p>
        </div>
        <p>why4</p>
    </div>
</body>
</html>

可以看到why3和why4的被进行了渲染,why4为r1类的p标签中,而why3在r1的r2的p标签中,都被进行了渲染。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        p div {
            color:red;
        }
        div p {
            color:red;
        }
    </style>
</head>
<body>
    <p>why</p>
    <div>why</div>
    <p><dir>why</dir></p>
    <div><p>why</p></div>
</body>
</html>

<p>标签不能嵌套块标签,嵌套的话等于没嵌套

展示效果

子元素选择器

  • E>F 匹配所有E元素的子元素F
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        .r1>p {
            color:red;
        }
    </style>
</head>
<body>
    <div class="r1">why1
        <div class="r2">why2
            <p>why3</p>
        </div>
        <p>why4</p>
    </div>
</body>
</html>

展示效果

可以看到why4被进行了渲染,why4为r1类的p标签中,被进行了渲染,而why3在r1的r2的p标签中,没有被进行了渲染。

毗邻元素选择器

  • E+F 匹配所有紧随着E元素之后的同级元素F
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        .r2+p {
            color:red;
        }
    </style>
</head>
<body>
    <div class="r1">why1
        <div class="r2">why2
            <p>why3</p>
        </div>
        <p>why4</p>
        <p>why5</p>
    </div>
</body>
</html>

可以看到why4被进行了渲染

注意事项

  1. 块级元素可以包含内联元素或某些块级元素,但是内联元素不能包含块级元素,只能包含其他内联元素
  2. 块级元素不能放在p里边
  3. 几个特殊的块级元素只能包含内联元素,不能包含块元素,如h1,h2,h3,h4,h5,h6,p,dt
  4. li内可以包含div
  5. 块级元素和块级元素并列,内联元素与内联元素并列,错误示例:

属性选择器

[why] 匹配所有具有why属性

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        [why] {
            color:red;
        }
    </style>
</head>
<body>
    <div why="wanghongyu">hello</div>
</body>
</html>

也可以指定标签

E[why="wanghongyu"] 匹配所有why属性为wanghongyu的标签

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        [why="wanghongyu"] {
            color:red;
        }
    </style>
</head>
<body>
    <div why="wanghongyu">hello</div>
    <div why="wanghong">hello</div>
</body>
</html>

E[why~="wanghongyu"] 匹配以空格隔开的属性中有wanghongyu的标签

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        [why~="wanghongyu"] {
            color:red;
        }
    </style>
</head>
<body>
    <div why="wang wanghongyu">hello</div>
    <div why="wanghong">hello</div>
</body>
</html>

展示效果

E[why|=wang] 通过连字符连接,且首部为wang

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        [why|=wang] {
            color:red;
        }
    </style>
</head>
<body>
    <div why="wang-hong">hello</div>
    <div why="wang-hy">hello</div>
</body>
</html>

展示效果

可以看到两个div标签都被进行了渲染

E[why^=wang] 匹配以wang开头的标签属性

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        [why|=wang] {
            color:red;
        }
    </style>
</head>
<body>
    <div why="wanghy">hello</div>
    <div why="why">hello</div>
</body>
</html>

展示效果

E[why$=yu] 匹配why标签以yu结尾的属性

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        [why$=yu] {
            color:red;
        }
    </style>
</head>
<body>
    <div why="wanghongyu">hello</div>
    <div why="wanghong">hello</div>
</body>
</html>

展示效果

E[why*=hong] 匹配why标签包含hong的属性

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        [why*=hong] {
            color:red;
        }
    </style>
</head>
<body>
    <div why="wanghongyu">hello</div>
    <div why="wanghy">hello</div>
</body>
</html>

p:before和p:after

在开头和结尾添加内容

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        p:before{
            content: "开始";
            color: red
        }
        p:after{
            content: "结束";
            color: red
        }
    </style>
</head>
<body>
    <p>why</p>
</body>
</html>

展示效果

伪类选择器

专用于控制链接的显示效果

  • a:link(没有接触过的链接),用于定义了链接的常规状态。
  • a:hover(鼠标放在链接上的状态),用于产生视觉效果。
  • a:visited(访问过的链接),用于阅读文章,能清楚的判断已经访问过的链接。
  • a:active(在链接上按下鼠标时的状态),用于表现鼠标按下时的链接状态。
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style type="text/css">
    a:link{
        color: red;
    }
    a:visited {
        color: blue;
    }
    a:hover {
        color: green;
    }
    a:active {
        color: yellow;
    }
</style>
</head>
<body>
    <a href="http://www.whysdomain.com" >whysdomain</a>
</body>
</html>

css属性

颜色属性

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
   <div style="color:blueviolet">ppppp</div>
   <div style="color:#ffee33">ppppp</div>
   <div style="color:rgb(255,0,0)">ppppp</div>
   <div style="color:rgba(255,0,0,0.5)">ppppp</div>
</body>
</html>
  • style="color:blueviolet"通过直接指定color单词来指定颜色
  • style="color:#ffee33"通过六个十六进制字符表示颜色
  • style="color:rgb(255,0,0)"通过red红色,green绿色和blue蓝色来表示颜色
  • style="color:rgba(255,0,0,0.5)"在上一个基础上添加了透明度

展示效果

字体属性

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
   <div>ppppp</div>
</body>
</html>

字体大小

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        div{
            font-size: 50px
        }
    </style>
</head>
<body>
   <div>ppppp</div>
</body>
</html>

展示效果

font-size: 200%

展示效果

斜体

font-style: oblique

展示效果

字体

font-family:'SimSun'

不过我没看出有太多的效果

加粗

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        div.normal{
            font-weight:normal;
        }
        div.thick{
            font-weight:bold;
        }
        div.thicker{
            font-weight:900;
        }
    </style>
</head>
<body>
    <div class="normal">ppppp</div>
    <div class="thick">ppppp</div>
    <div class="thicker">ppppp</div>
</body>
</html>

展示效果

背景属性

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        html{
            background-color: antiquewhite;

        }
        body{
            width: 600px;
            height: 600px;
            background-color: deeppink;
            background-image: url(1.png);
            background-repeat: no-repeat;
            background-position: center center;
        }
    </style>
</head>
<body>
</body>
</html>

展示效果

  • html标签设置背景颜色,可以看到所有网页都是一个近似肉色的颜色。background-color为背景颜色
  • body标签定义大小为高度height为600像素,宽度width为600像素,宽度的话默认为屏幕从左到右,所以默认可以不写,但是height一定要有,需要撑起固定长度用于展示内容。
  • 背景图片为background-image,background-repeat为展示方式,no-repeat代表不进行平铺,repeat代表平铺满。
  • background-position表示水平方向和竖直方向上的位置,第一个center是水平方向居中,第二个center是竖直方向居中,当然也横向可以定义left和right,纵向可以定义top和botton,也可以直接定义距离左边和上边的像素大小,例如20px 20px。

刚才就可简写为<body style="width: 300px;height: 300px; background: center center no-repeat deeppink url('1.png')"

文本属性

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        p{
        width: 200px;
        height: 200px;
        text-align: center;
        background-color: aquamarine;
        line-height: 200px;
        }
    </style>
</head>
<body>
<p>why</p>
</body>
</html>

展示效果

  • text-align: center;文本横向居中
  • line-height: 200px;文本行高200像素
  • text-indent: 150px;首行缩进
  • direction: rtl;文本从右向左
  • letter-spacing: 10px;字母之间的间距
  • word-spacing: 20px;单词之间的间距
  • text-transform: capitalize;字母的大小写,uppercase所有字母大写,capitalize字母小写,lowercase首字母大写

边框属性

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        p{
        width: 200px;
        height: 200px;
        text-align: center;
        background-color: aquamarine;
        line-height: 200px;
        border-style: solid;
        border-color: chartreuse;
        border-width: 20px;
        }
    </style>
</head>
<body>
<p>why</p>
</body>
</html>

展示效果

  • border-style: solid;边框的样式
  • border-color: chartreuse;边框的颜色
  • border-width: 20px;边框宽度

转载自w3school的样式

列表属性

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        ul,ol{
        list-style: none;
    </style>
</head>
<body>
<ul>
    <ol>why</ol>
    <ol>why</ol>
    <ol>why</ol>
</ul>
</body>
</html>

展示效果

  • list-style: none;无
  • list-style: circle;空心圆

display属性

display:inline;
  • block此元素将显示为块级元素,此元素前后会带有换行符。
  • inline默认。此元素会被显示为内联元素,元素前后没有换行符。
  • none此元素不会被显示。

内联标签不能设置长宽,只有块级标签才能设置。

none是一个重要的属性,轮播图就是通过这种方式进行设置的。bxslider.com,提供一个很好用的轮播图插件。

盒子模型

创建盒子

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        .outer{
            width: 300px;
            height: 300px;
            background-color: antiquewhite;
        }
        .inter{
            width: 100px;
            height: 100px;
            background-color: rebeccapurple;
        }
    </style>
</head>
<body>
<div class="outer">
    <div class="inter"></div>
</div>
</body>
</html>

展示效果

这样就设计好两个盒子了,并且可以看到左上角并不是贴着浏览器的边缘,这是因为body是在html中,我们的边缘为body的边缘,body和html之间会有若干像素的margin

解决body和html中有像素距离

解决方式为body标签添加属性

        body{
            margin: 0;
        }

展示效果

盒子居中

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        body{
            margin: 0;
        }
        .outer{
            width: 300px;
            height: 300px;
            background-color: antiquewhite;
        }
        .inter{
            width: 100px;
            height: 100px;
            background-color: rebeccapurple;
            margin-top: 100px;
            margin-left: 100px;
        }
    </style>
</head>
<body>
<div class="outer">
    <div class="inter"></div>
</div>
</body>
</html>

展示效果

可以看到左右下都是对齐的

塌陷问题解决方式

添加一行代码

        .outer{
            width: 300px;
            height: 300px;
            background-color: antiquewhite;
            border: 1px solid transparent;
        }

展示效果

当然还有其他的方式

  • border:1px solid transparent
  • padding:1px
  • over-flow:hidden;

塌陷问题的原因

可以看到横向距离是没有问题的,而纵向有问题,塌陷的原因是inter因为向上无法找到元素,边界、文本和padding都没有。

我们通过多个盒子进行展示

可以看到两个之间的距离为100px,margin写在inter中,inter两个是同级的标签,他们之间依然是重叠的100px,如果两个之间的不一致,以大的为主,而对于父子之间,父集也下降了100px,只加载到了inter中,而inter需要找一个边界距离100px,而大边框没有文本,border,padding,而这个是inter寻找边界的依据,找到最外层,找到了进行100px的距离,而outer也跟着降了100px

通过大盒子的padding进行居中

示例代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        body{
            margin: 0;
        }
        .outer{
            width: 300px;
            height: 300px;
            background-color: antiquewhite;
            border: 1px solid transparent;
            padding-top: 100px;
            padding-left: 100px;
        }
        .inter{
            width: 100px;
            height: 100px;
            background-color: rebeccapurple;
        }
    </style>
</head>
<body>
<div class="outer">
    <div class="inter"></div>
</div>
</body>
</html>

展示效果

看中间红框中的padding大小会变

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        body{
            margin: 0;
        }
        .outer{
            width: 200px;
            height: 200px;
            background-color: antiquewhite;
            border: 1px solid transparent;
            <!--padding-top: 100px;-->
            <!--padding-left: 100px;-->
        }
        .inter{
            width: 100px;
            height: 100px;
            background-color: rebeccapurple;
            margin: 20px;
        }
    </style>
</head>
<body>
<div class="outer">
    <div class="inter"></div>
</div>
</body>
</html>

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        body{
            margin: 0;
        }
        .outer{
            width: 200px;
            height: 200px;
            background-color: antiquewhite;
            border: 1px solid transparent;
            padding-top: 100px;
            padding-left: 100px;
        }
        .inter{
            width: 100px;
            height: 100px;
            background-color: rebeccapurple;
        }
    </style>
</head>
<body>
<div class="outer">
    <div class="inter"></div>
</div>
</body>
</html>

float

文本流控制

正常文本流

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        .div1{
            width: 300px;
            height: 100px;
            background-color: bisque;
        }
        .div2{
            width: 400px;
            height: 200px;
            background-color: royalblue;
        }
        .div3{
            width: 500px;
            height: 300px;
            background-color: blueviolet;
        }
        .div4{
            width: 100px;
            height: 200px;
            background-color: gold;
        }
    </style>
</head>
<body>
<div class="div1"></div>
<div class="div2"></div>
<div class="div3"></div>
<div class="div4"></div>
</body>
</html>

展示效果

div2脱离文档流向左飘

        .div2{
            width: 400px;
            height: 200px;
            background-color: royalblue;
            float: left;
        }

展示效果

div2脱离文档流向右飘

        .div2{
            width: 400px;
            height: 200px;
            background-color: royalblue;
            float: right;
        }

展示效果

div2和div3同时脱离文档流向右飘

        .div2{
            width: 400px;
            height: 200px;
            background-color: royalblue;
            float: right;
        }
        .div3{
            width: 500px;
            height: 300px;
            background-color: blueviolet;
            float: right;
        }

展示效果

div2和div3同时脱离文档流向左飘

        .div2{
            width: 400px;
            height: 200px;
            background-color: royalblue;
            float: left;
        }
        .div3{
            width: 500px;
            height: 300px;
            background-color: blueviolet;
            float: left;
        }

展示效果

还有一个要注意的点,div2和div3是浮动对象,而前者div1不为浮动对象,div2是不跟随div1

div3不能存在向左飘文档流

        .div2{
            width: 400px;
            height: 200px;
            background-color: royalblue;
            float: left;
        }
        .div3{
            width: 500px;
            height: 300px;
            background-color: blueviolet;
            float: left;
            clear: left;
        }

展示效果

clear是告诉标签左边不能有left的浮动对象,而不是说把left取消

div2不能存在向右飘文档流

        .div2{
            width: 400px;
            height: 200px;
            background-color: royalblue;
            float: left;
            clear: right;
        }
        .div3{
            width: 500px;
            height: 300px;
            background-color: blueviolet;
            float: left;
        }

展示效果

div2只能控制自己在排列的时候没有left和right,而后div3排列。

clear的值默认为none,可选项none,left,right和both

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

position

static按照静态

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        .div1{
            width: 300px;
            height: 100px;
            background-color: bisque;
            position: static;
        }
        .div2{
            width: 400px;
            height: 200px;
            background-color: royalblue;
        }
        .div3{
            width: 500px;
            height: 300px;
            background-color: blueviolet;
        }
        .div4{
            width: 100px;
            height: 200px;
            background-color: gold;
        }
    </style>
</head>
<body>
<div class="div1"></div>
<div class="div2"></div>
<div class="div3"></div>
<div class="div4"></div>
</body>
</html>

static会按照文档流正常排放

展示效果

fixed

fixed可以固定到固定位置,不随

        .div1{
            width: 300px;
            height: 100px;
            background-color: bisque;
            position: fixed;
        }

展示效果

relative

这时它是不脱离文档流,只是按照当前的位置调整

        .div1{
            width: 300px;
            height: 100px;
            background-color: bisque;
            position: relative;
            left: 400px;
        }

展示效果

可以设置top,right,bottom,left

absolute

absolute会脱离文档流,按照上一级位置进行调整

        .div1{
            width: 300px;
            height: 100px;
            background-color: bisque;
        }
        .div2{
            width: 400px;
            height: 200px;
            background-color: royalblue;
            position: absolute;
            left: 50px;
            top: 50px;
        }

展示效果

脱离文档流,并且根据脱离文档流的位置进行定位

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        .div1{
            width: 300px;
            height: 100px;
            background-color: bisque;
        }
        .div2{
            width: 400px;
            height: 200px;
            background-color: royalblue;
            position: absolute;
            left: 50px;
            top: 50px;
        }
        .div3{
            width: 500px;
            height: 300px;
            background-color: blueviolet;
        }
        .div4{
            width: 100px;
            height: 200px;
            background-color: gold;
        }
        .div5{
            position: relative
        }
    </style>
</head>
<body>
<div class="div1"></div>
    <div class="div5">
<div class="div2"></div>
        </div>
<div class="div3"></div>
<div class="div4"></div>
</body>
</html>

展示效果

层叠效果

示例代码只是在上一个的基础上添加了z-index

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        .div1{
            width: 300px;
            height: 100px;
            background-color: bisque;
        }
        .div2{
            width: 400px;
            height: 200px;
            background-color: royalblue;
            position: absolute;
            left: 50px;
            top: 50px;
            z-index: -1
        }
        .div3{
            width: 500px;
            height: 300px;
            background-color: blueviolet;

        }
        .div4{
            width: 100px;
            height: 200px;
            background-color: gold;
        }
        .div5{
            position: relative
        }
    </style>
</head>
<body>
<div class="div1"></div>
    <div class="div5">
<div class="div2"></div>
        </div>
<div class="div3"></div>
<div class="div4"></div>
</body>
</html>

展示效果

登录的时候,登录的内容就在上边,下边的不能点,就是通过这个层叠的功能实现。