当前位置:Gxlcms > html代码 > CSS秘密花园:通过模糊来De-emphasize(去强调)_html/css_WEB-ITnose

CSS秘密花园:通过模糊来De-emphasize(去强调)_html/css_WEB-ITnose

时间:2021-07-01 10:21:17 帮助过:30人阅读

《 CSS Secrets 》是 @Lea Verou 最新著作,这本书讲解了有关于CSS中一些小秘密。是一本CSSer值得一读的一本书,经过一段时间的阅读,我、@南北和@彦子一起将在W3cplus发布一系列相关的读后感,与大家一起分享。

在上一节的“通过调节亮度去强调”中 ,我们看到了通过调节亮度来让Web APP上的一些部分de-emphasize的方法,使用了一个半透明的黑色覆盖层。但是,当页面上有很多东西的时候,我们需要调暗很多,才可以为其上的文本提供足够的对比度,或是把用户的注意力转移到突出显示的盒子上或其它元素上边。还有一种更优雅的方式,如下图所示,是除了调光之外(或者直接不要调光)还把其它的所有东西都模糊。这看起来更真实,因为它模仿了我们看对象的视觉创建了一个深度,也就是当我们专心看物理上离我们近的东西时的视线。

游戏网站 polygon.com 提供了一个非常棒的示例,通过模糊对话框后面的所有东西,把用户的注意力集中到对话框上。

但是,这个效果要实现的话却不是那么容易。在 滤镜效果 出现之前,这几乎是不可能实现的,即使是有 blur() 滤镜,要实现起来也很困难。我们要怎么应用模糊滤镜呢,如果我们想要把它应用到除了某个元素之外的所有东西上呢?如果我们把它应用给 元素,页面上的所有东西都会被模糊,包括我们希望吸引用户注意力的元素。这和我们在第四章第四节中碰到的问题非常相似,但在这里我们不能应用相同的解决方案,因为所有东西都在我们的对话框后边,而不仅仅是一个背景图片。我们怎么做呢?

解决方案

我们需要额外的HTML元素来完成这个效果:我们需要把我们页面上的所有东西包裹在一个元素中,除了那个我们不想要让它变模糊的元素,这样我们才可以对它应用模糊。

元素非常适合,因为:它不仅可以包裹页面的主要内容(对话框通常不是主要内容),还可以让我们同我们想要的样式挂钩。HTML标签如下:

Bacon Ipsum dolor sit amet…
O HAI, I’m a dialog. Click on me to dismiss.

我们假设所有的

元素都是初始情况下隐藏的,任何时候都是最多只有一个可见。

你可以在上图中看到它的最终效果。然后,在我们每次想要让对话框出现,并给它们应用模糊滤镜的时候,我们需要给

元素应用一个类,如下:

main.de-emphasized {    filter: blur(5px);}

如下图所示,这已经是一个很大的进步了。

但是,现在模糊应用得非常快,看起来有些不自然,感觉是比较尴尬的用户体验。因为CSS滤镜可以应用动画效果,我们可以在模糊页面时应用一个平滑的过渡:

main {    transition: .6s filter;}main.de-emphasized {    filter: blur(5px);}

把这两种de-emphasizing效果(调光和模糊)结合起来使用是一个不错的主意。一种方法是使用 brightness() 和/或 contrast() 滤镜:

main.de-emphasized {    filter: blur(3px) contrast(.8) brightness(.8);}

你可以在下图看到结果。

通过CSS滤镜调光意味着,如果它们不被支持的话,没有降级。所以通过其它方法来实现调光效果可能会更好,也可以把它作为一个降级(如,我们在上一节中看到的 box-shadow 方法)。这还可以帮我们解决光圈效应的问题,如上图的边缘。在下图中我们使用了一个阴影用于调光,这个问题就解决了。

人气教程排行