品|开源中国
Chrome 106 已发布,Chrome 博客显示,Chrome 106 中有 20 个安全修复程序。其中有 5 个 “高” CVE 级别的安全漏洞和 8 个 “中等” 严重性漏洞。其次,Chrome 106 中包含大量新功能,比如:
Chrome 106 添加了一系列新的 Intl API ,包含大量数字格式功能,有助于以本地化格式显示内容(货币符号的解析、格式化日期和时间的标准等...)。
与其他 Intl API 一样,新的 Intl API 将解析内容的负担转移给了系统,无需向每个用户发送或维护复杂的本地化代码。
查看 MDN 上的 Intl Number Format 文档以获取更多信息
CSS 'ic' 长度单位
新的长度单位:ic,ic 类似于 ch。但是 ic 专门用于以使用表意文字的语言(汉字属于表意文字,因此中日韩三种语言都适用 ic 长度)编写的文本,它根据这个字符 [某个点] 的宽度或高度来测量长度。
无论文本大小如何,ic 单位都能提供可预测的控制。例如,如果设置 max-width 容器的长度是 10ic,则容器最多只能包含 10 个全角字形,无论字体大小如何。
CSS Grid 即将支持 grid-template-columns 和 grid-template-rows 的插值,它计划在 106 中,但已延迟,并将在 Chrome 107 中推出。
在 requestFileSystem () 中弃用对 window.PERSISTENT 配额类型的支持。
弃用 cookie 域属性中的非 ASCII 字符
为了与 RFC 6265bis 中的最新规范保持一致,Chromium 将拒绝具有包含非 ASCII 字符的 “域” 属性的 cookie(例如 Domain=é xample.com)。
SerialPort BYOB 阅读器支持
将 SerialPort 提供的 ReadableStream 的基础数据源更新为可读字节流。此更改与调用不带参数的 port.readable.getReader () 的现有代码向后兼容。开发人员可以通过调用 getReader ({ mode: 'byob'}) 来检测对 BYOB 阅读器的支持,因为旧实现在传递新参数时会抛出 TypeError。
取消前缀 -webkit-hyphenate-character CSS 属性
此更改支持不带前缀的连字符,而不仅是 -webkit - 连字符。根据 csswg 的讨论,https://github.com/w3c/csswg-drafts/issues/6887,hyphenate-character css 属性足够稳定可以发布。
Chrome 106 中的其他更改:
Chrome DevTools 中的新功能 (106)
Chrome 106 弃用和删除
ChromeStatus.com 针对 Chrome 106 的更新
Chromium 源代码库更改列表
Chrome 发布日历
于在CSS中实现容器的长宽比最初的创意是来自于在Web中如何实现纵横比。主要是用于响应式设计中的iframe、img和video之类的元素。随之扩展为适用于任何容器的长宽比。那在CSS中到底有多少种方案可以实现呢?我一向喜欢做这样的事情,到处搜集多种解决方案。
如果你看到前面的两篇文章,或许你知道一些方法,或者说所有的方案你都想到了。如果是这样的话,你可以停止阅读这篇。如果没有的话,你可以继续往下阅读。
长宽比在影视制作中又被称之为宽高比,指的是一个视频的宽度除以它的高度所得到的比例,通常表示为x:y或x×y,其中的冒号和叉号表示中文的“比”之意。目前,在电影工业中最常被使用的是anamorphic比例(即2.39:1)。传统的4:3仍然被使用于现今的许多电视画面上,而它成功的后继规格16:9则被用于高清晰度电视或数字电视上。常见的比例:
使用CSS实现容器长宽比,常见的HTML模板结构有两种:
<div class="aspectration" data-ratio="16:9">
<div class="content"></div>
</div>
另外一种结构是:
<div class="aspectration" data-ratio="16:9"> </div>
具体使用的时候,根据自己的使用场景采用不同的结构。
前面也提到过了,使用CSS实现长宽比方案有多种,下面简单的罗列一下这些方案。不过每种方案都不会详细介绍,因为代码非常简单,看一眼代码就能明白其中原理。
这是最早提出的一种实现方案,主要借助的原理是利用padding-top或者padding-bottom的百分比值,实现容器长宽比。在CSS中padding-top或padding-bottom的百分比值是根据容器的width来计算的。如此一来就很好地实现了容器的长宽比。采用这种方法,需要把容器的height设置为0。而容器内容的所有元素都需要采用position:absolute,不然子元素内容都将被padding挤出容器(造成内容溢出)。
比如我们容器的长宽比是16:9,那么根据比例计算:100% * 9 / 16可以得到56.25%。如果你希望的是4:3,那么对应的就是100% * 3 / 4。
具体的CSS代码如下:
.aspectration {
position: relative; /*因为容器所有子元素需要绝对定位*/
height: 0; /*容器高度是由padding来控制,盒模型原理告诉你一切*/
width: 100%;
}
.aspectration[data-ratio="16:9"] {
padding-top: 56.25%;
}
.aspectration[data-ratio="4:3"]{
padding-top: 75%;
}
通过通配符*选择器,让其子元素的宽高和容器.aspectration一样大小:
.aspectration > * {
position: absolute;
left: 0;
top: 0;
width: 100%;
height: 100%;
}
padding & calc()
这个方案采用的是padding和calc()配合在一起使用。其实原理和第一个方案是一样的。只不过在第一个方案中,我们每次都需要对padding的值进行计算,如果使用calc()可以通过浏览器直接计算出padding的百分比值。
.aspectration[data-ratio="16:9"] {
padding-top: calc(100% * 9 / 16);
}
padding & CSS变量
对于变量而言,以前是其他计算器语言和CSS处理器的特性,不过值得特性的是,现在也是CSS的特性。接下来的这个方案也是基于padding原理,只不过是借助于CSS变量特性,让前面的方案变得更为灵活一些。使用CSS的变量时,可以把HTML中data-ratio去掉了。换成style="--aspect-ratio:16/9",也可以是style="--aspect-ratio:1.4;"。同时也可以借助于第二个方案中的calc()。因为CSS的变量和calc()函数的结合是一种完美的结合。
.aspectration[style*="--aspect-ratio"] {
padding-top: calc(100% / (var(--aspect-ratio)));
}
padding & 伪元素
前面的方案都是在.aspectration元素上使用padding值。但在CSS中,还可以使用CSS的伪元素::before或::after来撑开容器。
.aspectration {
position: relative;
}
.aspectration:after {
content: "";
display: block;
width: 1px;
margin-left: -1px;
background-color: orange;
}
.aspectration[data-ratio="16:9"]:after {
padding-top: 56.25%;
}
.content {
width: 100%;
height: 100%;
position: absolute;
top: 0;
left: 0;
}
CSS新特性中提供了一种新的单位vw。了解过这个单位的同学都知道,浏览器100vw表示的就是浏览器的视窗宽度(Viewport)。打个比方说,如果你的浏览器是1334px,那么对就的100vw=1334px。这个时候也就是说1vw=13.34px。这里的100vw也对应前面方案中的100%。这样我们就可以把前面的%单位换成vw的单位。打个比方说,16:9对应的就是100vw * 9 / 16=56.25vw。这个值可以用在padding-top或者padding-bottom中。但这里演示的不再是padding了,而是把这个值给height。
.aspectration[data-ratio="16:9"] {
width: 100vw;
height: 56.25vw;
}
上面的示例中width的值是30vw,那么对应的height值就是30vw * 9 / 16=16.875vw。
这是一个很有创意的解决方案,使用的都是CSS新特性:视窗单位和CSS Grid Layout。简单说一下其中的实现原理:将容器.aspectration通过display:grid声明为一个网格容器,并且利用repeat()将容器划分为横向比例,比如16,那么每一格的宽度对应的就是100vw * 9 / 16=6.25vw。同样使用grid-auto-rows,将其设置的值和横向的值一样。在子元素上通过grid-column和grid-row按比例合并单元格。
.aspectration {
display: grid;
grid-template-columns: repeat(16, 6.25vw);
grid-auto-rows: 6.25vw;
}
.aspectration[data-ratio="16:9"] .content {
grid-column: span 16;
grid-row: span 9;
}
在WICG的讨论上,有人提出来了原生的长宽比属性aspect-ratio。例如,给定一个容器元素它的width和height都设置为auto,并且aspect-ratio的值为2/1,max-height:200px。一个容器宽度为500px时,元素首先会设置width:500px,然后根据aspect-ratio比例将height设置为250px。这个时候其实违反了max-height的约束。相反,容器大小会变成height: 200px和width:400px。另外,如果元素的max-width是450px时,长宽比将会完全被忽视,因为无法满足。
如果把width设置为一个百分比,高度不设置一个固定值:
.aspectration[data-ratio="16:9"] {
width: 100%;
height: aspect-ratio(16/9);
}
现在讨论讨论趋势是把aspect-ratio属性值变成属性,比如:
.aspectration[data-ratio="16:9"] {
width: 100%;
aspect-ratio: calc(16/9);
}
到目前为止,还没有任何浏览器支持该属性,但我们可以借助PostCSS Aspect Ratio插件来实现上述的功能:
Web领域的一些基本概念。
Web(World Wide Web)叫全球广域网,俗称万维网(www)。
W3C(World Wide Web Consortium)叫万维网联盟,是国际最著名的标准化组织,制定了web标准。
一个网页包含了html元素 Css JavaScript,Html元素决定了网页结构,Css进行了修饰美化,JavaScript控制了交互行为和动态效果。
web标准包含了下面三个方面:
Html不是一种编程语言,而是描述性的标记语言,主要作用是定义内容的结构。
2014年10月万维网联盟(W3C)完成了HTML5标准制定,是目前最新的HTM版本。
HTML5的出世,标志着web进入一个富客户端(具有很强的交互性和体验的客户端程序)时代,像APP网页,小程序都是HTML5的应用场景。
Html5新特性:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8"> <!--字符集-->
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<meta name="Author" content="">
<meta name="Keywords" content="关键词" />
<meta name="Description" content="页面描述" />
<title>页面标题</title>
</head>
<body>
</body>
</html>
viewport用户网页的可视区域,一个针对移动网页优化的页面 viewport meta 标签如下:
<meta name="viewport" content="width=device-width, initial-scale=1.0">
head区域元素:
meta title style link script base。
body区域元素:
块级元素:每个元素都是独占一行
行内元素:元素在同一行水平排列
inline-block:元素可以排列在同一行显示,并且可以设置一些块元素属性
通过Css:display:inline-block 改变元素。
很多元素都自带了默认样式,不同浏览器下默认样式表现不一致,为了统一或者满足一些需求我们需求将所有默认样式清空,这种处理方式又称为 Css Reset,比如:
*{
margin: 0;
padding: 0;
}
另外一种方案使用normalize.css,它将不同浏览器下的默认样式进行了统一,
https://github.com/necolas/normalize.css
html中的单位是像素px
绝对单位
相对单位
属性:字体、行高、颜色、大小、背景、边框、滚动、换行、修饰属性(粗体、斜体、下划线)
p{
font-size: 20px; /*字体大小*/
line-height: 30px; /*行高*/
font-family: PingFang SC; /*字体类型:显示PingFang SC,没有就显示默认*/
font-style: italic ; /*italic表示斜体,normal表示不倾斜*/
font-weight: bold; /*粗体或写(400|500|600)*/
font-variant: small-caps; /*小写变大写*/
}
行高(line-height)
一般约定行高、字号都是偶数,这样保证它们的差一定偶数除2得到整数,如下图所示:
line-height
文本垂直居中
对于单行文本可以设置行高=盒子高度。
对于多行元素的垂直对齐,我们可以使用vertical-align: middle属性,不过vertical-align 仅适用inline、inline-block 和 table-cell 元素。
vertical-align
vertical-align: baseline;
vertical-align: sub;
vertical-align: super;
vertical-align: text-top;
vertical-align: text-bottom;
vertical-align: middle;
vertical-align: top;
vertical-align: bottom;
/* 指定长度值 */
vertical-align: 10em;
vertical-align: 4px;
/* 使用百分比 */
vertical-align: 20%;
/* 全局值 */
vertical-align: inherit;
vertical-align: initial;
vertical-align: revert;
vertical-align: unset;
内容溢出处理
filter:gray()
理解优先级很重要,有助于我们排查一些问题。浏览器将优先级分为两部分:HTML的行内样式和选择器的样式。
行内样式
行内样式是直接作用在元素,它的优先级高于选择器样式,使用!important可以提高样式表的优先级。
<div style="font-size:16px">
</div>
选择器样式
<style type="text/css">
p{
font-size: 16px;
}
</style>
<link rel="stylesheet" href="style/app.css">
优先级规则如下:
优先级
我们通过下图这种标记方式,就可以判断出选择器的优先级。
优先级
两条经验法则
由多个基础选择器组合成的复杂选择器。
多个基础选择器连起来(中间没有空格)组成一个复合选择器(如:ul.nav)。复合选择器选中的元素将匹配其全部基础选择器,.box.nav 可以选中 class="box nav" ,但是不能选中 class="box"。
用于选中某种特定状态的元素,优先级(0,1,0)。
:nth-child(an+b)
更多参考:https://developer.mozilla.org/zh-CN/docs/Web/CSS
伪元素选择器可以向HTML标记中未定义的地方插入内容,优先级(0,0,1)。
属性选择器用于根据HTML属性进行匹配元素,优先级(0,1,0)。
本文要点回顾,欢迎留言交流。
*请认真填写需求信息,我们会在24小时内与您取得联系。