详解css中的比较函数(示例介绍)

css比较函数从2020年4月就开始支持了,我喜欢使用这些函数,但最喜欢的是 clamp(),它也是我最常用的一个。在这节课中,我们详细来看下这些比较函数。

详解css中的比较函数(示例介绍)

Clamp(), Max(), 和 Min() 函数

clamp() 函数的作用是把一个值限制在一个上限和下限之间,当这个值超过最小值和最大值的范围时,在最小值和最大值之间选择一个值使用。它接收三个参数:最小值、首选值、最大值。【学习视频分享:css视频教程、web前端】

流体的尺寸和定位

在下面这个例子中,有一个手机样式,同时有两张图片放置在上面,如下所示:

1.png

立即学习“前端免费学习笔记(深入)”;

当容器的宽度变小时,我们要缩小图片的尺寸,这样才不会变形。一般使用百分比单位来解决,如 width: 20%,但是这种方式没有给我们太多的控制。

我们希望能够有一个流体尺寸,要求有最小值和最大值,这就是 clamp 出场的地方。

.section-image {  width: clamp(70px, 80px + 15%, 180px);}

2.png

事例地址:codepen.io/shadeed/pen…

装饰性元素

有时候,我们需要在页面边角加一些修饰元素,该修饰元素需要具有响应式,比如 PC 端是这样的(黑点部分):

3.png

然后在移动端是长这样的:

4.png

为了做到这,我们可以使用媒体查询:

.decorative--1 {  left: 0;}.decorative--2 {  right: 0;}@media (max-width: 600px) {  .decorative--1 {    left: -8rem;  }  .decorative--2 {    right: -8rem;  }

虽然这样做可以,但我们可以 clamp()函数,这样更简洁:

  .decorative--1 {    left: clamp(-8rem, -10.909rem + 14.55vw, 0rem);  }  .decorative--2 {    right: clamp(-8rem, -10.909rem + 14.55vw, 0rem);  }

事例地址:codepen.io/shadeed/pen…

流体高度

有时候,我们页面的主区的高度需要根据视口大小而变化。这种场景,我们倾向于通过媒体查询或使用视口单位来改变这种情况。

5.png

.hero {  min-height: 250px;}@media (min-width: 800px) {  .hero {    min-height: 500px;  }}

我们也可以混合使用固定值和视口单位:

.hero {  min-height: calc(350px + 20vh);}@media (min-width: 2000px) {  .hero {    min-height: 600px;  }}

但需要注意在较大的视口上高度不能太过高,所以我们需要设置一个最大高度,使用CSS clamp(),我们可以只用一个CSS声明来设置最小、首选和最大高度。

.hero {  min-height: clamp(250px, 50vmax, 500px);}

当调整屏幕大小时,我们会看到,高度会根据视口宽度逐渐改变。在上面的例子中,50vmax表示着视口最大尺寸的 50%

6.png

事例地址:codepen.io/shadeed/pen…

Loading Bar

7.png

进度条一般是从左到右一个加载过程,在 CSS 中,我们可以定位在左边:

.loading-thumb {  left: 0%;}

为了将进度条定位到最右边,我们可以使用 left: 100%,但这会带来一个问题。进度条会跑到容器外:

8.png

.loading-thumb {  left: 100%;}

这是正常的情况,100% 是从进度条的末端开始的,而进度条本身也有自己的宽度,所以实际宽度会大于容器的宽度。

我们可以使用 calc() 来减去的进度条宽度,这样就可以了,但这并不是100%有效:

.loading-thumb {  /* 40px represents the thumb width. */  left: calc(100% - 40px);}

我们来看下,如何利用CSS变量和比较函数来更好地实现:

.loading-thumb {  --loading: 0%;  --loading-thumb-width: 40px;  position: absolute;  top: 4px;  left: clamp(    0%,    var(--loading),    var(--loading) - var(--loading-thumb-width)  );  width: var(--loading-thumb-width);  height: 16px;}

上面的步骤如下:

首先,我们设定一个最小值为 0%

首选值是 --loading CSS变量的当前值

最大值代表当前的加载量减去进度条件的宽度

这里的CSS clamp()为我们提供了这个组件的三种不同的状态信息,这个方案很 nice:

9.png

不仅如此,我们还可以以相同的方式来处理不同UI

10.png

.loading-progress {  width: clamp(10px, var(--loading), var(--loading) - 10px);}

最小值等于圆圈宽度的一半,首选值是当前的加载百分比,最大值是当前百分比与圆圈一半的减去结果。

11.png

事例地址:codepen.io/shadeed/pen…

动态分割器

考虑下图,我们在两个区域之间有一个行分隔符。

12.png

在移动端上,这个分隔符应该变成水平的,如下图:

13.png

我的解决方案是使用一个边框和flex。思路是,边框作为伪元素,以填补垂直和水平状态的可用空间:

.section {  display: flex;  flex-direction: column;  gap: 1rem;}.section:before {  content: "";  border: 1px solid #d3d3d3;  align-self: stretch;}@media (min-width: 700px) {  .section {    align-items: center;    flex-direction: row;  }}

我们也可以使用 clamp 而不需要媒体查询的解决方案:

.section {  --breakpoint: 400px;  display: flex;  flex-wrap: wrap;}.section:before {  content: "";  border: 2px solid lightgrey;  width: clamp(0px, (var(--breakpoint) - 100%) * 999, 100%);}

来剖析一下上面的CSS:

0px:最小值,用于垂直分隔符。它的值是 0,因为我们使用的是一个CSS边框(var(--breakpoint) - 100%) * 999 是一个个切换器,根据视口宽度在 0px100% 之间切换。

14.png

动态 border Radius

一年前,发现了一个巧妙的CSS技巧。使用CSS max()函数,根据视口宽度,将卡片的border-radius0px 切换到 8px

15.png

.card {  border-radius: max(    0px,    min(8px, calc((100vw - 4px - 100%) * 9999))  );}

来剖析一下上面的CSS:

我们有一个 max() 函数,在 0pxmin()的计算值之间进行比较,并选择较大的值。

min() 函数在 8pxcalc((100vw - 4px - 100%) * 9999 的计算值之间进行比较,这会得到一个非常大的正数或负数。

9999 是一个很大的数字,这样 min 的值都是 8px

间距

16.png

有时,我们可能需要根据视口宽度来改变一个组件或一个网格的间距。有了CS函数就不一样了,我们只需要设置一次。

.wrapper {  display: grid;    grid-template-columns: repeat(3, 1fr);    grid-gap: min(2vmax, 32px);}

17.gif

原文地址:https://isdeed.com/article/use-cases-css-comparison-functions/

更多编程相关知识,请访问:编程视频!!

以上就是详解css中的比较函数(示例介绍)的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1625013.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月24日 08:37:08
下一篇 2025年12月24日 08:37:20

相关推荐

  • 一文详解CSS3中的Flex布局

    本篇文章带大家了解一下css3中的flex布局,希望对大家有所帮助! 简介 什么是Flex布局 Flex是Flexible Box 的缩写,也称为弹性盒子布局。 Flex布局组成: flex容器(flex container)flex项(flex items)主轴(main axis)交叉轴(cro…

    2025年12月24日 好文分享
    000
  • 【整理总结】这些高级CSS技巧,你会几种?

    本篇文章带你玩转css,分享一些高级css技巧,快来看看你是否都会呀! 学习目标 能够使用精灵图能够使用字体图标能够写出 CSS 三角能够写出常见的 CSS 用户界面样式能够说出常见的布局技巧 精灵图 1. 为什么需要精灵图? 客户端要访问一个网页时,浏览器会向服务器发送请求,服务器接收到请求后,会…

    2025年12月24日 好文分享
    000
  • 带你使用CSS+jQuery实现一个文字转语音机器人

    本篇文章手把手带大家使用css+jquery实现一个文字转语音机器人,希望对大家有所帮助! 素材 机器人眼睛 【推荐学习:css视频教程、jQuery视频教程、web前端视频】 立即学习“前端免费学习笔记(深入)”; 页面布局 机器人样式参考了下图,通过css拼造型的方式进行实现。部分还原了设计图 …

    2025年12月24日
    000
  • 巧用纯CSS实现鼠标点击拖拽效果,让交互更加生动!

    本篇文章给大家介绍一下如何使用纯css实现鼠标点击拖拽效果,让交互更加生动,希望对大家有所帮助! 背景 鼠标拖拽元素移动,算是一个稍微有点点复杂的交互。 而在本文,我们就将打破常规,向大家介绍一种超强的仅仅使用纯 CSS 就能够实现的鼠标点击拖拽效果。【推荐学习:css视频教程】 在之前的这篇文章中…

    2025年12月24日 好文分享
    000
  • 聊聊CSS新特性content-visibility,助你提升页面渲染性能

    对于前端人员来讲,最令人头疼的应该就是页面性能了,当用户在访问一个页面时,总是希望它能够快速呈现在眼前并且是可交互状态。如果页面加载过慢,你的用户很可能会因此离你而去。所以页面性能对于前端开发者来说可谓是重中之重,其实你如果了解页面从加载到渲染完成的整个过程,就知道应该从哪方面下手了。 嗯,不要跑偏…

    2025年12月24日 好文分享
    000
  • 实例详解CSS渐变锯齿问题如何解决!

    本篇文章给大家介绍一下如何解决在使用渐变图形产生的锯齿问题,所谓css渐变锯齿消失术,你会了就能搞定,下面就带大家一起来看看怎么实现吧~希望对大家有所帮助! CSS 渐变锯齿消失术 在 CSS 中,渐变(Gradient)可谓是最为强大的一个属性之一。 但是,经常有同学在使用渐变的过程中会遇到渐变图…

    2025年12月24日 好文分享
    000
  • 带你吃透Flex布局的三个属性:flex-grow、flex-shrink、flex-basis

    本篇文章带大家深入了解css flex布局的三个属性:flex-grow、flex-shrink、flex-basis,希望对大家有所帮助! 【推荐学习:css视频教程、web前端】 在我们日常开发中,flex布局可以说是家常便饭,对于很多的我们来说(你懂得^_^),可能我们用的比较多的应该就是垂直…

    2025年12月24日 好文分享
    000
  • 手把手教你使用CSS实现酷炫六边形网格背景图

    本篇文章给大家分享不规则图形背景排版高阶技巧,介绍一下如何使用css实现酷炫六边形网格背景图,希望对大家有所帮助! 今天,收到一个很有意思的提问,如何实现类似如下的背景效果图: 嗯?核心主体是由多个六边形网格叠加形成。 立即学习“前端免费学习笔记(深入)”; 那么我们该如何实现它呢?使用纯 CSS …

    2025年12月24日 好文分享
    000
  • CSS技巧分享:纯CSS实现表格响应式布局

    如何利用纯css实现表格响应式布局?下面本篇文章就来给大家分享超 nice 的表格响应式布局小技巧,希望对大家有所帮助! 今天,遇到了一个很有意思的问题,一名群友问我,仅仅使用 CSS,能否实现这样一种响应式的布局效果: 简单解析一下效果: 立即学习“前端免费学习笔记(深入)”; 在屏幕视口较为宽时…

    2025年12月24日 好文分享
    000
  • 一文聊聊 9 个冷门的css属性

    可能我们有时候潜意识里认为, 当前实际开发中css属性已经足够用了, 但是前段时间突然想到:”会不会我们只是思维被限制在了常用的css属性中, 从而丧失了创造力”, 就像发明 车 之前大多数人会认为 骑马 已经足够快可以满足自己的需求了, 所以我专门整理了一下自己的学习笔记并…

    2025年12月24日 好文分享
    000
  • 如何写出优雅耐看的css代码?css命名小技巧分享!

    如果使用 css 有一段时间,那么您就会知道继承、特异性和命名是一些最难处理的事情。由于所有 css 都是全局的,随着代码库的增长,防止样式相互冲突并导致意外副作用变得越来越困难!下面本篇文章给大家分享一些css命名小技巧,让我们的代码优雅又耐看,希望对大家有所帮助! CSS命名——BEM BEM是…

    2025年12月24日
    000
  • 巧妙利用 CSS 实现文字二次加粗和多重边框效果

    如何二次加粗文字?如何实现多重边框?下面本篇文章就来给大家介绍一下巧妙利用 css 实现文字二次加粗和多重边框效果,希望对大家有所帮助! p { font-size: 64px; letter-spacing: 6px; font-weight: bold; -webkit-text-stroke:…

    2025年12月24日
    000
  • 聊聊为什么不应该依赖CSS 100vh?

    为什么不应该依赖css 100vh?下面本篇文章就来带大家聊聊原因,希望对大家有所帮助! 如果有一个文本和一个按钮,我们想让文本粘在上面,而按钮粘在下面!使用CSS Flex 似乎很容易做到。【推荐学习:css视频教程】 // HTML Lorem ipsum dolor sit amet… S…

    2025年12月24日 好文分享
    000
  • 手把手带你使用CSS Flex和Grid布局实现3D骰子(附代码)

    在前端面试中,经常会问到如何使用 css 实现骰子/麻将布局。下面本篇文章给大家介绍一下用css 创建一个 3d 骰子(flex和grid布局实现3d骰子)的方法,希望对大家有所帮助! 通过本文可以学到: 使用transform来实现3D形状;给 3D 骰子实现旋转动画;使用 Flex 布局来实现骰…

    2025年12月24日 好文分享
    000
  • CSS小技巧:利用transition保留hover状态

    如何保留 hover 的状态?下面本篇文章给大家介绍一下不借助javascript保留hover状态的方法,希望对大家有所帮助! 通常情况下,hover 是无法保存状态的。鼠标移入触发额外样式,一旦移出就还原了。 el:hover{ color: red} 这就意味着,如果需要保留hover的状态,…

    2025年12月24日 好文分享
    000
  • 看看这两个 CSS 面试题,考察你的基础!

    见微知著,本篇文章给大家分享两道有意思的 css 面试题,考察考察你的基础! 今天在论坛,有看到这样一道非常有意思的题目,简单的代码如下: First Paragraph 样式如下: p#a { color: green;}div::first-line { color: blue;} 试问,标签 …

    2025年12月24日 好文分享
    000
  • CSS媒体查询完全指南(Media Quires)

    本篇文章带大家学习css媒体查询(media quires),详细介绍了媒体查询语法定义,从三个具体布局例子学习媒体查询的使用技巧;并介绍了一些scss、css属性知识。 什么是SCSS Sass: Sass Basics (sass-lang.com) SCSS 是 CSS 的预处理器,它比常规 …

    2025年12月24日 好文分享
    000
  • 手把手带你使用单个标签+CSS实现复杂的棋盘布局

    最近,有群友问我,他们的一个作业,尽量使用少的标签去实现这样一个象棋布局: 他用了 60 多个标签,而他的同学,只用了 6 个,问我有没有办法尽可能的做到利用更少的标签去完成这个布局效果。 其实,对于一个页面的布局而言,标签越少不一定是好事,我们在考虑 DOM 的消耗的同时,也需要关注代码的可读性,…

    2025年12月24日 好文分享
    000
  • CSS实用小技巧:利用视差实现酷炫交互动效

    本文将介绍利用 CSS 实现滚动视差效果的一个小技巧,并且,利用这个技巧来制作一些有意思的交互特效。【学习视频分享:css视频教程、web前端】 关于使用 CSS 实现滚动视差效果,在之前有一篇文章详细描述过具体方案 – CSS 实现视差效果,感兴趣的同学可以先看看这篇文章。 这里,会运…

    2025年12月24日 好文分享
    000
  • CSS新特性学习:方向裁切overflow:clip

    本篇文章将介绍一个新特性,从 chrome 90 开始,overflow 新增的一个新特性 — overflow: clip,使用它,轻松的对溢出方向进行控制。 overflow: clip 为何 首先,简单介绍下 overflow: clip 的用法。 overflow: clip: …

    2025年12月24日 好文分享
    000

发表回复

登录后才能评论
关注微信