CSS Calc
在CSS中,calc()
函数可以用来进行数学计算,可以在CSS属性中使用这个函数来动态计算数值。这个函数可以让我们更加灵活地控制元素的样式,特别是在响应式设计中非常有用。
基本语法
calc()
函数的基本语法如下:
width: calc(100% - 20px);
在这个例子中,width
属性的值是calc(100% - 20px)
,表示元素的宽度是父元素宽度的百分之百减去20像素。
示例代码
1. 计算宽度
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Calc Example</title>
<style>
.box {
width: calc(100% - 20px);
height: 100px;
background-color: #f0f0f0;
margin: 10px;
}
</style>
</head>
<body>
<div class="box"></div>
</body>
</html>
Output:
在这个例子中,.box
元素的宽度是父元素宽度减去20像素。
2. 计算字体大小
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Calc Example</title>
<style>
p {
font-size: calc(16px + 2vw);
}
</style>
</head>
<body>
<p>This is a sample text with dynamic font size.</p>
</body>
</html>
Output:
在这个例子中,p
元素的字体大小是16像素加上视窗宽度的百分之二。
3. 计算边距
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Calc Example</title>
<style>
.box {
width: 200px;
height: 200px;
margin: calc(50px / 2);
background-color: #f0f0f0;
}
</style>
</head>
<body>
<div class="box"></div>
</body>
</html>
Output:
在这个例子中,.box
元素的上下左右边距都是50像素的一半。
4. 计算宽度和高度
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Calc Example</title>
<style>
.box {
width: calc(50% - 20px);
height: calc(50% - 20px);
background-color: #f0f0f0;
margin: 10px;
}
</style>
</head>
<body>
<div class="box"></div>
</body>
</html>
在这个例子中,.box
元素的宽度和高度都是父元素宽度或高度的一半减去20像素。
5. 计算边框宽度
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Calc Example</title>
<style>
.box {
width: 200px;
height: 200px;
border: calc(10px / 2) solid #f0f0f0;
margin: 10px;
}
</style>
</head>
<body>
<div class="box"></div>
</body>
</html>
Output:
在这个例子中,.box
元素的边框宽度是10像素的一半。
6. 计算透明度
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Calc Example</title>
<style>
.box {
width: 200px;
height: 200px;
background-color: rgba(240, 240, 240, calc(0.5 + 0.1));
margin: 10px;
}
</style>
</head>
<body>
<div class="box"></div>
</body>
</html>
Output:
在这个例子中,.box
元素的背景色的透明度是0.5加上0.1。
7. 计算旋转角度
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Calc Example</title>
<style>
.box {
width: 200px;
height: 200px;
background-color: #f0f0f0;
transform: rotate(calc(45deg + 15deg));
margin: 10px;
}
</style>
</head>
<body>
<div class="box"></div>
</body>
</html>
Output:
在这个例子中,.box
元素被旋转了45度加上15度。
8. 计算阴影大小
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Calc Example</title>
<style>
.box {
width: 200px;
height: 200px;
background-color: #f0f0f0;
box-shadow: calc(10px / 2) calc(10px / 2) 10px rgba(0, 0, 0, 0.5);
margin: 10px;
}
</style>
</head>
<body>
<div class="box"></div>
</body>
</html>
Output:
在这个例子中,.box
元素的阴影大小是10像素的一半。
9. 计算旋转中心点
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Calc Example</title>
<style>
.box {
width: 200px;
height: 200px;
background-color: #f0f0f0;
transform-origin: calc(50% - 10px) calc(50% - 10px);
transform: rotate(45deg);
margin: 10px;
}
</style>
</head>
<body>
<div class="box"></div>
</body>
</html>
Output:
在这个例子中,.box
元素的旋转中心点是中心点向左上移动了10像素。
10. 计算动画时长
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Calc Example</title>
<style>
.box {
width: 200px;
height: 200px;
background-color: #f0f0f0;
animation: slide-in calc(1s + 0.5s) ease-in-out;
margin: 10px;
}
@keyframes slide-in {
from {
transform: translateX(-100%);
}
to {
transform: translateX(0);
}
}
</style>
</head>
<body>
<div class="box"></div>
</body>
</html>
Output:
在这个例子中,.box
元素的动画时长是1秒加上0.5秒。
11. 计算多个属性
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Calc Example</title>
<style>
.box {
width: calc(50% - 20px);
height: calc(50% - 20px);
margin: calc(10px / 2);
padding: calc(10px / 2);
background-color: #f0f0f0;
}
</style>
</head>
<body>
<div class="box"></div>
</body>
</html>
Output:
在这个例子中,.box
元素的宽度、高度、边距和内边距都是父元素的一半减去20像素或10像素的一半。
12. 计算多个值
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Calc Example</title>
<style>
.box {
width: calc(50% - 20px) calc(50% - 20px);
height: calc(50% - 20px) calc(50% - 20px);
background-color: #f0f0f0;
margin: 10px;
}
</style>
</head>
<body>
<div class="box"></div>
</body>
</html>
在这个例子中,.box
元素的宽度和高度分别是父元素宽度或高度的一半减去20像素。
13. 计算百分比和像素
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Calc Example</title>
<style>
.box {
width: calc(50% - 20px);
height: calc(50% - 20px);
background-color: #f0f0f0;
margin: 10px;
}
</style>
</head>
<body>
<div class="box"></div>
</body>
</html>
在这个例子中,.box
元素的宽度和高度分别是父元素宽度或高度的一半减去20像素。
14. 计算媒体查询
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Calc Example</title>
<style>
@media screen and (max-width: calc(768px - 20px)) {
body {
background-color: #f0f0f0;
}
}
</style>
</head>
<body>
<p>This is a sample text.</p>
</body>
</html>
Output:
在这个例子中,当视窗宽度小于768像素减去20像素时,背景色变为灰色。
15. 计算变量
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Calc Example</title>
<style>
:root {
--margin: 10px;
}
.box {
width: calc(50% - var(--margin));
height: calc(50% - var(--margin));
background-color: #f0f0f0;
margin: var(--margin);
}
</style>
</head>
<body>
<div class="box"></div>
</body>
</html>
在这个例子中,使用CSS变量来定义边距,然后在calc()
函数中使用这个变量。
16. 计算函数
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Calc Example</title>
<style>
.box {
width: calc(50% - min(20px, 10%));
height: calc(50% - max(20px, 10%));
background-color: #f0f0f0;
margin: 10px;
}
</style>
</head>
<body>
<div class="box"></div>
</body>
</html>
在这个例子中,使用min()
和max()
函数来计算宽度和高度。
17. 计算嵌套函数
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Calc Example</title>
<style>
.box {
width: calc(50% - min(20px, calc(10% + 5px)));
height: calc(50% - max(20px, calc(10% + 5px)));
background-color: #f0f0f0;
margin: 10px;
}
</style>
</head>
<body>
<div class="box"></div>
</body>
</html>
在这个例子中,使用嵌套的calc()
函数和min()
、max()
函数来计算宽度和高度。
18. 计算表格布局
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Calc Example</title>
<style>
table {
width: calc(100% - 20px);
border-collapse: collapse;
}
th, td {
border: 1px solid #f0f0f0;
padding: 10px;
}
</style>
</head>
<body>
<table>
<tr>
<th>Header 1</th>
<th>Header 2</th>
</tr>
<tr>
<td>Data 1</td>
<td>Data 2</td>
</tr>
</table>
</body>
</html>
Output:
在这个例子中,表格的宽度是父元素宽度减去20像素。
19. 计算网格布局
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Calc Example</title>
<style>
.container {
display: grid;
grid-template-columns: repeat(3, calc(33.33% - 10px));
grid-gap: 10px;
}
.item {
background-color: #f0f0f0;
padding: 10px;
}
</style>
</head>
<body>
<div class="container">
<div class="item">Item 1</div>
<div class="item">Item 2</div>
<div class="item">Item 3</div>
</div>
</body>
</html>
Output:
在这个例子中,使用网格布局创建一个包含3列的容器,每列的宽度是父元素宽度的1/3减去10像素。
20. 计算动态值
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Calc Example</title>
<style>
:root {
--width: 200px;
}
.box {
width: calc(var(--width) - 20px);
height: calc(var(--width) - 20px);
background-color: #f0f0f0;
margin: 10px;
}
</style>
</head>
<body>
<div class="box"></div>
</body>
</html>
Output:
在这个例子中,使用CSS变量定义一个动态值,然后在calc()
函数中使用这个变量来计算宽度和高度。