原文:https://bitsofco.de/3-new-css-features-to-learn-in-2017/
译文:http://caibaojian.com/3-new-css-features-to-learn-in-2017.html
译者:前端开发博客(蔡宝坚)

未经许可,禁止转载,如有不妥之处,欢迎指正。

新年快乐!
随着新的一年到来,我们有一整套新的东西要开始学习。虽然今年的新特性有很多,但有3个新的特性是最令我激动不已的。

1.Feature Queries

前段时间,我写过关于Feature Queries的一篇文章,叫“我最想要的CSS特性之一”。好了,现在它已经出现在这里了。它支持除了IE浏览器之外的所有主流浏览器(包括Opera Mini)。

Feature Queries,使用这个 @supports 规则,允许我们包含CSS在一个条件块,但只有当前用户客户端支持一个特别的CSS property-value 才有效。举个简单的例子,只支持 display:flex 的浏览器才用Flexbox样式。

@supports ( display:flxe ){
.foo { display:flex; }
}

另外,使用像 and 和 not 的操作符,我们可以创建更加复杂的特性查询。例如,我们可以检测一个浏览器只支持旧的Flexbox语法-

@supports ( display: flexbox )
and
( not ( display: flex ) ) {
.foo { display: flexbox; }
}

兼容情况

2.Grid 布局

CSS 网格布局模块定义了一个以创建网格为基础的布局系统。它跟Flexbible Box 布局模块很相似,但它更多的是为页面布局而设计,因此具有许多不同的特性。

清晰的项放置

一个网格是由Grid Container(用 display: grid 创建),和Grid项(这是子项)构成。在我们的CSS中,我们可以容易并且清晰的组织网格项的放置和顺序,而不用管他们在标记中的放置。

举个例子,在我的文章“使用CSS网格的圣杯布局,我展示一下我们如何使用这个组件来创建类似的“圣杯布局”。

下面这个CSS只有短短31行

.hg__header { grid-area: header; }
.hg__footer { grid-area: footer; }
.hg__main { grid-area: main; }
.hg__left { grid-area: navigation; }
.hg__right { grid-area: ads; } .hg {
display: grid;
grid-template-areas: "header header header"
"navigation main ads"
"footer footer footer";
grid-template-columns: 150px 1fr 150px;
grid-template-rows: 100px
1fr
30px;
min-height: 100vh;
} @media screen and (max-width: 600px) {
.hg {
grid-template-areas: "header"
"navigation"
"main"
"ads"
"footer";
grid-template-columns: 100%;
grid-template-rows: 100px
50px
1fr
50px
30px;
}
}

灵活的长度

CSS网格组件介绍了一个新的长度单位 fr ,它表示网格容器中剩下的自由空间的一小部分。

这允许我们根据网格容器中剩下的空间来分配网格子项目中的宽和高。例如,在圣杯布局中,我想要 main 容器占据除了两个侧栏之外剩下的空间,为了实现这个,我简单的写了:

.hg {
grid-template-columns: 150px 1fr 150px;
}

间距

我们可以使用 grid-row-gapgrid-column-gap和 grid-gap属性为我们的网格布局具体定义间隔。这些属性接受一个length-percentage 数据类型作为值,百分比对应于内容的区域。

举个例子,有一个5%的间隙,我们可以这样子写:

.hg {
display: grid;
grid-column-gap: 5%;
}

兼容情况

CSS网格组件最早在今年3月份将可以使用在浏览器中

3.原生变量

最近,原生CSS变量(css变量组件自定义属性)。这个组件介绍一个创建自定义变量的方法,它可以赋值给CSS属性。

举个例子,如果我们需要在样式表中多个地方使用到colour,我们可以把它当做一个变量和并引用它,而不必多次写它的实际值。

:root {
--theme-colour: cornflowerblue;
} h1 { color: var(--theme-colour); }
a { color: var(--theme-colour); }
strong { color: var(--theme-colour); }

现在有很多CSS预处理器像SASS可以做到这一点,但CSS变量有浏览器支持的优势。这意味着它们的值可以实时更新。为了改变下面的属性 --theme-colour ,例如,我们需要做的就是下面这个了:

const rootEl = document.documentElement;
rootEl.style.setProperty('--theme-colour', 'plum');

兼容情况

什么是兼容情况

如你所见,不是所有的特性都被所有浏览器所支持,所以我们要如何合适使用它们在生产中?好吧,用渐进增强!上一年,我在Fronteers 会议上讲了一个关于如何在CSS上使用渐进增加的演讲。你可以看一下下面这个:
https://player.vimeo.com/video/194815985

2017年值得学习的3个CSS特性的更多相关文章

  1. 2017年学习的三个CSS新特性

    这是翻译的一篇文章,原文是:3 New CSS Features to Learn in 2017,翻译的不是很好,如有疑问欢迎指出. 新的一年,我们有一系列新的东西要学习.尽管CSS有很多新的特性, ...

  2. 值得学习的CSS知识

    这里零度给大家推荐几个值得学习的CSS技巧,能让你编写网页事半功倍!一.清除默认值 通常 padding 的默认值为 0,background-color 的默认值是 transparent.但是在不 ...

  3. 值得学习的C语言开源项目

    值得学习的C语言开源项目   - 1. Webbench Webbench是一个在linux下使用的非常简单的网站压测工具.它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工 ...

  4. 是什么让C#成为最值得学习的编程语言

    随着 Web.iOS.Android.智能设备的流行,新的编程语言纷纷涌现并表现不俗,如 Ruby,Python,Scala,Go,Node.js,Swift 等.反观已经发展了近20年的 C# 语言 ...

  5. 值得学习的C/C++开源框架(转)

    值得学习的C语言开源项目 - 1. Webbench Webbench是一个在linux下使用的非常简单的网站压测工具.它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工作的 ...

  6. 精选 TOP45 值得学习的Python项目

    精选 TOP45 值得学习的Python项目 [导读]热门资源博客 Mybridge AI 比较了 18000 个关于 Python 的项目,并从中精选出 45 个最具竞争力的项目.我们进行了翻译,在 ...

  7. 精选9个值得学习的 HTML5 效果

    此文转自:http://www.cnblogs.com/lhb25/p/9-html5-effects.html,仅供本人学习参考,版权归原作者所有! 精选9个值得学习的 HTML5 效果[附源码] ...

  8. ASP.NET MVC WebApi 返回数据类型序列化控制(json,xml) 用javascript在客户端删除某一个cookie键值对 input点击链接另一个页面,各种操作。 C# 往线程里传参数的方法总结 TCP/IP 协议 用C#+Selenium+ChromeDriver 生成我的咕咚跑步路线地图 (转)值得学习百度开源70+项目

    ASP.NET MVC WebApi 返回数据类型序列化控制(json,xml)   我们都知道在使用WebApi的时候Controller会自动将Action的返回值自动进行各种序列化处理(序列化为 ...

  9. Python学习教程(十)精选 TOP45 值得学习的Python项目

    精选 TOP45 值得学习的Python项目 [导读]热门资源博客 Mybridge AI 比较了 18000 个关于 Python 的项目,并从中精选出 45 个最具竞争力的项目.我们进行了翻译,在 ...

随机推荐

  1. PHP中使用CURL模拟登录并获取数据实例

    cURL 是一个功能强大的PHP库,使用PHP的cURL库可以简单和有效地抓取网页并采集内容,设置cookie完成模拟登录网页,curl提供了丰富的函数,开发者可以从PHP手册中获取更多关于cURL信 ...

  2. [Swift实际操作]七、常见概念-(3)尺寸CGSize的使用详解

    本文将为你演示CGSize的使用 首先导入需要使用到的两个框架 import UIKit import QuartzCore 定义一个尺寸对象,尺寸对象包含宽度和和高度两个参数.从右侧的结果可以看出, ...

  3. js中call、apply、bind的使用

    写在前面的话 这三个方法都是来自Function.prototype上,所以所有的函数都可以使用. 他们有一个共同点,就是可以指定函数执行时的内部this指向. call和apply的区别在于参数的方 ...

  4. js 保留字符串中的关键字前后两个字符其他内容用省略号显示

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  5. WebDriver高级应用实例(1)

    1.1使用JavaScriptExecutor单击元素 被测网页的网址: http://www.baidu.com Java语言版本的API实例代码 import org.testng.annotat ...

  6. java编写service详细笔记 - centos7.2实战笔记(windows类似就不在重复了)

    java编写service详细笔记 - centos7.2实战笔记(windows类似就不在重复了)  目标效果(命令行启动服务): service xxxxd start #启动服务  servic ...

  7. mahout学习

    参考:http://www.360doc.com/content/14/0117/09/1200324_345883534.shtml Precondition: 启动Hadoop集群 bin/hdf ...

  8. if嵌套语句 shell脚本实例 测试是否闰年

    在 if 语句里面,你可以使用另外一个 if 语句.只要你能逻辑管理 你就可以使用多层嵌套. 以下是一个测试闰年的例子: #!/bin/bash # This script will test if ...

  9. jQuery中的100个技巧(译)

    1.当document文档就绪时执行JavaScript代码. 我们为什么使用jQuery库呢?原因之一就在于我们可以使jQuery代码在各种不同的浏览器和存在bug的浏览器上完美运行. <sc ...

  10. puppet的使用:安装puppet

    最近项目要使用puppet,趁机赶紧学习下. 在家里的机器中搭建puppet环境,使用两台ubuntu 14.04: 准备工作 时间同步 两台设备先进行时间同步,我把要安装master的机器作为NTP ...