在CSS中使用when/else的方法


Posted in HTML / CSS onJanuary 18, 2022

大家都知道CSS已经有@media@support 查询形式的条件,可以非常灵活地选择对应的样式,然而还有一个新的提议叫做 when/else,这语法似乎看起来更加明了方便

在这篇文章完稿前,when 的提议已经被 CSSWG 通过了,而 else 是一个单独的提案,目前是一个4级规范

让我们来看看 when/else 是如何使用的吧

when/else 语法

先来看看为了实现页面响应式是如何做的,这就要用到 CSS媒体查询

@media (min-width: 800px) {
  /* 宽度大于800px时的样式 */
}

@media (max-width: 799px) {
  /* 宽度小于799px时的样式 */
}

而换成 when/else 后呢?

@when media(min-width: 800px) {
  /* 宽度大于800px时的样式 */
}
@else {
  /* 宽度不大于800px时的样式 */
}

语义上比 @media 更加好了

when/else 甚至还能支持多条件判断,跟写 if/else 似的

@when media(min-width: 800px) {
  /* 宽度大于800px时的样式 */
}
@else media(min-width: 600px) {
  /* 宽度大于600px但不大于800px时的样式 */
}
@else {
  /* 宽度不大于600px时的样式 */
}

更多用法

一起来看看 when/else 有哪些不错的用法~

组合使用

再来举一个 @media@support 共用的例子

@media (min-width: 800px) {
    @supports (display: flex) {
        .flex {
            flex-direction: column;
        }
    }
}

这段代码的意思是当页面宽度大于 800px 并且浏览器支持 display: flex 语法时,给类名为 flex 的元素设置 flex-direction: column 的样式

其实不难理解,但要是换成 when/else 的语法会是啥样呢?

@when media(min-width: 800px) and supports(display: flex) {
    .flex {
        flex-direction: column;
    }
}

内联使用

@when 也可以内联在CSS样式中使用,例如:

.button {
  padding: 2rem;
  @when element(max-width: 400px) {
    padding: 1rem;
  }
}

新的媒体查询写法

我在初学 @media 这个语法时也觉得有些拗口,min-widthmax-width 还是需要稍微思考一下才知道是什么意思,然后有一个有意思的媒体查询写法也想在这里提一下,它的语法感觉挺有意思的,而且特别易懂,写法如下:

@media (width <= 800px) {
  /* 页面宽度小于等于800px时的样式 */
}

这样的语法是不是就特别清晰明了了?不过可惜的是它还是一个4级规范

总结

这些提案进展得相当快,关于使用 @if 还是 @when 的问题也存在一些争议,怕 @if会与 Sass 冲突,还有一个建议是用 @where 来代替。总之不管叫啥名字,都是为了让CSS语法更丰富,期待!

到此这篇关于在CSS中写 when/else 是什么体验的文章就介绍到这了,更多相关css中when/else内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章,希望大家以后多多支持三水点靠木!

 
HTML / CSS 相关文章推荐
CSS3 text-shadow实现文字阴影效果
Feb 24 HTML / CSS
HTML5+CSS3网页加载进度条的实现,下载进度条的代码实例
Dec 30 HTML / CSS
CSS Houdini实现动态波浪纹效果
Jul 30 HTML / CSS
css3实现平移效果(transfrom:translate)的示例
Nov 13 HTML / CSS
利用简洁的图片预加载组件提升html5移动页面的用户体验
Mar 11 HTML / CSS
HTML5实时语音通话聊天MP3压缩传输3KB每秒
Aug 28 HTML / CSS
深入解析HTML5的IndexedDB索引数据库
Sep 14 HTML / CSS
CSS3 画基本图形,圆形、椭圆形、三角形等
Sep 20 HTML / CSS
浅谈HTML5 服务器推送事件(Server-sent Events)
Aug 01 HTML / CSS
HTML5 weui使用笔记
Nov 21 HTML / CSS
CSS3实现三角形不断放大效果
Apr 13 HTML / CSS
基于HTML十秒做出淘宝页面
Oct 24 HTML / CSS
CSS使用伪类控制边框长度的方法
浅谈css实现背景颜色半透明的两种方法
Dec 06 #HTML / CSS
HTML怎么设置下划线?html文字加下划线方法
Dec 06 #HTML / CSS
使用 CSS 轻松实现一些高频出现的奇形怪状按钮
DIV CSS实现网页背景半透明效果
CSS实现五种常用的2D转换
CSS巧用渐变实现高级感背景光动画
You might like
特详细的PHPMYADMIN简明安装教程
2008/08/01 PHP
php expects parameter 1 to be resource, array given 错误
2011/03/23 PHP
PHP获取url的函数代码
2011/08/02 PHP
详解PHP+AJAX无刷新分页实现方法
2015/11/03 PHP
PHP简单实现正则匹配省市区的方法
2018/04/13 PHP
安装PHP扩展时解压官方 tgz 文件后没有configure文件无法进行配置编译的问题
2020/08/26 PHP
Prototype Array对象 学习
2009/07/19 Javascript
cookie 最近浏览记录(中文escape转码)具体实现
2013/06/08 Javascript
jQuery进行组件开发完整实例
2015/12/15 Javascript
bootstrap 下拉多选框进行多选传值问题代码分析
2017/02/14 Javascript
12个非常有用的JavaScript技巧
2017/05/17 Javascript
bootstrap table表格插件之服务器端分页实例代码
2018/09/12 Javascript
JS如何获取地址栏的参数实例讲解
2018/10/06 Javascript
微信小程序用户授权、位置授权及获取微信绑定手机号
2019/07/18 Javascript
详解Vue 换肤方案验证
2019/08/28 Javascript
layui在form表单页面通过Validform加入简单验证的方法
2019/09/06 Javascript
jquery实现淡入淡出轮播图效果
2020/12/13 jQuery
python爬取亚马逊书籍信息代码分享
2017/12/09 Python
rabbitmq(中间消息代理)在python中的使用详解
2017/12/14 Python
Python 实现两个服务器之间文件的上传方法
2019/02/13 Python
OpenCV 边缘检测
2019/07/10 Python
Python3 pandas 操作列表实例详解
2019/09/23 Python
python多进程间通信代码实例
2019/09/30 Python
详解pyinstaller selenium python3 chrome打包问题
2019/10/18 Python
Jupyter Notebook折叠输出的内容实例
2020/04/22 Python
详解HTML5 Canvas标签及基本使用
2020/01/10 HTML / CSS
VC++笔试题
2014/10/13 面试题
什么是Oracle的后台进程background processes?都有哪些后台进程?
2012/04/26 面试题
酒后驾驶检讨书
2014/01/27 职场文书
文秘求职信范文
2014/04/10 职场文书
信用卡工资证明格式
2014/09/13 职场文书
党员学习中共十八大报告思想汇报
2014/09/15 职场文书
个人自荐书怎么写
2015/03/26 职场文书
2015年社区消防安全工作总结
2015/10/14 职场文书
《思路决定出路》读后感3篇
2019/12/11 职场文书
python如何查找列表中元素的位置
2022/05/30 Python