首页 web前端 css教程 当您看上去时,CSS梯度变得更好

当您看上去时,CSS梯度变得更好

Apr 11, 2025 am 09:16 AM

CSS渐变的改进:双位置语法简化渐变条纹

While You Weren't Looking, CSS Gradients Got Better

Lea Verou 的 conic-gradient() polyfill 功能列表中有一项引起了我的注意:

支持双位置语法(同一颜色停止点使用两个位置,作为具有相同颜色的两个连续颜色停止点的快捷方式)

令人惊讶的是,我最近发现大多数人甚至不知道渐变停止点的双位置语法实际上存在于规范中,因此我决定写一篇关于它的文章。

根据规范:

指定两个位置可以更容易地在渐变中创建纯色“条纹”,而无需重复颜色两次。

我完全同意,这是我了解此功能时首先想到的。

假设我们想要获得以下结果:一个具有许多等宽垂直条纹的渐变(我从 Chris 之前的文章中获得的):

十六进制值为:#5461c8、#c724b1、#e4002b、#ff6900、#f6be00、#97d700、#00ab84 和 #00a3e0。

让我们首先看看如何在不使用双停止点位置的情况下使用 CSS 实现这一点!

我们有八条条纹,每条条纹占渐变宽度的八分之一。100% 的八分之一是 12.5%,因此我们在该值的倍数处从一个条纹过渡到下一个条纹。

这意味着我们的 linear-gradient() 如下所示:

<code>linear-gradient(90deg, 
             #5461c8 12.5% /* 1*12.5% */, 
  #c724b1 0, #c724b1 25%   /* 2*12.5% */, 
  #e4002b 0, #e4002b 37.5% /* 3*12.5% */, 
  #ff6900 0, #ff6900 50%   /* 4*12.5% */, 
  #f6be00 0, #f6be00 62.5% /* 5*12.5% */, 
  #97d700 0, #97d700 75%   /* 6*12.5% */, 
  #00ab84 0, #00ab84 87.5% /* 7*12.5% */, 
  #00a3e0 0)</code>
登录后复制

请注意,我们不需要重复停止位置的百分比值,因为每当停止位置小于前一个位置时,我们就会自动进行急剧过渡。这就是为什么始终可以使用 0(它总是小于任何正值)并使用 #c724b1 25%、#e4002b 0 而不是 #c724b1 25%、#e4002b 25% 的原因,例如。如果我们决定要添加两条条纹并将停止位置设为 10% 的倍数,这在将来可以使我们的生活更轻松。

还不错,尤其是与渐变生成器通常生成的代码相比。但是,如果我们决定中间的其中一条条纹与其他条纹不太匹配,那么将其更改为其他内容意味着需要在两个地方进行更新。

同样,这也不是什么大问题,我们无需借助预处理器就可以解决:

<code>$c: #5461c8 #c724b1 #e4002b #ff6900 #f6be00 #97d700 #00ab84 #00a3e0;

@function get-stops($c-list) {
  $s-list: ();
  $n: length($c-list);
  $u: 100%/$n;

  @for $i from 1 to $n {
    $s-list: $s-list, 
             nth($c-list, $i) $i*$u, 
             nth($c-list, $i   1) 0
  }

  @return $s-list
}

.strip {
  background: linear-gradient(90deg, get-stops($c)))
}</code>
登录后复制

这将生成我们稍早前看到的精确 CSS 渐变,现在我们不必再在两个地方进行修改了。

CodePen 演示

但是,即使预处理器可以避免我们两次键入相同的内容,它也不会消除生成的代码中的重复。

而且我们可能并不总是想使用预处理器。撇开有些人顽固或对预处理器具有非理性恐惧或仇恨的事实不谈,有时使用循环感觉有点傻。

例如,当我们几乎没有任何东西需要循环时!假设我们想要获得更简单的背景图案,例如对角线散列图案,我认为这比过于夸张的彩虹图案更常见,彩虹图案可能根本不适合大多数网站。

这需要使用 repeating-linear-gradient(),这意味着即使我们没有像之前那样拥有很长的十六进制值列表,也需要一些重复:

<code>repeating-linear-gradient(-45deg, 
    #ccc /* can't skip this, repeating gradient won't work */, 
    #ccc 2px, 
    transparent 0, 
    transparent 9px /* can't skip this either, tells where gradient repetition starts */)</code>
登录后复制

在这里,我们不能丢弃第一个和最后一个停止点,因为这些正是指示渐变如何在 background-size 定义的矩形内重复的内容。

如果您想了解为什么最好使用 repeating-linear-gradient() 而不是普通的 linear-gradient() 结合适当的 background-size 来创建此类散列,请查看我之前写过的另一篇文章。

这正是此功能发挥作用的地方——它允许我们避免最终 CSS 代码中的重复。

对于彩虹条纹案例,我们的 CSS 变为:

<code>linear-gradient(90deg, 
    #5461c8 12.5%, 
    #c724b1 0 25%, 
    #e4002b 0 37.5%, 
    #ff6900 0 50%, 
    #f6be00 0 62.5%, 
    #97d700 0 75%, 
    #00ab84 0 87.5%, 
    #00a3e0 0)</code>
登录后复制

要重新创建散列,我们只需要:

<code>repeating-linear-gradient(-45deg, 
    #ccc 0 2px, 
    transparent 0 9px)</code>
登录后复制

CodePen 演示

支持情况如何?很好,您问对了!它实际上非常好!它适用于 Safari、Chromium 浏览器(现在也包括 Edge!)和 Firefox。预 Chromium Edge 和一些移动浏览器仍然可能阻碍您,但如果您不必担心为所有浏览器提供支持,或者提供后备方案是可以的,那么您可以开始使用它!

以上是当您看上去时,CSS梯度变得更好的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌
威尔R.E.P.O.有交叉游戏吗?
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

使用GraphQL缓存 使用GraphQL缓存 Mar 19, 2025 am 09:36 AM

如果您最近开始使用GraphQL或审查了其优点和缺点,那么您毫无疑问听到了诸如“ GraphQl不支持缓存”或

使用Redwood.js和Fauna构建以太坊应用 使用Redwood.js和Fauna构建以太坊应用 Mar 28, 2025 am 09:18 AM

随着最近比特币价格超过20k美元的攀升,最近打破了3万美元,我认为值得深入研究创建以太坊

用高架创建自己的野蛮人 用高架创建自己的野蛮人 Mar 18, 2025 am 11:23 AM

无论您是开发人员的哪个阶段,我们完成的任务(无论大小)都会对我们的个人和专业成长产生巨大影响。

VUE 3 VUE 3 Apr 02, 2025 pm 06:32 PM

它的出局!恭喜Vue团队完成了完成,我知道这是一项巨大的努力,而且很长时间。所有新文档也是如此。

您可以从浏览器获得有效的CSS属性值吗? 您可以从浏览器获得有效的CSS属性值吗? Apr 02, 2025 pm 06:17 PM

我有人写了这个非常合法的问题。 Lea只是在博客上介绍了如何从浏览器中获得有效的CSS属性。那样的是这样。

在CI/CD上有点 在CI/CD上有点 Apr 02, 2025 pm 06:21 PM

我说的“网站”比“移动应用程序”更合适,但我喜欢Max Lynch的框架:

带有粘性定位的堆叠卡和一点点的杂物 带有粘性定位的堆叠卡和一点点的杂物 Apr 03, 2025 am 10:30 AM

前几天,我发现了科里·金尼文(Corey Ginnivan)网站上的这一点,当您滚动时,彼此之间的卡片堆放集。

比较浏览器的响应式设计 比较浏览器的响应式设计 Apr 02, 2025 pm 06:25 PM

这些桌面应用程序中有许多目标是同时在不同的维度上显示您的网站。因此,例如,您可以写作

See all articles