美文网首页前端攻城狮
css3 响应式神器 calc()

css3 响应式神器 calc()

作者: lucy_ | 来源:发表于2016-03-14 23:45 被阅读1633次

    背景:

    大家经常为遇到类似卡片的设计稿,如果卡片与卡片之间没有距离,如

    那写 width: 33.33%是没有什么问题的

    那如果是以下这种情况呢

    图片与图片之间的距离是 20px,那响应式处理起来难免麻烦。虽然可以通过 js 计算宽度解决,或者修改布局使用 box-sizing 解决。但是这些方法难免会让宝宝心里奔溃/(ㄒoㄒ)/~~。接下来开始介绍 calc()

    是啥东东

    css3 新增的一个函数取值,用于动态计算长度值,参数可以是百分比、em、px和rem单位值,如width: calc(100% - 22px)。如上面的例子,可以这样解决 width: calc((100% - 40px)/3)。是不是酷酷哒~~

    语法

    calc()函数支持 +, -, *, / 运算,可以单一单位 或者 混合单位使用。

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

    注意:

    1. + , - 号前后需要使用空格隔开,不可写成 calc(100px-2px)
    2. * , / 号前后可不需要空格隔开

    兼容性

    兼容性前缀:

    .div {
      width: calc(80% - 10px);
      /*Firefox*/
      width: -moz-calc(80% - 10px);   
      /*chrome safari*/
      width: -webkit-calc(80% - 10px); 
    }
    

    在 less 如何使用

    需要在参数外面加上: ~("expression"),如:

     .div {
      width: calc(~"100% - 80px");
    }
    

    最后

    类似的 css3 函数还有:
    min():min(10% + 20px, 300px) // 用于比较数值的大小并取出最小的那个
    max():max(10% + 20px, 150px) // 用于比较数值的大小并取出最大的那个
    cycle(): //允许子孙元素使用取值序列中的值循环替换继承而来的值

    但是目前这三种函数还没有浏览器支持,所以,让我们一起期待。。。

    相关文章

      网友评论

      • 8cc774832fe9:这么久了,不知道有没有人回复...
        我用了这个方法但是出现了问题
        <style>
        ul#testTube {
        width:1000px;
        height:300px;
        list-style:none;
        background: lightblue;
        margin: 0 auto;
        padding: 0;
        clear: both;
        }
        li#ingredients01 {
        background-color: #4dbded;

        /*background-size: 100% 100%;*/
        width: -moz-calc((100% - 40px)/3);
        width: -webkit-calc((100%-40px)/3);
        width: calc((100% - 40px)/3);
        }
        li#ingredients02 {
        background-color: #2f9bc9;

        /*background-size: 100% 100%;*/
        width: -moz-calc((100% - 40px)/3);
        width: -webkit-calc((100%-40px)/3);
        width: calc((100% - 40px)/3);
        }
        li#ingredients03 {
        background-color: #136182;
        width: -moz-calc((100% - 40px)/3);
        width: -webkit-calc((100%-40px)/3);
        width: calc((100% - 40px)/3);

        }
        li.pic{
        height: 200px;
        float: left;
        margin: 0;

        }

        </style>
        <ul id="testTube"/>
        <li id="ingredients01" class="pic"><img src="images/4.jpg" alt="" /></li>
        <li id="ingredients02" class="pic"><img src="images/1.jpg" alt="" /></li>
        <li id="ingredients03" class="pic"><img src="images/2.jpg" alt="" /></li>

        </ul>
        我的三个li没有平均分布,ul右边竟然有个内边距,实在想不通为什么?
        lucy_:你好,不知道你的问题解决了没。按照你的例子,li 于 li 之间应该是 20px 的边距。将 li.pic 的样式替换成试试。
        ```
        li.pic {
        height: 200px;
        float: left;
        margin: 0;
        margin-right: 20px;
        }
        li:last-child {
        margin-right: 0;
        }
        ```
        尖叫蕈辛:calc() 中, 加减前后必须加空格, 你去掉空格试试
      • 陈岳陵:我是雇来的水军 :smiley:

      本文标题:css3 响应式神器 calc()

      本文链接:https://www.haomeiwen.com/subject/iygflttx.html