CSS3 的 calc属性

参考:https://www.jianshu.com/p/b9bc930dd316

1. 简介

calc 是英文单词 calculate(计算) 的缩写,是 css3 的一个新增的功能,可以使用 calc() 给元素的 border、margin、pading、font-size 和 width 等属性设置动态值。

calc() 能给元素的某些属性做计算,可以给一个 div 元素,使用百分比、em、px 和 rem 单位值计算出其宽度或者高度,比如说:width:calc(50% + 2em)

2. 语法

.elm {
    width: calc(expression);//其中"expression"是一个用来计算长度的表达式
}

3. 运算规则

(1)使用“+”、“-”、“*” 和 “/”四则运算;

(2)可以使用百分比、px、em、rem等单位;

(3)可以混合使用各种单位进行计算;

(4)表达式中有“+”和“-”时,其前后必须要有空格,如"widht:calc(12%+5em)"这种没有空格的写法是错误的;

(5)表达式中有“*”和“/”时,其前后可以没有空格,但建议留有空格。

4. 例子

例子1:

图片说明

每个格子width随着浏览器的放大缩小而改变

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1" />
        <title>calc</title>
        <style type="text/css">
            * {margin: 0;padding: 0;}
            .col-3 {
                width: calc(100%/4 - 5px);
                float: left;
                margin-right: calc(5px*4/3);
                background: #eee;
                color: #333;
                height: 100px;
                text-align: center;
                margin-bottom: calc(5px*4/3);
                font-size: 18px;
                line-height: 100px;
            }
            .col-3:nth-child(4n) {margin-right: 0;}
        </style>
    </head>
    <body>
        <div class="container">
            <div class="col-3">1</div>
            <div class="col-3">2</div>
            <div class="col-3">3</div>
            <div class="col-3">4</div>
            <div class="col-3">5</div>
            <div class="col-3">6</div>
            <div class="col-3">7</div>
            <div class="col-3">8</div>
            <div class="col-3">9</div>
            <div class="col-3">10</div>
            <div class="col-3">11</div>
            <div class="col-3">12</div>
            <div class="col-3">13</div>
            <div class="col-3">14</div>
            <div class="col-3">15</div>
            <div class="col-3">16</div>
        </div>
    </body>
</html>

例子2:

图片说明

a1和a2之间、跟页面左右间隔都是30px,其宽度随着页面宽度而自适应

<!DOCTYPE html>
<html>

    <head>
        <meta charset="UTF-8">
        <title></title>
        <style>
            .container {
                width: 500px;
                height: 100px;
                background: pink;
                margin: 50px auto;}
            .a1 {
                float: left;
                margin: 30px 15px 0 30px;
                width: -webkit-calc((100% - 90px)/2);
                background: red;
            }
            .a2 {
                float: left;
                margin: 30px 30px 0 15px;
                width: -webkit-calc((100% - 90px)/2);
                background: green;
            }
        </style>
    </head>
    <body>
        <div class="container">
            <div class="a1"> a1 </div>
            <div class="a2"> a 2 </div>
        </div>
    </body>
</html>