calc()语法规则

1、calc()中的参数是一个计算公式

这个计算公式把计算宽度和数值的任务扔给不同尺寸下的浏览器,让页面能够自己得出宽度或数值的结论,这些计算公式也都是很简单的加( )减( - )乘( * )除( / )运算。

div{
    width: calc(15px   15px);//30px
    width: calc(15px - 10px);//5px
    width: calc(15px*2);//30px
    width: calc(15px/3);//5px
}
  • 加( )减( - )运算中需要计算的数值与运算符之间是有空格的
  • 可以使用百分比、px、em、rem等单位进行计算的,并且单位可以混在一起计算:
div{
    width: calc(3em   5px);//53px
}

支持"+", “-”, “*”, "/"四则运算,又有区别

//(+、-)要求这两个数都是长度
.foot {
 /* 有效 */
 margin: calc(100px + 100px);
 
  /* 无效 */
 margin: calc(10px + 5);
}
//除法(/)要求第二个数字是无单位的
.foot {
 /* 有效的? */
 margin: calc(30px / 3);

 /* 无效的? */
 margin: calc(30px / 10px);

 /* 无效的?  (不能除以0) */
 margin: calc(30px / 0);
}
//乘法(*)要求其中一个数是无单位的。
.foot {
 /* 有效的 ? */
 margin: calc(10px * 3);

 /* 有效的 ? */
 margin: calc(3 * 10px);

 /* 无效的 ? */
 margin: calc(30px * 3px);
}
//加法和减法要加前后空格
//负数是可以的(例如 calc(5vw - -5px) ),但这是一个例子,说明空格不仅是必需的,而且是有用的
.foot {
 /* 有效的 ? */
 font-size: calc(3vw + 2px);

 /* 无效的 ? */
 font-size: calc(3vw+2px);

 /* 有效的 ? */
 font-size: calc(3vw - 2px);

 /* 无效的 ? */
 font-size: calc(3vw-2px);
}
//calc() 与开头括号之间没有空格。
.foot {
 /* 无效的 ? */
 width: calc (100% / 3);
}

CSS有很多长度,它们都可以与calc() 一起使用:

px % em rem in mm cm pt pc ex ch vh vw vmin vmax

二、calc()嵌套

calc()是一个函数,那么函数是可以支持嵌套的,可以通过不同的公式来算出最后的结果。

div{
    --widthA: calc(10px   190px);
    --widthB: calc(var(--widthA) / 2);
    --widthC: calc(var(--widthB) / 2);
    width: var(--widthC);//50px
}
.foot {
   width: calc( 100% / calc(100px * 2) );
}

三、不能在媒体查询中使用

@media (max-width: 40rem) {
  /* Narrower or exactly 40rem */
}

/* 无效 */
@media (min-width: calc(40rem + 1px)) {
  /* Wider than 40rem */
}

四、支持大多数浏览器,对于不支持的可以写后补;

.foo {
   width: 90%; /* 浏览器不支持是启用*/
   width: calc(100% - 50px);
}

五、元素垂直居中(已知元素尺寸)

// foot的元素宽高均为300px
.foot {
    position: absolute
    top: 50%;
    left: 50%;
    marging-top: -150px;
    margin-left: -150px;
}
//calc()写法
.foot {
    position: absolute
    top: calc(50% - 150px);
    left: calc(50% - 150px);
}

六、渐变色

.foot {
  background: #1E88E5 linear-gradient(
    to bottom,
    #1E88E5,
    #1E88E5 calc(50% - 10px),
    #3949AB calc(50% + 10px),
    #3949AB
  );
}

七、CSS自定义属性和calc()

html {
  --spacing: 10px;
  --spacing-L: var(--spacing) * 2;
  --spacing-XL: var(--spacing) * 3;
}

.module[data-spacing="XL"] {
  padding: calc(var(--spacing-XL));
}

<div style="--index: 1;"> ... </div>
<div style="--index: 2;"> ... </div>
<div style="--index: 3;"> ... </div>
div {
  /* Index value comes from the HTML (with a fallback) */
  animation-delay: calc(var(--index, 1) * 0.2s);
}

八、清晰可读

//更加清晰可读
.foot {
    width: 16.666666667%;
}
.foot {
    width: calc(100% / 6);
}

九、创建根栅格尺寸( 1rem 宽度的元素总是视口元素宽度的 1/30)

html {  
    font-size: calc(100vw / 30);
}

十、与预处理器数学比较

.foot {
  width: calc(10px + 50px);
}
//组合不同单元; .foot元素总是小于它父元素宽度 50px;
//使用 calc(),计算值是表达式它自己,而非表达式的结果
.foot {
    width: calc(100% - 50px);
}

//  SCSS 等同于 width: 150px;
//当使用 CSS 预处理器做数学运算时,给定值为表达式的结果。
.foot {
    width: 100px + 50px;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: calc1.l、calc1.y、calc2.l和calc2.y是一种被称为Lex和Yacc的工具组合,用于生成词法分析器和语法分析器。 calc1.l文件是Lex文件,包含对输入文本进行词法分析的规则。这些规则定义了如何将输入文本切分成一个个词法单元,例如标识符、关键字、运算符等。calc1.l文件还可以执行词法单元的一些简单处理,例如去除空格、注释等。 calc1.y文件是Yacc文件,包含了对输入文本进行语法分析的规则。这些规则描述了输入文本的语法结构,即如何将词法单元按照语法规则组合成整体的语法结构。calc1.y文件还可以执行一些语义动作,例如生成抽象语法树,以便进行后续的语义分析和代码生成。 calc2.l和calc2.y文件类似于calc1.l和calc1.y文件,但可能包含不同的规则语法结构。这取决于具体的应用场景和需求。例如,calc2.l和calc2.y可以用于解析另一种编程语言或特定的文件格式。 综上所述,calc1.l、calc1.y、calc2.l和calc2.y是用于生成词法分析器和语法分析器的工具文件。它们通过定义词法规则语法规则,帮助开发人员构建用于编译、解析和处理特定文本的工具。 ### 回答2: calc1.l, calc1.y, calc2.l, calc2.y 是一类用于构建计算器的代码文件。 calc1.l 是一个词法分析器(lexer)文件。它使用 Flex 工具来处理输入的字符流,并将其转化为一个单个单词(token)序列。词法分析器负责识别输入中的每个单词及其对应的类型,如关键字、标识符、运算符、常量等。 calc1.y 是一个语法分析器(parser)文件。它使用 Yacc 或 Bison 工具来处理由词法分析器生成的单词序列,并根据语法规则构造语法树。语法分析器负责检查输入的语法是否符合指定的语法规则,并将其转换为可执行代码。 calc2.l 和 calc2.y 可能是 calc1.l 和 calc1.y 的变种,或者是 calc1.l 和 calc1.y 的升级版本。这两个文件通常表示了对计算器的改进或扩展。可能通过添加更多的词汇、引入更复杂的语法规则、支持新的操作符或函数等方式,提供了更丰富的功能和更高的灵活性。 以上就是关于 calc1.l, calc1.y, calc2.l, calc2.y 的简要介绍。这些文件在构建计算器这类程序中起到重要的作用,使得输入的表达式能够被正确解析和计算。 ### 回答3: calc1.l、calc1.y、calc2.l、calc2.y是四个文件的名称,它们通常被用于构建基于词法分析和语法分析的编译器或解释器。 calc1.l文件通常是使用Lex工具生成的词法分析器。这个文件定义了一系列正则表达式规则,用来匹配输入源代码中的词法单元。它会将源代码中的文本分解成一系列标记,例如关键字、标识符、运算符等。这些标记将被传递给calc1.y文件进行语法分析。 calc1.y文件通常是使用Yacc或Bison工具生成的语法分析器。这个文件定义了代码语法规则和语义动作。它将接收从calc1.l文件传递过来的标记流,并根据语法规则进行分析和解释。它会构建一个语法树,用来表示源代码的结构,并根据语义动作对其进行处理,例如执行计算、生成中间代码等。 类似地,calc2.l和calc2.y文件也是词法分析器和语法分析器。它们可能与calc1.l和calc1.y文件有一些细微的差别,例如支持不同的语法规则、词法单元等。这些文件之间的区别往往取决于具体的编程语言或领域需求。 总之,这四个文件是构建词法分析器和语法分析器所必需的组成部分。它们共同协作,将源代码进行分析和解释,从而实现编译器或解释器的功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

都挺好,刚刚好

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值