前端学习HTML/CSS/JS/ES6/VUE第四章CSS布局

提示这是我的个人IT资源网站,大家可以进去看看

快乐的时光总是过得很快,转眼间双节假期已经结束,我们又要投身在工作中,去实现我们人生的价值,只要地球不爆炸,博主永远不停更,哈哈😄 ,接着上一章,我们整理了CSS的一些样式,这章我们对CSS布局进行整理,布局在我们页面设计中可以说是重中之重,犹如房子的格局,布局设计的好坏,就好比房子格局好不好,决定住的舒服不舒服,而对于页面,则是视觉体验好不好。

CSS绝对定位

绝对定位属性:position值:absolute,通过指定了left,top绝对定位一个元素。
1.绝对定位
属性:position值:absolute设置了绝对定位的元素,相当于该元素被从原文档中删除了,所以“正常文字4”会紧接着出现在“正常文字2”后面,而不会留下空档。

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

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>绝对定位</title>
    <style>
        .abs {
            position: absolute;
            left: 150px;
            top: 50px;
        }
    </style>
</head>

<body>
    <p>正常文字1</p>
    <p>正常文字2</p>
    <p class="abs" style="color: red;">绝对定位的文字3</p>
    <p>正常文字4</p>
    <p>正常文字5</p>
</body>

</html>

效果:在这里插入图片描述
2.绝对定位是基于最近的一个定位了的父容器
对于“绝对定位的文字”这个p标签,其定位了的父容器即class="absdiv"的div,所以“绝对定位的文字”这个p出现的位置是以这个div为基础的。

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

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>相对于定位了的父容器绝对定位</title>
    <style>
        .abs {
            position: absolute;
            left: 100px;
            top: 50px;
        }

        .absdiv {
            position: absolute;
            left: 150px;
            top: 50px;
            width: 215px;
            border: 1px solid blue;
        }
    </style>
</head>

<body>
    <p>正常文字1</p>
    <p>正常文字2</p>
    <div class="absdiv">
        这是一个绝对定位了的DIV
        <p class="abs" style="color: red;">绝对定位的文字</p>
    </div>
    <p>正常文字4</p>
    <p>正常文字5</p>
</body>

</html>

效果:在这里插入图片描述
3.如果最近的父容器没有定位,则会往上找
如果除body外没有定位了父容器,则以body为定位的父容器进行绝对定位。

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

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>如果最近的父容器没有定位,则会往上找</title>
    <style>
        .abs1 {
            position: absolute;
            left: 100px;
            top: 50px;
        }

        .abs2 {
            position: absolute;
            left: 100px;
            top: 10px;
        }

        .absdiv {
            position: absolute;
            left: 150px;
            top: 50px;
            width: 215px;
            border: 1px solid blue;
        }
    </style>
</head>

<body>
    <p>正常文字1</p>
    <p>正常文字2</p>
    <div class="absdiv">
        父容器的父容器进行了定位
        <div style="border: 1px solid red;">
            最近的父容器没有定位
            <p class="abs1" style="color: red;">向上寻找定位了的父容器</p>
        </div>
    </div>
    <p>正常文字4</p>
    <p>正常文字5</p>
    <div style="border: 1px solid green;width: 215px;">
        最近的父容器没有定位
        <p class="abs2" style="color: red;">以body为定位的父容器</p>
    </div>
</body>

</html>

效果:在这里插入图片描述
4.z-index
通过绝对定位可以把一个元素放在另一个元素上,这样位置就重复,重复了,就存在一个谁覆盖谁的问题,这个时候就可以使用z-index属性,当z-index的值越大,就表示放在上面,z-index值越小就表示放在下面。

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

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>z-index</title>
    <style>
        .abs {
            position: absolute;
            height: 50px;
            width: 100px;
            background-color: blue;
            top: 100px;
            left: 50px;
            /*当值大于0时,4和5被覆盖*/
            z-index: -1;
            text-align: center;
            padding: 5px 0;
        }
    </style>
</head>

<body>
    <p>正常文字1</p>
    <p>正常文字2</p>
    <span class="abs">z-index=-1</span>
    <p>正常文字4</p>
    <p>正常文字5</p>
</body>

</html>

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

CSS相对定位

1.相对定位
属性:position值:relative
与绝对定位不同的是,相对定位不会把该元素从原文档删除掉,而是在原文档的位置的基础上,移动一定的距离。

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

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>相对定位</title>
    <style>
        .r {
            position: relative;
            left: 150px;
            top: 50px;
        }
    </style>
</head>

<body>
    <p>正常文字1</p>
    <p>正常文字2</p>
    <p class="r">相对定位的文字3</p>
    <p>正常文字4</p>
    <p>正常文字5</p>
</body>

</html>

效果:在这里插入图片描述
2.相对定位不占用原位置
如果直接使用相对定位,会占用原位置的空间,如何实现在原来的位置移动一下,但又不占用原位置的空间,就需要绝对定位和相对定位组合使用。

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

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>相对定位实现不占用原位置</title>
    <style>
        .r {
            position: relative;
            left: 0;
            top: 0;
        }

        .a {
            position: absolute;
            left: 150px;
            top: 0px;
        }
    </style>
</head>

<body>
    <p>正常文字1</p>
    <p>正常文字2</p>
    <div class="r">
        <div class="a">
            相对定位的文字3(不占原位置)
        </div>
    </div>
    <p>正常文字4</p>
    <p>正常文字5</p>
</body>

</html>

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

CSS浮动

浮动的框可以向左或向右移动,直到它的外边缘碰到包含框或另一个浮动框的边框为止。
属性:float值:left,right
1.文字向右浮动
文字向右浮动,浮动后,原来的位置就让出来了,并且是在原来的高度的基础上,向右浮动。

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

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>文字向右浮动</title>
    <style>
        .f {
            float: right;
        }
    </style>
</head>

<body>
    <div>正常文字1</div>
    <div>正常文字2</div>
    <div class="f">浮动的文字</div>
    <div>正常文字4</div>
    <div>正常文字5</div>
</body>

</html>

效果:在这里插入图片描述
2.文字向左浮动
文字向左浮动,首先会把原位置让出来,但是是向左浮动,所以还在原位置,后面的文字会跟上来,但是发现浮动的文字还在原位置,就只好排在后面了。

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

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>文字向左浮动</title>
    <style>
        .f {
            float: left;
        }
    </style>
</head>

<body>
    <div>正常文字1</div>
    <div>正常文字2</div>
    <div class="f">浮动的文字</div>
    <div>正常文字4</div>
    <div>正常文字5</div>
</body>

</html>

效果:在这里插入图片描述
3.文字围绕图片
当图片向左浮动时,文字会围绕图片

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

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>文字向左浮动</title>
    <style>
        .f {
            float: left;
        }

        div {
            width: 320px;
        }
    </style>
</head>

<body>
    <div>
        <img src="https://how2j.cn/example.gif" />
        <p>
            当图片不浮动时,文字就会换行出现在下面
            当图片不浮动时,文字就会换行出现在下面
            当图片不浮动时,文字就会换行出现在下面
            当图片不浮动时,文字就会换行出现在下面
            当图片不浮动时,文字就会换行出现在下面
            当图片不浮动时,文字就会换行出现在下面
        </p>
    </div>
    <div>
        <img class="f" src="https://how2j.cn/example.gif" />
        <p>
            当图片不浮动时,文字就会换行出现在下面
            当图片不浮动时,文字就会换行出现在下面
            当图片不浮动时,文字就会换行出现在下面
            当图片不浮动时,文字就会换行出现在下面
            当图片不浮动时,文字就会换行出现在下面
            当图片不浮动时,文字就会换行出现在下面
        </p>
    </div>
</body>

</html>

效果:在这里插入图片描述
4.文字不想围绕图片
不允许出现浮动元素
属性:clear值:left(不允许左侧有浮动元素) right(不允许右侧有浮动元素) both(不允许两边有浮动元素) none(默认值,允许两边都可以有浮动元素)

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

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>清除浮动</title>
    <style>
        .f {
            float: left;
        }

        div {
            width: 320px;
        }

        .clearp {
            clear: left;
        }
    </style>
</head>

<body>
    <div>
        <img class="f" src="https://how2j.cn/example.gif" />
        <p>
            当图片不浮动时,文字就会换行出现在下面
            当图片不浮动时,文字就会换行出现在下面
            当图片不浮动时,文字就会换行出现在下面
            当图片不浮动时,文字就会换行出现在下面
            当图片不浮动时,文字就会换行出现在下面
            当图片不浮动时,文字就会换行出现在下面
        </p>
    </div>
    <div>
        <img class="f" src="https://how2j.cn/example.gif" />
        <p class="clearp">
            当图片不浮动时,文字就会换行出现在下面
            当图片不浮动时,文字就会换行出现在下面
            当图片不浮动时,文字就会换行出现在下面
            当图片不浮动时,文字就会换行出现在下面
            当图片不浮动时,文字就会换行出现在下面
            当图片不浮动时,文字就会换行出现在下面
        </p>
    </div>
</body>

</html>

效果:在这里插入图片描述
5.水平排列div
默认的div排列是会换行的,如果使用float就可以达到水平排列的效果,通常会用在菜单,导航栏等地方,如果超出了父容器,还会有自动换行的效果。

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

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>水平排列div</title>
    <style>
        #floatDiv {
            width: 200px;
        }

        #floatDiv div {
            float: left;
        }
    </style>
</head>

<body>
    默认的div排列是会换行的
    <div>
        菜单1
    </div>
    <div>
        菜单2
    </div>
    <div>
        菜单3
    </div>
    如果使用float就可以达到水平排列的效果,通常会用在菜单,导航栏等地方,如果超出了父容器,还会有自动换行的效果
    <div id="floatDiv">
        <div>
            菜单1
        </div>
        <div>
            菜单2
        </div>
        <div>
            菜单3
        </div>
        <div>
            菜单4
        </div>
        <div>
            菜单5
        </div>
        <div>
            菜单6
        </div>
    </div>
</body>

</html>

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

CSS显示方式

元素的display显示方式有多种,display:none隐藏、display:block块级、display:inline内联、display:inline-block内联-块级、其他。
1.隐藏
display:none;使得被选择的元素隐藏,并且不占用原来的位置。

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

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>隐藏</title>
    <style>
        .d {
            display: none;
        }
    </style>
</head>

<body>
    <div>可见的div1</div>
    <div class="d">隐藏的div2,使用display:none隐藏</div>
    <div>可见的div3</div>
</body>

</html>

效果:在这里插入图片描述
2.块级
display:block;表示块级元素,块级元素会自动在前面和后面加上换行,并且在其上的width和height也能够生效
div默认是块级元素
span默认是内联元素(不会有换行,width和height也不会生效)

<!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,
        span {
            border: 1px solid lightgray;
            margin: 10px;
            width: 200px;
            height: 100px;
        }

        .d {
            display: block;
        }
    </style>
</head>

<body>
    <div>普通的div块</div>
    <span>这是普通span</span><span>这是普通span</span><span>这是普通span</span>
    <span class="d">这是span,被改造成了块级元素</span>
</body>

</html>

效果:在这里插入图片描述
3.内联
display:inline;表示内联元素
内联元素前后没有换行,并且在其上的width和height也无效。其大小由其中的内容决定
div默认是块级元素
span默认是内联元素

<!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,
        span {
            border: 1px solid lightgray;
            margin: 10px;
            width: 200px;
            height: 100px;
        }

        .s {
            display: inline;
        }
    </style>
</head>

<body>
    <span>这是普通span</span><span>这是普通span</span><span>这是普通span</span>
    <div class="s">这是div,被改造成了块级元素</div>
</body>

</html>

效果:在这里插入图片描述
4.内联-块级
内联是不换行,但是不能指定大小
块级时能指定大小,但是会还换行
有时候,需要元素处于同一行,同时还能指定大小,这个时候,就需要用到内联-块级inline-block

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

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>内联-块级</title>
    <style>
        span {
            display: inline-block;
            border: 1px solid lightgray;
            margin: 10px;
            width: 100px;
        }
    </style>
</head>

<body>
    <span>奔驰</span>
    <span>宝马</span>
    <span>奥迪</span>
    <span>特斯拉</span>
</body>

</html>

效果:在这里插入图片描述
5.其他
其他的显示方式像list-item显示为列表table显示为表格inline-table显示为前后无换行的表格table-cell显示为单元格

水平居中

1.内容居中
通过设置属性align="center"居中内容或者通过样式style="text-align:center"居中内容

<!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 {
            border: 1px solid lightgray;
            margin: 10px;
        }
    </style>
</head>

<body>
    <div align="center">
        通过设置属性align="center"居中内容
    </div>
    <div style="text-align: center;">
        通过样式style="text-align:center"居中内容
    </div>
</body>

</html>

效果:在这里插入图片描述
2.元素居中

<!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 {
            border: 1px solid lightgray;
            margin: 10px;
        }

        span {
            border: solid 1px lightskyblue;
        }
    </style>
</head>

<body>
    <div>默认情况下div会占用100%的宽度,所以无法观察元素是否居中</div>
    <div style="width: 300px;margin: 0 auto;">
        设置本div的宽度,然后再使用样式margin:0 auto来使得元素居中
    </div>
    <span style="width: 300px;margin: 0 auto;">
        span是内联元素,无法设置宽度,所以不能通过margin:0 auto居中
    </span>
    <div style="text-align: center;">
        <span>span的居中可以通过放置在div中,然后让div text-align实现居中</span>
    </div>
</body>

</html>

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

左侧固定,右边自动占满

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

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>左侧固定,右边自动占满</title>
    <style>
        .left {
            width: 200px;
            float: left;
            background-color: pink;
        }

        .right {
            overflow: hidden;
            background-color: lightskyblue;
        }
    </style>
</head>

<body>
    <div class="left">左边固定宽度</div>
    <div class="right">右边自动填满</div>
</body>

</html>

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

垂直居中

1.line-height方式

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

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>line-height</title>
    <style>
        #d {
            line-height: 100px;
        }

        div {
            border: solid 1px lightskyblue;
        }
    </style>
</head>

<body>
    <div id="d">line-height适合单独一行垂直居中</div>
</body>

</html>

效果:在这里插入图片描述
2.内边距方式
借助设置相同的上下内边距,实现垂直居中效果,可以用在多行文本上。

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

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>内边距方式</title>
    <style>
        #d {
            padding: 30px 0;
        }

        div {
            border: solid 1px lightskyblue;
        }
    </style>
</head>

<body>
    <div id="d">多行内容 多行内容 多行内容 多行内容 多行内容 多行内容 多行内容 多行内容 多行内容 多行内容 多行内容 多行内容 多行内容 多行内容 多行内容 多行内容 多行内容 多行内容 多行内容 多行内容 多行内容
        多行内容 多行内容 多行内容 多行内容 多行内容 多行内容 多行内容 多行内容 多行内容 多行内容 多行内容 多行内容 多行内容 多行内容 多行内容 多行内容 多行内容 多行内容 多行内容 </div>
</body>

</html>

效果:在这里插入图片描述
3.table方式
首先通过display:table-cell;把div用单元格的形式显示,然后借用单元格的垂直居中vertical-align:middle;来达到效果。这样对图片也可以居中,上一步line-height就不能对图片居中。

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

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>table方式</title>
    <style>
        #d {
            display: table-cell;
            vertical-align: middle;
            height: 200px;
        }

        div {
            border: solid 1px lightskyblue;
        }
    </style>
</head>

<body>
    <div id="d">
        <img src="https://how2j.cn/example.gif" />
    </div>
</body>

</html>

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

左右固定

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

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>左右固定</title>
    <style>
        .left {
            width: 200px;
            float: left;
            background-color: pink;
        }

        .right {
            width: 200px;
            float: right;
            background-color: pink;
        }

        .center {
            margin: 0 200px;
            background-color: lightblue;
        }
    </style>
</head>

<body>
    <div class="left">左边固定宽度</div>
    <div class="right">右边固定宽度</div>
    <div class="center">中间自适应</div>
</body>

</html>

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

贴在下方

<!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 {
            position: relative;
            height: 300px;
            width: 90%;
            background-color: skyblue;
        }

        #div2 {
            position: absolute;
            bottom: 0;
            height: 30px;
            width: 100%;
            background-color: lightgreen;
        }
    </style>
</head>

<body>
    <div id="div1">
        <div id="div2">
            无论蓝色div高度如何变化,绿色div都会贴在下面
        </div>
    </div>
</body>

</html>

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

块之间有空格

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

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>块之间的空格</title>
    <style>
        .nocontinue span {
            border-bottom: 2px solid lightgray;
        }

        .continue span {
            border-bottom: 2px solid lightgray;
            float: left;
        }
    </style>
</head>

<body>
    <div class="nocontinue">
        <span>有空格的span</span>
        <span>有空格的span</span>
        <span>有空格的span</span>
    </div>

    <div class="continue">
        <span>无空格的span</span>
        <span>无空格的span</span>
        <span>无空格的span</span>
    </div>

    <div style="clear:both"></div>

    <div>后续的内容</div>
</body>

</html>

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

结尾

到此CSS布局相关的内容整理完毕,大家在遇到布局相关问题可以参考一下,不一定很全,有需要补充的,大家可以留言告诉我!
在这里插入图片描述
这是我觉得不错的学习网站之一,里面还是比较全面的,如果大家都能学完,保证可以找到一个不错的工作,点击进去看看吧!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值