布局 - 宽高自适应

198 阅读2分钟

什么是自适应?

网页布局中经常要定义元素的宽和高,但很多时候我们希望元素的大小能够根据窗口或子元素自动调整,这就是自适应。

  • 宽度自适应:元素宽度的默认值为auto,当宽度不写的时候,width取值为auto,就是自适应,100%不是自适应,因为如果设置了padding和width 100%,只会加长横向滚动条,这明显就不是自适应
  • 高度自适应:元素高度的默认值为auto,元素要使用height:100%;需要提前将html和body的height属性都设置为100%,否则设置无效,而且html和body两个缺一不可

最小宽高度

  • min-height 最小高度
  • max-height 最大高度
  • min-width 最小宽度
  • max-height 最大高度

两栏布局 - 通过calc()函数实现(后台管理页面常用)

  • calc()函数:用于动态计算长度值,需要注意运算符前后都需要保留一个空格,eg.width:calc(100% - 10px);
  • 任何长度值都可以使用 calc() 函数进行计算
  • calc() 函数支持 + - * / 运算,按照数学运算优先级规则
<!DOCTYPE html>
<html lang="en">
<head>
    <title>Document</title>
    <style>
        *{
            margin: 0;
            padding: 0;
            color: aliceblue;
        }
        html,body{ /*要设置后面元素的height自适应,需要将html和body两个元素height设置为height:100%;缺一不可*/
            height: 100%;
        }
        h1{
            padding: 10px;
        }
        span{
            display: block;
            margin: 30px 10px;
            text-indent: 1em;
        }
        .side{
            width: 230px;
            height: 100%; /* 元素要使用height:100%;需要提前将html和body的height属性设置为100%,否则设置无效 */
            background-color: purple;
            overflow: auto;
            float: left;
        }
        .main{
            width: calc(100% - 230px);
            height: 100%;
            background-color: brown;
            overflow: auto;
            float: left;
        }
    </style>
</head>
<body>
    <div class="side">
        <h1>侧边栏 - 固定宽度</h1>
        <span>ipsum dolor sit amet consectetur adipisicing elit. Cupiditate, modi ipsam ullam architecto vitae sapiente excepturi sunt minus illo laboriosam assumenda dignissimos vel velit harum eaque dolorum deleniti dolorem nisi?</span> 
        <span>Lorem ipsum, dolor sit amet consectetur adipisicing elit. Veniam modi at sunt? Quae, veritatis. Voluptatibus, odit id maiores necessitatibus impedit soluta, et perspiciatis cum autem maxime, totam animi veniam? Libero?</span>
        <span>Lorem ipsum, dolor sit amet consectetur adipisicing elit. Veniam modi at sunt? Quae, veritatis. Voluptatibus, odit id maiores necessitatibus impedit soluta, et perspiciatis cum autem maxime, totam animi veniam? Libero?</span>
    </div>
    <div class="main">
        <h1>右边主界面 - 自适应宽度</h1>
        <span>ipsum dolor sit amet consectetur adipisicing elit. Cupiditate, modi ipsam ullam architecto vitae sapiente excepturi sunt minus illo laboriosam assumenda dignissimos vel velit harum eaque dolorum deleniti dolorem nisi?</span> 
        <span>Lorem ipsum, dolor sit amet consectetur adipisicing elit. Veniam modi at sunt? Quae, veritatis. Voluptatibus, odit id maiores necessitatibus impedit soluta, et perspiciatis cum autem maxime, totam animi veniam? Libero?</span>
        <span>Lorem ipsum, dolor sit amet consectetur adipisicing elit. Veniam modi at sunt? Quae, veritatis. Voluptatibus, odit id maiores necessitatibus impedit soluta, et perspiciatis cum autem maxime, totam animi veniam? Libero?</span>
    </div>    
</body>
</html>

两栏布局-宽高自适应.gif

三栏布局

<!DOCTYPE html>
<html lang="en">
<head>
    <title>Document</title>
    <style>
        *{
            margin: 0;
            padding: 0;
        }
        html,body{
            height: 100%;
        }
        .header,.main,.footer{
            text-align: center;
            font:normal bolder 18px/45px Aria,微软雅黑;
        }
        .header{
            height:100px;
            background-color: #7D9870;
        }
        .main{
            /* PS:如果设置min-height,其子元素将无法设置height或min-height的百分比 */
            height: calc(100% - 200px); 
            background-color: #F4FBF1;
        }
        .footer{
            height: 100px;
            background-color: #7D9870;
        }
        .main>div{
            /* padding: 10px; */
            float: left;
        }
        .sideLeft,.sideRight{
            width: 180px;
            height: 100%;
            background-color: #B0AD88;
        }
        .section{
            width: calc(100% - 360px);
        }
        .main>div>span{
            display: block;
            margin: 15px;
        }
    </style>
</head>
<body>
    <div class="header">Header - 固定高度 自适应宽度</div>
    <div class="main">
        <div class="sideLeft"><span>sideLeft - 自适应高度 固定宽度</span></div>
        <div class="section">section - 自适应高宽度</div>
        <div class="sideRight"><span>sideRight - 自适应高度 固定宽度</span></div>
    </div>
    <div class="footer">Footer - 固定高度 自适应宽度</div>
</body>
</html>

三栏布局.png