css calc()不起作用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了css calc()不起作用相关的知识,希望对你有一定的参考价值。

参考技术A calc函数运用最多的场景就是css设置百分比之后需要机上或者减去一些固定长度,比如后台管理系统的左侧菜单栏,高度100%但是需要减去最上方的logo,系统名称的高度什么的,应该是最常见的运用calc计算属性设置高度。

这个写法不会生效,原因可能有两个:

1.运算符前后需要加上空格

    正确写法是 height: calc(100% - 50px);

2.父容器需要设置高度才能生效

    如果按照1的写法还是无法设置div高度,原因可能就是父容器没有设置高度,这个算法一定要在父容器有高度的情况下才能生效。

我可以在 Javascript 中使用 CSS calc 吗?

【中文标题】我可以在 Javascript 中使用 CSS calc 吗?【英文标题】:Can I use CSS calc within Javascript? 【发布时间】:2017-04-13 18:12:36 【问题描述】:

在 JavaScript 中设置位置时可以使用 css calc() 函数吗?

ePopup.style.top = "calc(100px - 1.5em)";

【问题讨论】:

我当然试过了,好像没用。它不起作用是因为我做了一些语法错误的事情还是因为它本质上不起作用。 @JakeWilson - 您几年前的编辑掩盖了导致 OP 问题的错字。该帖子最初显示的是 ;在 CSS 字符串的末尾(在引号内),它无法将属性留空。我犯了同样的错误,发现了这个。但是现在完全不清楚为什么 OP 的代码失败了。 【参考方案1】:

是的,calc() 将在 javascript 中设置样式时起作用。

工作示例:

var innerDiv = document.getElementsByClassName('inner-div')[0];

function growInnerDiv() 
    innerDiv.style.setProperty('width', 'calc(100% + 224px)');


innerDiv.addEventListener('click', growInnerDiv, false);
.outer-div 
    display: inline-block;
    width: 200px;
    height: 100px;
    padding: 12px;
    border: 1px solid rgb(255,0,0);
    background-color: rgb(255,255,0);


.inner-div 
    width: 100px;
    height: 100px;
    color: rgb(255, 255, 255);
    font-weight: bold;
    text-align: center;
    line-height: 100px;
    font-family: arial, helvetica, sans-serif;
    background-color: rgb(255,0,0);
    cursor: pointer;
    transition: all 0.5s linear;
<div class="outer-div">
    <div class="inner-div">Click Me</div>
<div>

【讨论】:

很高兴知道 calc 可以在 Javascript 中运行,因此我将坚持尝试在我的页面上使其工作,而不是放弃并尝试其他方法。非常感谢您的回答,尽管问题得到了 7 分。 不客气,@NickC。我认为您的问题完全公平 - 当一个流程不起作用时,隔离该流程中不起作用的组件而不是做出假设至关重要 - 所以我给了您的问题一个赞成票。 我的印象是它真的想要空间,calc(1em + 10%) 而不是 calc(1em+10%) 是的,@FlorianB,在 CSS 中编写 calc() 函数时,您必须用空格将运算符括起来。【参考方案2】:

当您将calc 与相同类型的单位一起使用时,会发生一些有趣的事情,例如10px + 5px。通过将其放到元素上的过程,它被简化为15px

因此,为了扩展 rounin 的出色答案,以下是该行为的一些示例:

function growDiv(e) 
        const thisDiv = e.target;
        const x = 100;
        const y = 42;
        const z = 69;
        let widthVal;

        if (thisDiv.id == "simplifies") 
          widthVal = `calc($y + zpx + $xpx + $ypx)`;
         else if (thisDiv.id == "mixed-units") 
          widthVal = `calc(0em + $y + zpx + $x * 2px + $ypx)`;
         else if (thisDiv.id == "variables") 
          thisDiv.style.setProperty("--x", x + "px");
          thisDiv.style.setProperty("--y", y + "px");
          thisDiv.style.setProperty("--z", z + "px");
          widthVal = "calc((var(--x) * 2) + var(--y) + (var(--z) * 2))";
        

        thisDiv.style.width = widthVal;
        thisDiv.innerHTML =
          `input: $widthVal<br>style:$thisDiv.style.width`;
      

      document
        .querySelectorAll("div")
        .forEach((el) => el.addEventListener("click", growDiv, false));
.inner-div 
        background-color: hotpink;
        color: white;
        font-weight: bold;
        height: 100px;
        margin-bottom: 5px;
        text-align: center;
        transition: all 0.5s linear;
        width: 100px;
      
<div class="inner-div" id="simplifies">simplifies<br />1) Click Me</div>
<div class="inner-div" id="mixed-units">mixed-units<br />2) Click Me</div>
<div class="inner-div" id="variables">variables<br />3) Click Me</div>
    

Div 1 具有所有相同的单位,因此简化了。

Div 2 有一个标记 0em 单元,这对计算没有影响,但会强制完整的表达式通过。

Div 3 是我最喜欢的,因为它有点自我记录。我这样做是因为我有点健忘,它让我明白为什么我将该元素设置为 728.3 高,而不仅仅是 我所做的

【讨论】:

以上是关于css calc()不起作用的主要内容,如果未能解决你的问题,请参考以下文章

使用带有 Calc() 的 CSS 变量在第二个参数时不起作用

使用 calc() 的 CSS 过渡在 IE10+ 中不起作用

CSS calc 在 Safari 和回退中不起作用

calc() 在媒体查询中不起作用

width:calc()在Firefox中不起作用

calc() 在 Firefox 中不起作用