目录
探索我们可以处理的if()
如果()与容器样式查询
如果()(但可能没有意识到),您可以做的其他事情
if()和calc():当数学不是数学时
结束思想
首页 web前端 css教程 在CSS上戳if()功能更多:有条件的颜色主题

在CSS上戳if()功能更多:有条件的颜色主题

Jun 26, 2025 am 09:34 AM

在CSS上戳if()功能更多:有条件的颜色主题

Chrome 137运送了IF()CSS函数,因此我们完全有可能看到其他浏览器实现它,尽管很难确切知道何时。无论如何,如果()使我们能够有条件地使用值,那么我们可以使用查询和其他功能(例如,媒体查询和灯 - dark()函数),所以我敢肯定,您想知道:如果()可以做什么?

Sunkanmi昨天对该功能进行了很好的概述,在高水平的语法上戳了一下。我想在本文中更加努力地戳它,从而涉及一些现实的用法。

回顾一下,如果()根据CSS变量的值有条件地将值分配给属性。例如,我们可以根据 - theme的值为颜色和背景属性分配不同的值:

  • - 感谢:“三叶草”
    • 颜色:‌HSL(146 50%3%)
    • 背景:HSL(146 50%40%)
  • - 丝毫:其他
    • 颜色:HSL(43 74%3%)
    • 背景:HSL(43 74%64%)
 :根 {
  / *更改为“其他”值 */
   - 爱:“三叶草”;

  身体 {
    颜色:if(style( - 主题:“ shamrock”):HSL(146 50%3%); else:HSL(43 74%3%));
    背景:if(style( - 主题:“ shamrock”):HSL(146 50%40%); else:HSL(43 74%64%));
  }
}

我不喜欢语法(太多的结肠,括号等),但是我们可以这样格式化(我认为这有点清楚):

颜色:if(((
  样式( - 主题:“三叶草”):HSL(146 50%3%);
  else:HSL(43 74%3%)
);

我们应该能够用if()做疯狂的事情,我希望最终成为这种情况,但是我进行了一些测试,并了解到上面的语法是唯一有效的语法。我们无法基于普通CSS属性(而不是自定义属性),HTML属性(使用attr())或任何其他值的条件。至少目前,条件必须基于自定义属性的值(CSS变量)。

探索我们可以处理的if()

从第一个示例来看,很明显,我们可以将if()用于主题(以及整体设计系统)。虽然我们可以利用Light-Dark()函数,但是如果主题不是严格的光和黑暗,或者如果我们想为每个主题拥有两个以上的主题或轻度和深色模式怎么办?好吧,这就是IF()可以使用的。

首先,让我们创建更多主题/更多条件:

 :根 {
  /*三叶草|藏红花|紫水晶 */
   - 这些:“藏红花”; /* ...我选择你! */

  身体 {
    颜色:if(((
      样式( - 主题:“三叶草”):HSL(146 50%3%);
      样式( - 主题:“藏红花”):HSL(43 74%3%);
      样式( - 主题:“紫水晶”):HSL(282 47%3%)
    );
    背景:if((
      样式( - 主题:“三叶草”):HSL(146 50%40%);
      样式( - 主题:“藏红花”):HSL(43 74%64%);
      样式( - 主题:“紫水晶”):HSL(282 47%56%)
    );
    过渡:300ms;
  }
}

真的很简单,但是有一些易于失踪的东西。首先,这次没有“其他条件”,这意味着如果主题不是三叶草,藏红花或紫水晶,则使用默认的浏览器样式。否则,if()函数可以解决第一个真实语句的价值,即在这种情况下,这是藏红花主题。其次,过渡起来有效。在下面的演示中,我添加了一个用户界面,用于切换-theme,并且为了过渡,实际上只是过渡:与IF()函数旁边的300ms:300ms:

注意:如果主题汇总是用户控制的,例如选择一个选项,则实际上您根本不需要()。您可以使用我在演示开头使用的逻辑(:root:has has(#shamrock:chepled){ / * styles * /})。 Amit Sheen在Smashing Magazine上进行了出色的示范。

但是,为了使代码更加可维护,我们也可以将颜色滑入CSS变量中,然后在if()函数中使用它们,然后将if()自身滑入CSS变量:

 /* 设置 */
:根 {
  /*三叶草|藏红花|紫水晶 */
   - 爱:“三叶草”; /* ...我选择你! */

  / *基础颜色 */
  -shamrock:HSL(146 50%40%);
  -Saffron:HSL(43 74%64%);
  -Amethyst:HSL(282 47%56%);

  / *基本颜色,但以3%的轻度 */
   -  ShamRock融合:HSL(来自Var(-shamrock)HS 3%);
   - 辅助负数:HSL(来自var(-saffron)HS 3%);
   - 甲基水平:HSL(来自var( - 紫水晶)HS 3%);

   - 背景:if((
    样式( - 主题:“ shamrock”):var(-shamrock);
    样式( - 主题:“藏红花”):var(-saffron);
    样式( - 主题:“紫水晶”):var( - 紫水晶)
  );

   - 颜色:if((
    样式( - 主题:“ shamrock”):var( - 三叶草融合);
    样式( - 主题:“藏红花”):var(-saffron-complementary);
    样式( - 主题:“紫水晶”):var( - 紫水晶融合)
  );

  /* 用法 */
  身体 {
    /*一个变量,所有IF! */
    背景:var( - 背景);
    颜色:var( - 颜色);
    重音色:var( - 颜色);

    /*不能忘记这个! */
    过渡:300ms;
  }
}

除了在if()函数中使用CSS变量外,我们还可以嵌套其他功能。在下面的示例中,我在其中抛出了灯光(),它基本上将颜色扭转了黑暗模式:

 - 背景:if((
  样式( - 主题:“ shamrock”):浅黑色(var(-shamrock),var(-shamrock complementary));
  样式( - 主题:“藏红花”):浅色(var(-saffron),var(-saffron-complementary));
  样式( - 主题:“紫水晶”):浅黑色(var( - 紫水晶),var( - 紫水胺型融合))
);

如果()与容器样式查询

如果您以前从未使用过容器样式查询,则基本上会检查一个容器是否具有某个CSS变量(非常类似于IF()函数)。这是完全相同的示例/演示,但是使用容器样式查询而不是IF()函数:

 :根 {
  /*三叶草|藏红花|紫水晶 */
   - 爱:“三叶草”; /* ...我选择你! */

  -shamrock:HSL(146 50%40%);
  -Saffron:HSL(43 74%64%);
  -Amethyst:HSL(282 47%56%);

   -  ShamRock融合:HSL(来自Var(-shamrock)HS 3%);
   - 辅助负数:HSL(来自var(-saffron)HS 3%);
   - 甲基水平:HSL(来自var( - 紫水晶)HS 3%);

  身体 {
    /*容器选择了三叶草! */
    @Container样式( - 主题:“ Shamrock”){
       - 背景:浅黑色(var(-shamrock),var(-shamrock-complementary));
       - 颜色:浅黑色(var(-shamrock complementary),var(-shamrock));
    }

    @Container样式( - 主题:“ saffron”){
       - 背景:浅黑色(var(-saffron),var(-saffron-complementary));
       - 颜色:浅黑色(var( - 藏红花融合),var(-saffron));
    }

    @Container样式( - 主题:“紫水晶”){
       - 背景:浅黑色(var( - 紫水晶),var( - 紫水胺型平衡));
       - 颜色:浅黑色(var( - 紫水晶融合),var( - 紫水晶));
    }

    背景:var( - 背景);
    颜色:var( - 颜色);
    重音色:var( - 颜色);
    过渡:300ms;
  }
}

如您所见,if()促进有条件的值,容器样式查询有助于条件属性值。除此之外,它确实只是另一种语法。

如果()(但可能没有意识到),您可以做的其他事情

检查CSS变量是否存在:

 / *隐藏图标如果未设置变量 */
。图标 {
  显示:if((
    样式( - 偶像家庭):内联块;
    否则:没有
  );
}

创建更复杂的条件语句:

 H1 {
  字体大小:if((
    样式( - 较大的头脑:true):xxx-large;
    样式( - 主题:“ thewithlargerheadings”):xxx-large
  );
}

检查两个CSS变量是否匹配:

 / *如果#S2具有与#S1相同的背景,请添加边框 */
#s2 {
  边界顶:if((
    样式(-S2-Background:var(-s1-background)):薄固体红色
  );
}

if()和calc():当数学不是数学时

这行不通(也许有人可以帮助我指出原因):

 div {
  / * 3/3 = 1 */
  -CALC:calc(3/3);
  / *蓝色,因为如果()无法计算-CALC */
  背景:if(style( -  calc:1):红色; else:blue);
}

要制作if()计算-CALC,我们需要首先使用@property注册CSS变量,例如:

 @property -calc {
  语法:”<number> ”
  初始值:0;
  继承:false;
}</number>

结束思想

尽管我不喜欢语法,并且有时看起来不可读(尤其是在一行上格式化),但我很高兴看到IF()如何发展。我很想能够与普通属性一起使用(例如,颜色:if(style(背景:白色):黑色; style(背景:black):white):white);)避免在可能的情况下设置CSS变量。

如果可以即时计算Calc()计算而无需注册变量,那也很棒。

话虽这么说,我仍然对IF()当前的功能非常满意,并且迫不及待地想构建更简单的设计系统。

以上是在CSS上戳if()功能更多:有条件的颜色主题的详细内容。更多信息请关注PHP中文网其他相关文章!

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

热AI工具

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

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

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

Laravel 教程
1604
29
PHP教程
1510
276
什么是常见的CSS浏览器不一致? 什么是常见的CSS浏览器不一致? Jul 26, 2025 am 07:04 AM

不同浏览器对CSS解析存在差异,导致显示效果不一致,主要包括默认样式差异、盒模型计算方式、Flexbox和Grid布局支持程度及某些CSS属性行为不一致。1.默认样式处理不一致,解决方法是使用CSSReset或Normalize.css统一初始样式;2.旧版IE的盒模型计算方式不同,建议统一使用box-sizing:border-box;3.Flexbox和Grid在边缘情况或旧版本中表现有差异,应多测试并使用Autoprefixer;4.某些CSS属性行为不一致,需查阅CanIuse并提供降级

什么是口音色的物业? 什么是口音色的物业? Jul 26, 2025 am 09:25 AM

accent-color是CSS中用于自定义复选框、单选按钮和滑块等表单元素高亮颜色的属性;1.它直接改变表单控件选中状态的默认颜色,如将复选框的蓝色勾选标记改为红色;2.支持的元素包括type="checkbox"、type="radio"和type="range"的输入框;3.使用accent-color可避免复杂的自定义样式和额外DOM结构,保持原生可访问性;4.现代浏览器普遍支持,旧浏览器需降级处理;5.设置accent-col

如何样式选择突出显示(``:: selection')? 如何样式选择突出显示(``:: selection')? Jul 16, 2025 am 12:50 AM

使用CSS的::selection伪元素可自定义网页文字选中时的高亮样式,提升页面美观与统一性。1.基础设置:通过::selection定义background-color与color,如黄色背景配深灰字体;也可限定特定元素如p::selection。2.兼容处理:添加-webkit-前缀以兼容Safari及移动端浏览器,Firefox和Edge标准支持良好。3.注意可读性:避免颜色对比过强或过于花哨,应与整体设计协调,例如深色模式下选用柔和蓝底提升视觉舒适度。合理运用可增强界面质感,忽略细节则

浏览器默认样式表如何影响渲染? 浏览器默认样式表如何影响渲染? Jul 19, 2025 am 02:08 AM

浏览器默认样式通过自动应用边距、填充、字体和表单元素样式确保基本可读性,但可能导致跨浏览器布局不一致。1.默认外边距和填充改变布局流,如标题、段落和列表自带间距;2.默认字体设置影响可读性,如16px字号和TimesNewRoman字体;3.表单元素在不同浏览器显示差异大,需重置外观;4.某些标签如strong和em有默认强调样式,需显式覆盖。解决方法包括使用Normalize.css、重置样式或全局清除边距与填充,同时自定义字体和表单样式以保证一致性。

如何设计段落的第一字母或第一行? 如何设计段落的第一字母或第一行? Jul 19, 2025 am 02:58 AM

要美化段落开头提升视觉吸引力,常见做法是使用CSS的伪元素或手动设置文档样式。网页开发中可用p::first-letter设置首字母样式,如放大、加粗、变色,但需注意仅适用于块级元素;若想突出整段首行,则用p::first-line来加样式;在Word等文档软件中可手动调整首字母格式或创建样式模板,而InDesign有内置“首字下沉”功能适合出版设计;应用时需注意细节,如避免复杂样式影响阅读、确保兼容性和格式一致性。

描述'垂直align”属性及其典型用例 描述'垂直align”属性及其典型用例 Jul 26, 2025 am 07:35 AM

1.ItAdjustSelementsLikeImagesRikeImagesOrformInputswithIntExtLineSustLineSlineSlineSlineSlikeLikeLikeBaseline,中间,Super,Super,Super和Sub.2.intablebecells,ItControlScontentalStalteNtalmscontentalMedwithThtop,Middle,Middle,Midder,Midder,经常

描述CSS'反序列”和``反插入属性''属性 描述CSS'反序列”和``反插入属性''属性 Jul 18, 2025 am 04:00 AM

CSS的counter-reset和counter-increment用于自动编号HTML元素。1.使用counter-reset初始化或重置计数器,例如section{counter-reset:sub-section;}创建名为sub-section的计数器;2.通过counter-increment递增计数器,如h3{counter-increment:sub-section;}使每个h3标题编号递增;3.使用content属性结合伪元素显示计数器,如h3::before{content:

如何清除未使用的CSS? 如何清除未使用的CSS? Jul 27, 2025 am 02:47 AM

UseAutomatedToolSlikePurgecsSoruncsStoscanAndRemoveUnusedcss; 2. integratePuratePurgingIntoyourBuildProcessviawebpack,vite,vite,ortailwind ’scontentConfiguration; 3.AuditcsSusageWithChroMedEvtoolScoverAgeTabBeforgeForgingToavoidRemovingNeedEdedStyles; 4.safelistdynamic

See all articles