现代 CSS

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

特别声明:如果您喜欢小站的内容,可以点击申请会员进行全站阅读。如果您对付费阅读有任何建议或想法,欢迎发送邮件至: airenliao@gmail.com!或添加QQ:874472854(^_^)

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

CSS Secrets

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

通过模糊来De-emphasize

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

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

解决方案

我们需要额外的HTML元素来完成这个效果:我们需要把我们页面上的所有东西包裹在一个元素中,除了那个我们不想要让它变模糊的元素,这样我们才可以对它应用模糊。<main>元素非常适合,因为:它不仅可以包裹页面的主要内容(对话框通常不是主要内容),还可以让我们同我们想要的样式挂钩。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 -->

我们假设所有的<dialog>元素都是初始情况下隐藏的,任何时候都是最多只有一个可见。

通过模糊来De-emphasize

你可以在上图中看到它的最终效果。然后,在我们每次想要让对话框出现,并给它们应用模糊滤镜的时候,我们需要给<main>元素应用一个类,如下:

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

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

通过模糊来De-emphasize

但是,现在模糊应用得非常快,看起来有些不自然,感觉是比较尴尬的用户体验。因为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);
}

你可以在下图看到结果。

通过模糊来De-emphasize

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

通过模糊来De-emphasize

如需转载,烦请注明出处:http://www.w3cplus.com/css3/css-secrets/de-emphasize-by-blurring.htmlNike Zoom KD Trey 5 IV black Men Basketball Shoes EM

返回顶部