前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >css3中的函数,你曾用几个?

css3中的函数,你曾用几个?

作者头像
Maic
发布2023-09-11 13:19:02
1590
发布2023-09-11 13:19:02
举报
文章被收录于专栏:Web技术学苑Web技术学苑

css3在切图中占有半壁江山的位置,所谓人靠衣装,马靠鞍,一个网站好不好看除了设计本身,合理的布局以及完美css布局会让视觉更上一层楼

今天主要分享几个在css3中常用的函数,希望看完在项目中有所思考和帮助

正文开始...

calc

这是一个计算函数,通常在业务上使用也是非常之多,比如一个场景,一个三栏结构,如果想让内容铺满整个内容,但是头部与底部高度固定

有人说这个布局最简单,首先我想到的就是flex,比如你很快像下面这样写

代码语言:javascript
复制
<div class="app">
  <header>我是Header</header>
  <main>这是内容</main>
  <footer>这是footer</footer>
</div>

对应的css如下

代码语言:javascript
复制
  * {padding: 0;margin:0;}
  html,body {height: 100%;}
  .app {
      display: flex;
      flex-direction: column;
      height: 100%;
  }
  .app header {
     height: 50px;
     line-height: 50px;
     background-color: red;
  }
  .app main {
      flex:1;
      background-color: green;
  }
  .app footer {
      height: 80px;
      line-height: 80px;
      background-color: #111;
      color: #fff;
  }

预览

有人还想到另一种方式,我用grid实现

代码语言:javascript
复制
* {padding: 0;margin:0;}
html,body {height: 100%;}
.app {
      height: 100%;
      display: grid;
      grid-template-columns: 1fr;
      grid-template-rows: 50px 1fr 80px;
  }
  .app header {
     line-height: 50px;
     background-color: red;
  }
  .app main {
      background-color: green;
  }
  .app footer {
      line-height: 80px;
      background-color: #111;
      color: #fff;
  }

张三看到使用grid,嗯,very good,小伙子骨骼惊奇,我再授一种方案

我们知道块级元素文档流是从上往下依次排列的,所以我只需要借助这个特性,并且借助calc就可以实现了

  • 单独计算main中间内容的高度height: calc(100% - 50px - 80px)
代码语言:javascript
复制
 * {padding: 0;margin:0;}
 html,body {height: 100%;}
  .app {
      height: 100%;
  }
  .app header {
     height: 50px;
     line-height: 50px;
     background-color: red;
  }
  .app main {
      background-color: green;
      height: calc(100% - 50px - 80px);
  }
  .app footer {
      height: 80px;
      line-height: 80px;
      background-color: #111;
      color: #fff;
  }

嗯,非常不错,小弟甘拜下风。

attr

calc很强大,但今天有一个css3技能必须让你感受她的强大,那就是传说中的attr

attr这个函数是一个非常有名的函数,那么她可以做什么呢?

在你的业务中,假设你的一个列表中需要展示不同的图标,那么你就可以借助attr来巧妙的实现你的需求

代码语言:javascript
复制
<head>
<link rel="stylesheet" href="//at.alicdn.com/t/c/font_3844652_3qxwqjxiuyp.css">
 <style>
    * {padding: 0;margin:0;}
    html,body {height: 100%; }
    #app {
        height: 100%;
    }
    #app div::before {
        font-family: "iconfont";
        content: attr(data-uniCode);
    }
    </style>
</head>
 <body>
   <div id="app"></div>
  </body>
 <script>
  const app = document.getElementById('app');
  const dataSource = [
      {
          title: "公众号:Web技术学苑",
          uniCode: "&#xe611;"
      },
      {
          title: "公众号:前端之巅",
          uniCode: "&#xe60f;"
      },
      {
          title: "公众号:前端之神",
          uniCode: "&#xe8bc;"
      },
      {
          title: "公众号:itclanCoder",
          uniCode: "&#xe60d;"
      }
  ];
  let htmlTemplate = "";
  dataSource.forEach(item => {
      htmlTemplate+=`<div data-uniCode=${item.uniCode}>${item.title}</div>`
  });
  app.innerHTML = htmlTemplate;
</script>

我们发现在源数据中,我们使用了uniCode,这个uni-code实际上就是我们的阿里矢量图标库

预览结果

attr是一个很强大的函数,除了在业务中你使用它来加载unicode图标,你也可以用来加载一段文字

代码语言:javascript
复制
<div id="app">
  <div data-text="Web技术学苑"></div>
</div>

对应的css如下

代码语言:javascript
复制
<style>
  * {padding: 0;margin:0;}
  html,body {height: 100%; }
  #app {
      height: 100%;
      display: flex;
      flex-direction: column;
      justify-content: center;
      align-items: center;
  }
  #app div::before {

      content: attr(data-text);
      display: block;
  }  
</style>

var

这是一个css3中非常有用的一个函数,通常来讲你想加载css3中的变量就必须使用var,比如说

代码语言:javascript
复制
 <div id="app">
  <div class="text">Web技术学苑</div>
</div>

对应的css如下

代码语言:javascript
复制
<style>
  * {padding: 0;margin:0;}
  html,body {height: 100%; }
  :root {
      --text-color: red;
  }
  .text {
    color: var(--text-color)
  }
</style>

var函数基本在换肤主题,必然是一个高频函数,因此它是一个很常用的函数

clamp(min,default,max)

min最小值,default默认首选值,max最大值,当default大于max,则会取max,当default小于min时,则会取min,当在minmax之间时,则会取默认值。通常我们可以保证一个元素的最大值与最小值,在这范围内,就获取默认值。

代码语言:javascript
复制
<div class="text">
    <h1 class="title">Web技术学苑</h1>
    <p class="content">hello world</p>
  </div>

对应的css

代码语言:javascript
复制
 * {padding: 0;margin:0;}
html,body {height: 100%; font-size:16px }
:root {
    --text-color: red;
}
.text {
    color: var(--text-color);
    width: min(500px, calc(80% + 100px));
    background-color: green;
}
.text .title {
    font-size: clamp(2rem, 2.5vw, 3rem);
}
.text p.content {
    font-size: max(1rem, 2rem);
}

repeat

这个函数,如果你有用过grid布局,那么一定会有所了解,主要用于在grid-template-rowsgrid-template-columns

代码语言:javascript
复制
<div class="text">
   <div>1</div>
   <div>2</div>
   <div>3</div>
</div>

对应css3

代码语言:javascript
复制
.text {
    display: grid;
    grid-template-columns: 1fr 1fr 1fr;
}
.text >div:nth-of-type(2n) {
    background-color: red;
}

换成repeat函数

代码语言:javascript
复制
.text {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
}

url

这是一个平时用到了但是你肯定没注意的css函数,因为你在用背景图片的时候肯定有用到

  • 在背景图片上使用
代码语言:javascript
复制
.text >div.img {
  display: block;
  height: 800px;
  background: url("https://t7.baidu.com/it/u=4162611394,4275913936&fm=193&f=GIF") no-repeat;
}
  • 在伪类元素上使用url
代码语言:javascript
复制
  .text >div.img2::before {
  content: url("https://t7.baidu.com/it/u=4162611394,4275913936&fm=193&f=GIF");
  display: block;
}

对应的结构如下

代码语言:javascript
复制
 <div class="text">
    <div class="img"></div>
    <div class="img2"></div>
 </div>

fit-content

这个函数在grid布局中会有用到,相当于设置最大阀值,你可以把它当成max-width或者max-height

代码语言:javascript
复制
<div class="text">
  <div class="cursor">Web TEACH LEARN ARE YOU READLY </div>
  <div class="cursor">HELLO WORLD</div>
  <div class="cursor">JAVASCRIPT</div>
</div>

对应的css如下

代码语言:javascript
复制
.text{
    display: grid;
    grid-template-columns: fit-content(100px) 1fr fit-content(300px);
    column-gap: 20px;
    height:200px;
}
.text >div:nth-of-type(1) {
    background-color: red;
}
.text >div:nth-of-type(2)  {
    background-color: green;
}
.text >div:nth-of-type(3)  {
    background-color: blue;
}

tan

这是一个数学中的正切三角函数,通常在我们业务中可能会很少遇到,但是在实现一个复杂的结构时,我们除了用图片替换,可能css也是可以绘制的,比如我们用css绘制一个平行四边形

代码语言:javascript
复制
<div class="box-wrap">
  <div class="box"></div>
</div>

对应的css如下

代码语言:javascript
复制
 * {padding: 0;margin:0;}
  html,body {height: 100%; font-size:16px }
  :root {
      --bg: red;
      --defaultBg: #e5e5e5;
      --width: 400;
      --height: 200;
      --angle: 30deg;

  }
  #app {
      overflow: hidden;
  }
  .box-wrap {
      width: 100%;
      height: calc(1px * var(--height));
      display: flex;
      justify-content: center;
      position: relative;
  }

  .box {
      width: calc(1px * var(--width));
  }
  .box:nth-of-type(1):before{
      content: "";
      display: block;
      width: 100%;
      height: calc(1px * var(--height));
      transform: skewX(calc(var(--angle) * 1));
      background-color: var(--bg);
      border-left: 1px solid #e5e5e5;

  }

counter

这是一个计数函数,在一些特殊的列表中,我们可以巧妙的用这个函数

代码语言:javascript
复制
<div id="app">
   <ul>
    <li>hello</li>
    <li>world</li>
    <li>JAVA</li>
    <li>JAVASCRIPT</li>
    <li>PYTHON</li>
   </ul>
</div>

对应的css

代码语言:javascript
复制
  #app {
      overflow: hidden;
      padding: 50px;
  }
  #app  ul {
      counter-reset: count;
  }
  #app ul li {
      counter-increment: count 1
  }
  #app ul li::marker {
      content: "【"counter(count)"】"
  }

总结

  • 我们主要介绍了在css3常用的高频函数,比如calc,var,attr,repeat,url等,通常来讲有些函数可能用的并不是会那么多,比如countertansin函数等
  • 另外还有不少不太常用的css3函数,具体可参考Function[1]
  • 本文示例code example[2]

参考资料

[1]

Function: https://developer.mozilla.org/en-US/docs/Web/CSS/attr

[2]

code example: https://github.com/maicFir/lessonNote/tree/master/html/14-css函数

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2023-08-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Web技术学苑 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • calc
  • attr
  • var
  • clamp(min,default,max)
  • repeat
  • url
  • tan
  • 总结
  • 参考资料
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档