← 返回首页
Css基础教程(二十)
发表时间:2022-04-11 21:12:34
Css中正确使用百分比

1.高度使用百分比

大盒子里面套一个小盒子,如果外层容器高度确定,那么内层容器高度可以使用百分比。 例如:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>在Css中正确使用百分比</title>
    <style>

        #outer{
            width: 400px;
            height: 400px;
            background: lightblue;
        }

        #inner{
            width: 100%;
            height: 50%;
            background: lightpink;
        }
    </style>
</head>
<body>
<h1>在Css中正确使用百分比</h1>
<hr>

<div id="outer">
    <div id="inner">
    </div>
</div>

</body>
</html>

运行结果:

如果外层容器高度不确定,那么内层高度不能使用百分比。因为内层容器本身参与外层容器高度的计算,因此内层容器的高度也无法计算,形成悖论。

例如:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>在Css中正确使用百分比</title>
    <style>

        #outer{
            width: 400px;
            height: auto;
            background: lightblue;
        }

        #inner{
            width: 100%;
            height: 50%;
            background: lightpink;
        }
    </style>
</head>
<body>
<h1>在Css中正确使用百分比</h1>
<hr>

<div id="outer">
    <div id="inner">
       inner div
    </div>
    <br>
    <br>
    <br>
    <br>
    <br>
    <br>
    <br>
</div>

</body>
</html>

运行结果:

除非内层容器使用absolute绝对定位脱离文档流,相当于外层容器可以计算高度,那么内层容器也可以使用百分比。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>在Css中正确使用百分比</title>
    <style>

        #outer{
            width: 400px;
            height: auto;
            background: lightblue;
            position: relative;
        }

        #inner{
            width: 100%;
            height: 50%;
            background: lightpink;
            position: absolute;
        }
    </style>
</head>
<body>
<h1>在Css中正确使用百分比</h1>
<hr>

<div id="outer">
    <div id="inner">
       inner div
    </div>
    <br>
    <br>
    <br>
    <br>
    <br>
    <br>
    <br>
</div>

</body>
</html>

运行结果:

2.margin使用百分比

因为一个容器的宽度一般总是能确定,因此margin-top与margin-bottom也存在使用百分比的悖论。

例如:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        #outer{
            width: 600px;
            height: 400px;
            background: lightblue;
            margin: 0px auto;
            position: absolute;
        }

        #inner{
            width: 100%;
            height: auto;
            background: lightpink;
            margin-top: 50%;
            /*给人一种错觉好像是外层盒子高度的50%,那么也就是200px*/
            position: relative;
        }
    </style>
</head>
<body>
<h1>margin的理解</h1>
<hr>

<div id="outer">
    <div id="inner">
        <br><br><br><br>
    </div>
</div>
</body>
</html>

运行结果:

3.vw/vh和100%的区别

视口(viewport) 在桌面端,指的是浏览器的可视区域;在移动端,指的是Viewport中的Layout Viewport。浏览器内部的可视区域大小,即window.innerWidth/window.innerHeight大小,不包含任务栏标题栏以及底部工具栏的浏览器区域大小。 在css3规范中,1 vw 等于视口宽度的1%,1 vh 等于视口高度的1%。vh 和 vw 是相对于视口的高度和宽度。1vh 等于1/100的视口高度,1vw 等于1/100的视口宽度。 比如:浏览器高度950px,宽度为1920px, 1 vh = 950px/100 = 9.5 px,1vw = 1920px/100 =19.2 px ; 100 vh = 950 px, 100 vw = 1920px (100 vh 和 100 vw 即视口的高度和宽度)

vw/vh和100%的区别:

100%是相对于包含它的最近的父元素的高度和宽度。 vw (viewport width) vh (viewport height) 是相对于视口的宽度和高度,用vw,vh设定的大小只和视窗大小有关,和他们的父元素高度宽度没关系,可以用来开发自适应多种屏幕设备。

结论:

在默认的水平文档流方向下,CSS margin和padding属性的垂直方向的百分比值都是相对于宽度计算的,这个和top, bottom等属性的百分比值不一样。