Chrome 137浏览器带来一个实用的css新功能:if()函数。现在你可以直接在样式属性里写条件判断,不用再到处写@media或@supports规则。这让样式代码更集中,维护起来更简单。
if()是一个条件函数,用法类似JavaScript的if...else。它根据条件返回不同的样式值。支持三种条件类型:
正确语法示例:
属性: if(
条件1: 值1;
条件2: 值2;
else: 默认值 /* else可选 */
);
代码更简洁
以前响应式布局要拆成多个@media块,现在逻辑和样式能写在一起
/* 传统写法 */
@media (orientation: landscape) {
.card { flex-direction: row }
}
@media (orientation: portrait) {
.card { flex-direction: column }
}
/* 新写法一行搞定 */
.card {
flex-direction: if(
media(orientation: landscape): row;
else: column
);
}
直接访问元素状态
用style()可以读取元素自身的CSS变量或属性(原文错误修正:需配合CSS变量)
<div class="price" >="pro">$99</div>
.price {
--tier: attr(>); /* 绑定html属性 */
color: if(
style(--tier: pro): #ff9800; /* 专业版橙色 */
style(--tier: basic): #03a9f4; /* 基础版蓝色 */
else: #666 /* 默认灰色 */
);
}
动态样式更灵活
结合CSS变量和数学函数,实现动态效果
.container {
display: flex;
flex-direction: if(
media(orientation: landscape): row; /* 横屏横向排列 */
else: column /* 竖屏纵向排列 */
);
}
.header {
/* 支持毛玻璃效果时用半透明背景 */
background: if(
supports(backdrop-filter: blur(10px)): rgba(255,255,255,0.7);
else: white /* 不支持时回退 */
);
/* 避免不支持时报错 */
backdrop-filter: if(
supports(backdrop-filter: blur(10px)): blur(10px);
else: none
);
}
<body >="dark">
body {
--theme-mode: attr(>);
background: if(
style(--theme-mode: dark): #222; /* 深色背景 */
style(--theme-mode: light): #f5f5f5; /* 浅色背景 */
else: white /* 默认 */
);
color: if(
style(--theme-mode: dark): #eee; /* 深色模式用浅字 */
else: #333 /* 浅色模式用深字 */
);
}
兼容性警告
目前仅Chrome 137+、Edge 117+支持(2024年7月数据),其他浏览器需备用方案:
/* 兼容写法 */
.element {
color: #444; /* 默认值 */
color: if(style(--theme: dark): white); /* 新浏览器覆盖 */
}
不要滥用条件判断
复杂逻辑仍建议用@media,避免单行代码过长
优先使用CSS变量
style()必须配合变量使用,直接写属性值无效
浏览器 | 最低支持版本 | 支持程度 |
---|---|---|
Chrome | 137 | ✅ |
Edge | 117 | ✅ |
Firefox | 未支持 | ❌ |
Safari | 未支持 | ❌ |
移动端浏览器 | 依赖内核版本 | ⚠️部分 |
最新兼容性数据可访问 [caniuse.com/css-if] 查看
推荐场景:
暂不建议:
这个功能让CSS向真正的编程语言靠近了一步。虽然现在兼容性有限,但未来三年内可能成为主流写法。现在开始尝试,能让你提前掌握下一代CSS开发技巧。
contain 属性允许我们指定特定的 DOM 元素和它的子元素,让它们能够独立于整个 DOM 树结构之外。目的是能够让浏览器有能力只对部分元素进行重绘、重排,而不必每次都针对整个页面。
Html5的新特性语义化标签:有利于SEO,有助于爬虫抓取更多的有效信息,爬虫是依赖于标签来确定上下文和各个关键字的权重。表单新特性,多媒体视频(video)和音频(audio)
var不存在块级作用域,具有变量提升机制。 let和const存在块级作用域,不存在变量提升。在同一作用域内只能声明一次。const在声明时需要赋值且无法修改,但如果常量是对象,则对象的属性可以修改。
Optional Chaining(可选链式调用);Nullish coalescing(空值合并);Pipeline operator(管道运算符)通过三个函数对字符串进行处理;
在今天早些时候Angular团队发布了8.0.0稳定版。其实早在NgConf 2019大会上,演讲者就已经提及了从工具到差分加载的许多内容以及更多令人敬畏的功能。下面是我对8.0.0一些新功能的简单介绍,希望可以帮助大家快速了解新版本
与我使用的其他框架相比,我最喜欢 React 的原因之一就是它对 JavaScript 的暴露程度。没有模板DSL( JSX 编译为合理的 JavaScript),组件 API 只是通过添加 React Hooks 变得更简单,并且该框架为解决的核心 UI 问题提供非常少的抽象概念
最近 ECMAScript2019,最新提案完成:tc39 Finished Proposals,我这里也是按照官方介绍的顺序进行整理,如有疑问,可以查看官方介绍啦~另外之前也整理了 《ES6/ES7/ES8/ES9系列》,可以一起看哈。
JavaScript 最初的目的是为了“赋予网页生命”。这种编程语言我们称之为脚本。它们可以写在 HTML 中,在页面加载的时候会自动执行。脚本作为纯文本存在和执行。它们不需要特殊的准备或编译即可运行。
你可能刚上手 JavaScript,或者只是曾经偶尔用过。不管怎样,JavaScript 改变了很多,有些特性非常值得一用。 这篇文章介绍了一些特性,在我看来,一个严肃的 JavaScript 开发者每天都多多少少会用到这些特性
HTTP/2 相比于 HTTP/1.1,可以说是大幅度提高了网页的性能,只需要升级到该协议就可以减少很多之前需要做的性能优化工作,当然兼容问题以及如何优雅降级应该是国内还不普遍使用的原因之一。
内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!