CSS calc()函数的使用

本文详细介绍了CSS calc()函数的使用,包括如何使用表达式进行计算,注意事项如空格使用,以及在不同场景下的应用。还讨论了浏览器的兼容性和实际使用时可能需要添加的浏览器前缀。通过示例展示了calc()在设置元素尺寸、适应容器大小、CSS变量嵌套以及文本长度控制等方面的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

解释

先看一段css样式代码:

.nav{
	/*width:200px;*/
	width: calc(100% - 80px);
}

根据mdn文档解释,calc()是css函数,用于在声明css属性值时执行一些计算。
可以用在如下场合:、、、

calc()函数用一个表达式作为它的参数,用这个表达式的结果作为值。表达式可以是任意 + - * / 操作符的组合并采用标准操作符处理法则的简单表达式。
操作符场景使用注意
+
-
*乘数中至少要有一个是number类型
/除数必须是number类型
表达式中的操作数客可以使用任意 length 值。可以在表达式中混用这类值的不同单位,同样也可用小括号来建立计算顺序。
:除法计算中,用0作除数会让HTML解析器抛出异常。
:+ 和 - 运算符的两边必须始终要有空白符。比如 calc(50% -8px) 会被解析成为一个无效的表达式:一个百分比后跟一个负数长度值。而 calc(8px + -50%) 会被解析成为一个长度后跟一个加号再跟一个负百分比。
:* 和 / 运算符不需要空白符,但考虑到统一性,仍然推荐加上空白符。
:涉及自动和固定布局表中的表列,表列组,表行,表行组和表单元格的宽度和高度百分比的数学表达式可视为已指定auto。

浏览器兼容性

浏览器对calc()的兼容性还算不错,在IE9+、FF4.0+、Chrome19+、Safari6+都得到较好支持,同样需要在其前面加上各浏览器厂商的识别符,不过可惜的是,移动端的浏览器对早期版本的兼容性不是太好。
在这里插入图片描述
目前在使用时,似乎还是需要添加浏览器的前缀:

.main {
/*Firefox*/
	-moz-calc(expression);
	/*chrome safari*/
	-webkit-calc(expression);
	/*Standard */
	calc();	
}

calc使用案例解析

使用指定的外边距定位一个元素

.banner {
    position: absolute;
/* fallback for browsers which still doesn't support for `calc()` */
    left: 5%;
    width: 90%;
/* overwrite, if the browsers support for `calc()`*/
    left: calc(40px);
    width: calc(100% - 80px);
    border: 1px solid black;
    box-shadow: 1px 2px;
    background-color: yellow;
    padding: 6px;
    text-align: center;
}
<div class="banner">This is a banner!</div>

自动调整表单域的大小以适应其容器的大小

calc() 的另外一个用例是用来确保一个表单域的大小适合当前的可用空间,而不会在保持合适的外边距的同时,因挤压超出其容器的边缘.

input {
  padding: 2px;
  display: block;
  width:  98%; 
/* fallback for browsers without support for calc() */
  width:  calc(100% - 1em);  
}

#formbox {
  width:  130px; 
/* fallback for browsers without support for calc() */
  width:  calc(100% / 6);   
  border: 1px solid black;
  padding: 4px;
}

这个例子中, form 元素自身使用了窗口可用宽度的1/6,然后,为了让 form 元素内部的input元素保持合适的大小,我们再一次使用了 calc(),让它的宽度为其容器的宽度减1em.下面的HTML使用了上面的CSS:

<form>
  <div id="formbox">
  <label>Type something:</label>
  <input type="text">
  </div>
</form>

使用CSS变量来嵌套calc()

.foo {
  --widthA: 100px;
  --widthB: calc(var(--widthA) / 2);
  --widthC: calc(var(--widthB) / 2);
  width: var(--widthC);
}

在所有的变量都被展开后, widthC 的值就会变成 calc( calc( 100px / 2) / 2),然后当它被赋值给 .foo 的 width属性 时,所有内部的这些calc()(无论嵌套的有多深)都将会直接被“拍”成一个括号(原文:be flattened to just parentheses),所以这个 width属性 的值就直接相当于 calc( ( 100px / 2) / 2)了,或者说就变成25px了。 简而言之:一个 calc() 里面的 calc() 就仅仅相当于是一个括号。

当calc()被用于控制文本的长度时,确保值包含一个相对长度单位,例如:

h1 {
  font-size: calc(1.5rem + 3vw);
}

这可以保证文本的长度会缩放如果页面缩放。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值