Heim >Web-Frontend >HTML-Tutorial >CSS秘密花园: 通过模糊来De-emphasize(去强调)_html/css_WEB-ITnose

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

WBOY
WBOYOriginal
2016-06-21 08:51:461251Durchsuche

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

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

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

但是,这个效果要实现的话却不是那么容易。在 滤镜效果 出现之前,这几乎是不可能实现的,即使是有 blur() 滤镜,要实现起来也很困难。我们要怎么应用模糊滤镜呢,如果我们想要把它应用到除了某个元素之外的所有东西上呢?如果我们把它应用给

元素,页面上的所有东西都会被模糊,包括我们希望吸引用户注意力的元素。这和我们在第四章第四节中碰到的问题非常相似,但在这里我们不能应用相同的解决方案,因为所有东西都在我们的对话框后边,而不仅仅是一个背景图片。我们怎么做呢?

解决方案

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

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

<main>Bacon Ipsum dolor sit amet…</main><dialog>    O HAI, I’m a dialog. Click on me to dismiss.</dialog><!-- any other dialogs go here too -->

我们假设所有的

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

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

元素应用一个类,如下:

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 方法)。这还可以帮我们解决光圈效应的问题,如上图的边缘。在下图中我们使用了一个阴影用于调光,这个问题就解决了。

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn