德胜云资讯,添加一些关于程序相关的内容,仅供大家学习交流(https://www.wxclwl.com)

网站地图

搜索
德胜云咨询
前端分类 javascript CSS 正则表达式 html 前端框架 typescript Ajax
热门标签:
最新标签:

css新属性CSS五大热门新功能及使用方法介绍(一)css使用服务器字体新鲜出炉,

日期:2023/04/23 19:27作者:陈淑妤人气:

导读:在本文中,我们将探讨CSS的五个新属性,看看它们的作用以及如何将它们用于项目中。我们将为包含新闻源和角落里的小聊天框的页面创建网站布局。...

在本文中,我们将探讨css的五个新属性,看看它们的作用以及如何将它们用于项目中。我们将为包含新闻源和角落里的小聊天框的页面创建网站布局。有关更多CSS技巧,请查看我们探索不同CSS动画示例的文章。

在本教程中,您需要使用Chrome 65+或Firefox 59+。请查看随附的GitHub仓库以获取分步代码。我们将利用以下功能创建更好的体验并解决一些问题。

一、CSS显示模块(3级)

· display: contents;

· - 工作草案

·

二、CSS条件规则模块(3级)

· @support(...){...}

· - 候选推荐

· 参考阅读:

三、CSS Overscroll行为模块(1级)

· overscroll-behavior: contain;

· - 非官方

·

· 参考阅读:

四、CSS选择器模块(4级)

· :focus-within

· - 工作草案

·

· 参考阅读:MDN web docs ,

五、 CSS遏制模块(1级)

· contain: paint;

· - 候选推荐

·

· 参考阅读:

下面具体来看看这些新特性:

01.设置新闻源的html

首先,我们需要为我们的新闻源设置一些超级简单的重复标记。我们先来创建一个带有无序列表的.container div。给<ul>提供.feed类,然后创建10个列表项,每个列表项包含一个带有.card类和文本卡1,卡2等的div 。

最后使用.nested类在5和6之间创建另一个列表项 - 这将在以后有用 - 并使用文本卡A,卡B等在内部添加<ul>三个列表项。

<body>

<div class="container">

<ul class="feed">

<li><div class="card">Card 1</div></li>

<li><div class="card">Card 2</div></li>

<li><div class="card">Card 3</div></li>

<li><div class="card">Card 4</div></li>

<li><div class="card">Card 5</div></li>

<li class="nested">

<ul>

<li><div class="card">Card A</div></li>

<li><div class="card">Card B</div></li>

<li><div class="card">Card C</div></li>

</ul>

</li>

<li><div class="card">Card 6</div></li>

<li><div class="card">Card 7</div></li>

<li><div class="card">Card 8</div></li>

<li><div class="card">Card 9</div></li>

<li><div class="card">Card 10</div></li>

</ul>

</div>

</body>

02.新闻源样式

现在我们需要添加一些快速样式,这样看起来更像是新闻源。首先,我们可以给<body>一个微妙的灰色背景颜色。然后给.container最大宽度为800px并使用margin:0 auto; 中心对齐它。

让我们给.card一个白色背景,10px填充和边距,最后一个最小高度为300px - 这应该足以让我们使页面可滚动。最后,我们将在.feed上撒上一些Flexbox魔法,使物品流畅,每行两张牌。

.feed {

display: flex;

flex-wrap: wrap;

}

.feed li {

flex: 1 0 50%;

}

03.修复布局问题

如果向下滚动列表,您会注意到我们在嵌套列表中的卡A - C卡会导致一些布局问题。理想情况下,我们希望它们与剩下的卡一起流入,但它们都被粘在一起。原因是flex容器(使用display:flex创建)仅使其直接子项(即列表项)成为flex项。

现在,解决这个问题的唯一方法就是改变标记,但让我们假装你没有那么奢侈。也许新闻源标记是由第三方脚本生成的,或者是您尝试重新设置的遗留代码。那我们怎么解决这个问题呢?

可以使用display: contents。这个小小的单行程基本上使一个元素表现得好像它不存在。您仍然可以看到元素的后代,但元素本身不会影响布局。

因为我们假装我们无法更改标记(仅适用于此步骤),我们可以对此有点聪明,并使.card元素成为flex项,几乎完全忽略列表标记。

首先删除现有的.feed li类,然后对<ul><li>元素使用display:contents

.feed ul,

.feed li {

display: contents;

}

现在你应该看到卡片顺序流动,但我们已经失去了尺寸。通过将flex属性添加到.card来修复此问题:

.card {

flex: 1 0 40%;

}

我们的卡片现在正在使用Flexbox的奇迹,就好像它们的结构无序列表标记不存在一样。

作为旁注,您可能想知道为什么将flex-basis值设置为40%。这是因为.card类有一个边距,它不包含在宽度计算中,正如您在使用box-sizing时所期望的那样:border-box。要解决这个问题,我们只需要将flex-basis设置得足够高,以便在必要的点触发包装,Flexbox将自动填充剩余的空间。

04.探索功能查询

尽管display:contents正是我们所需要的,但它仍然只处于W3C的Working Draft状态。而Chrome支持仅在2018年3月发布的65版本中获得支持。令人难以置信的是,Firefox自2015年4月起就获得了支持!

如果在DevTools中禁用该样式,您将看到我们的更改在显示时对布局造成了一些混乱未应用display: contents。那么我们能做些什么呢?我们下一个新功能的时间 - 功能查询。

这些工作就像媒体查询一样,但它们允许您询问浏览器 - 仅使用CSS - 如果支持属性和值表达式。如果是,则将应用查询中包含的样式。现在,让我们将display: contents样式移动到要素查询中。

@supports (display: contents) {

.feed ul,

.feed li {

display: contents;

}

.card {

flex: 1 0 40%;

}

}

05.使用not来获得更清晰的结果

通常在这种渐进增强方案中,我们使用查询来添加新样式,但它还必须禁用回退布局所需的一些原始样式。

但是您可能会认为因为对功能查询的支持非常好(如果您忽略IE),您实际上想要使用功能查询not运算符。它的工作方式与您预期的一样,因此当 display: contents 不支持时,我们可以将原始的Flex属性重新应用到列表项中:

@supports not (display: contents) {

.feed li {

flex: 1 0 50%;

}

}

在NOT查询中,我们可以添加一些样式,这样.nested项基本上可以通过使用display:content重新应用继承的内容。

feed li.nested {

flex-basis: 100%;

}

.feed li.nested ul {

display: flex;

flex-wrap: wrap;

}

06.更进一步

您已经可以看到特性查询的潜力,但真正酷的是,您可以使用三个可用的运算符来组合表达式:and、or和not。也许我们也可以检查display: flex支持,然后添加一个基于浮动的回退。我们不会在这里这样做,但如果是这样的话,我们将首先修改两个特性查询,如下所示:

@supports (display: flex) and (display: contents) {

...

}

@supports (display: flex) and (not (display: contents)) {

...

}

作为奖励,您还可以测试自定义属性支持,如下所示:

@supports (--foo: green) {

...

}

07.添加聊天框

现在我们有一个漂亮的新闻源,让我们添加一个固定在屏幕右下角的聊天框。我们需要一个消息列表和一个文本字段供用户输入他们的消息。在打开<body>标记之后添加此块:

<div class="chat">

<div class="messages">

<ul>

<li><div class="message">Message 1</div></li>

<li><div class="message">Message 2</div></li>

<li><div class="message">Message 3</div></li>

<li><div class="message">Message 4</div></li>

<li><div class="message">Message 5</div></li>

<li><div class="message">Message 6</div></li>

<li><div class="message">Message 7</div></li>

<li><div class="message">Message 8</div></li>

<li><div class="message">Message 9</div></li>

<li><div class="message">Message 10</div></li>

</ul>

</div>

<input type="text" class="input">

</div>

08.设置聊天框的样式

是时候快速添加一些造型让它看起来不错了。

.chat {

background: #fff;

border: 10px solid #000;

bottom: 0;

font-size: 10px;

position: fixed;

right: 0;

width: 300px;

z-index: 10;

}

.messages {

border-bottom: 5px solid #000;

overflow: auto;

padding: 10px;

max-height: 300px;

}

.message {

background: #000;

border-radius: 5px;

color: #fff;

margin: 0 20% 10px 0;

padding: 10px;

}

.messages li:last-child .message {

margin-bottom: 0;

}

.input {

border: none;

display: block;

padding: 10px;

width: 100%;

}

09.Scroll链接

希望现在你能有一个小聊天室,上面有一个可滚动的消息列表在你的新闻提要上。太棒了但是,当您在嵌套区域内滚动到其可滚动范围的末尾时,您注意到了发生了什么吗?试试看。一直滚动到消息的末尾,您将看到页面本身将开始滚动。这称为滚动链。(Scroll Chaining)

在我们的例子中,这不是什么大问题,但在某些情况下可能是这样。当我们在modals或context menus中创建可滚动区域时,我们之前就必须围绕这一特性工作。

脏修复是将<body>设置为overflow:hidden,但是有一个很好的,有光泽的新CSS属性可以修复所有这些并且它是一个简单的单行程序。向过度滚动行为问好。有三个可能的值:

· auto - 默认值,允许滚动链接

· contain - 禁用滚动链接

· none - 禁用滚动链和其他过卷效果(例如橡皮筋)

我们可以使用速记过度滚动行为,或者我们可以使用overscroll-behavior-x(或-y)来定位特定方向。让我们将它添加到我们的.messages类:

.messages {

...

overscroll-behavior-y: contain;

... }

现在再次尝试滚动,当您到达内容的末尾时,您将看到它不再影响页面的滚动。

如果您想在PWA中实现pull-to-refresh功能,比如刷新新闻源,这个属性也非常方便。某些浏览器(如Chrome for Android)会自动添加自己的浏览器,直到现在还没有简单的方法来禁用它,而不使用JS来使用影响性能的非被动处理程序取消事件。

现在你只需要添加overscroll-behavior:contains到 viewport-containing的元素,可能是<body><html>

值得注意的是,该属性不是W3C标准,而是Web孵化社区组织(WICG)的提议。流行的,稳定的和成熟的WICG提案被考虑在稍后阶段迁移到W3C工作组。

10.不使用时折叠聊天框

目前聊天框占用了相当多的空间,除非我们与它进行交互,否则会让人分心。幸运的是,我们可以用一点CSS魔法来做一些事情。

但首先我们需要稍微修改现有的样式。默认情况下,我们希望折叠聊天框,因此我们需要减少.messages类中的max-height值 。当我们在那里时,我们还可以添加到max-height属性的转换:

.messages {

...

max-height: 25px;

transition: max-height 500ms; }

下一页:继续探索步骤11-20中的新CSS功能

网站地图

Copyright © 2002-2022 香港德胜云网络 版权所有 | 备案号:蜀ICP备2023007363号-5

声明: 本站内容全部来自互联网,非盈利性网站仅供学习交流