CSS calc() 函数

CSS 的 calc() 函数允许我们通过表达式来计算属性值。例如:

h1 {
    width: calc(100% - 100px);
    background-color: greenyellow;
}

浏览器输出

CSS Calc() Example

在此,h1 元素的 width 是通过 calc() 函数计算得出的。

calc() 函数常用于灵活且响应式的布局。它有助于调整宽度、高度、边距、内边距、字体大小,并且能很好地与媒体查询配合使用。


CSS calc() 语法

calc() 函数的语法如下:

property: calc(expression);

此处,expression 可以是任何基于数字的表达式。

表达式可以是以下运算符的组合:

  • +:通过将两个操作数相加来计算值
  • -:通过将两个操作数相减来计算值
  • *:通过将两个操作数相乘来计算值
  • /:通过将第一个操作数除以第二个操作数来计算值

表达式中的操作数可以是任何单位,例如 px%em 等。


示例:CSS calc() 函数

让我们看看如何使用 calc() 函数来设置元素的 widthheight

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

    <head>
        <meta charset="UTF-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <link rel="stylesheet" href="style.css" />
        <title>CSS calc()</title>
    </head>

    <body>
        <div class="addition">width: calc(80% + 40px)</div>
        <div class="subtraction">width: calc(80% - 40px)</div>
        <div class="division">width: calc(100% / 4)</div>
        <div class="multiplication">width: calc(25% * 4)</div>
    </body>

</html>
div.addition {
    width: calc(80% + 40px);
}

div.subtraction {
    width: calc(80% - 40px);
}

div.division {
    width: calc(100% / 4);
}

div.multiplication {
    width: calc(25% * 4);
}

div {
    border: 2px solid black;
    background-color: greenyellow;
    margin-bottom: 12px;
}

浏览器输出

CSS Calc Example

上面的示例说明了如何使用不同的运算符的 calc() 函数来计算 div 元素的 width


要点

calc() 函数要求运算符的行为有所不同。让我们看看要点:

1. 加法 (+) 和减法 (-) 运算符要求数字具有长度单位,并且必须用空格分隔。例如:

/* valid */
margin: calc(8px + 10px);

/* invalid, 10 don't have any length unit */
margin: calc (8px + 10);

/* invalid (no space between + operator) */
margin: calc(8px+10px);

2. 除法 (/) 运算符要求第二个数字是无单位的。例如:

/* valid */
margin: calc(80px / 5);

/* invalid (the second unit has the length unit) */
margin: calc(80px / 5px)

/* valid (space is not compulsory) */
margin: calc(80px/5)

3. 乘法 (*) 运算符要求其中一个操作数是无单位的。操作数的顺序无关紧要。例如:

/* valid */
margin: calc(20px * 3);

/* valid */
margin: calc(3 * 20px)

/* invalid (one operand should be unitless */
margin: calc(3px * 20px)

混合单位

calc() 函数表达式中的长度单位可以混合使用以计算单个值。例如:

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

    <head>
        <meta charset="UTF-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <link rel="stylesheet" href="style.css" />
        <title>CSS calc()</title>
    </head>

    <body>
        <p>
            The calc(100% - 100px) function reduces the width by 100px from the
            entire width of the paragraph. The 100px space is distributed in the
            horizontal margin.
        </p>
    </body>

</html>
p {
    /* reduces 100px width from the entire width */
    width: calc(100% - 100px);

    /* distributes the 100px space evenly for the horizontal margin. */
    margin: auto;

    background-color: greenyellow;
    border: 2px solid black;
}

浏览器输出

CSS Mixing Calc Units Example

在上面的示例中,calc(100%-100px)p 元素的宽度从总宽度中减去了 100px。剩余的 100px 宽度分布在水平外边距中。


CSS 嵌套 calc() 函数

calc() 函数可以嵌套以执行复杂的计算,并创建更具动态性和灵活性的样式。例如:

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

    <head>
        <meta charset="UTF-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <link rel="stylesheet" href="style.css" />
        <title>CSS calc()</title>
    </head>

    <body>
        <div class="first">width: 400px;</div>
        <div class="second">width: calc(400px - calc(100px + 60px))</div>
        <div class="third">width: calc(calc(100% - 20px) / 2);</div>
    </body>

</html>
div.first {
    width: 400px;
    background-color: skyblue;
}

div.second {
    width: calc(500px - calc(100px + 60px));
    background-color: greenyellow;
}

div.third {
    width: calc(calc(100% - 50px) / 2);
    background-color: orange;
}

div {
    border: 2px solid black;
    margin: 12px;
}

浏览器输出

CSS Nested Calc Example

上面的示例说明了如何使用嵌套的 calc() 函数来创建不同的宽度。

内部的 calc() 函数会首先计算,然后是外部函数。

内部的 calc() 函数被视为简单的括号。因此,我们可以仅使用一对括号来确定运算顺序,并获得相同的结果。例如:

width: calc(400px - calc(100px + 60px))

等同于:

width: calc(400px - (100px + 60px))

与使用 calc() 函数指定运算顺序相比,这更容易阅读。

我们的高级学习平台,凭借十多年的经验和数千条反馈创建。

以前所未有的方式学习和提高您的编程技能。

试用 Programiz PRO
  • 交互式课程
  • 证书
  • AI 帮助
  • 2000+ 挑战