CSS 技巧:多色和剪切阴影

长方体阴影很无聊。你听到我说的了。它们一次只能使用一种颜色,并且动画或过渡很慢。你知道什么才是整洁吗?制作一个使用元素背景颜色的投影。因此,如果元素的左上角是红色的,则阴影的左上角也是红色的。如果右下角为蓝色,则阴影的左下角将为蓝色。这不是很好吗?可惜在css中没有办法做到这一点……哦,等等,有。 让我们开始吧。

方法

实际上,我们所要做的就是在父元素后面直接创建一个伪元素,并让它继承相关的属性,如Backroundedge-Radius。然后我们添加一个cssblur()滤镜。这将创建元素背景的第二个副本,并将其模糊到元素后面。轻而易举。通过继承背景和相关属性,我们不必重复指定它们。

更好的是,如果你想以某种方式动画/平滑/挤压阴影,你可以在伪元素上使用CSS变换和不透明度的全部功能!

有什么问题吗?阴影不会在不支持css blur filter. 的浏览器]中显示

代码

 1/* The element that will have the blurred shadow. */
 2.fancy-box {
 3  /* We need to set the position value to something other than `static`
 4   * so that position: absolute for the pseudo-element will be relative
 5   * to this element. */
 6  position: relative;
 7
 8  /* A nice Alligator.io-themed linear gradient. */
 9  /* This technique works with any and every background type. */
10  background: linear-gradient(to bottom right, rgb(107,183,86), rgb(0,143,104));
11
12  /* Whatever else you want in here. */
13}
14
15/* The shadow pseudo-element. */
16.fancy-box::before {
17  content: ' ';
18  /* Position it behind the parent. */
19  z-index: -1;
20  position: absolute;
21  top: 0;
22  right: 0;
23  bottom: 0;
24  left: 0;
25
26  /* Inherit the background and border radius of the parent. */
27  background: inherit;
28  border-radius: inherit;
29
30  /* Blur it for maximum shadowy-ness. */
31  filter: blur(15px);
32
33  /* Hide the shadow until the element is hovered over. */
34  opacity: 0;
35  transition: opacity 300ms;
36}
37
38/* Show the shadow on hover. */
39.fancy-box:hover::before {
40  opacity: 1;
41}

结果

请注意它是如何处理透明图像的!你终于可以制作出形状的阴影了!🎉

这里有一个你可以玩耍的编剧。

(function(){ document.addEventListener('DOMContentLoaded', () => { var styleEl = document.createElement('style'); styleEl.type = 'text/css'; styleEl.appendChild(document.createTextNode( .article-demo .fancy-box-wrapper { display: flex; flex-wrap: wrap; justify-content: center; } }..article-demo .fancy-box { position: relative; display: block; height: 215px; width: 215px; margin: 25px; border-radius: 50px; }.article-demo .fancy-box::before { content:''; z-index: -1; position: absolute; top: 0; right: 0; bottom: 0; left: 0; background: inherit; border-radius: inherit; filter: blur(15px); opacity: 0; transition: opacity 300ms; } ..fancy-box:hover::before { 不透明度:1; }.article-demo .fancy-box.gradient { background: linear-gradient(to bottom right, rgb(107,183,86), rgb(0,143,104)); }.article-demo .fancy-box.shaped { background: url('/images/logo-fancy.svg'); background-size: cover; }.article-demo .fancy-box.image { background: url('data:image/jpeg;base64、/9j/4AAQSkZJRgABAQEASABIAAD/2wBDABQODxIPDRQSEBIXFRQYHjIhHhwcHj0sLiQySUBMS0dARkVQWnNiUFVtVkVGZIhlbXd7gYKBTmCNl4x9lnN+gXz/2wBDARUXFx4aHjshITt8U0ZTfHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHz/wgARCAQABAADAREAAhEBAxEB/8QAGAABAQEBAQAAAAAAAAAAAAAAAAEDAgT/xAAYAQEBAQEBAAAAAAAAAAAAAAAAAQIDBP/aAAwDAQACEAMQAAAB9PXxgAAAAUAAAAoCgAABAAAAAFAAC0AFAUBFAAUCgALQCygChQBQAAAQAAAAAAAEQAACAUCAFABBADDXIAAAAUAAAAFCgABAAAAAAFAAC0AAoUBCrAAKBQAVQBZQBQoAoAAABAAAAAAAARAAAIBQAAAAECYa5AAAAUAAAAFCgABAAAAAAoAACigAFUAIFAUAUABaAIqgUBQBQAAAAAQAAAAAABIAAQAUgAAKAA8+uIAAFAAAAAKoAAQAAAAAKAAAAtAAKFAQKAoAFACigCKoFCgAUAAAAAAAAgAAAAIEAAgApAAACgPPriAKAAAAACqAAEAAAAAAUAAAKBQAFoAEUBQAKAAooBZQBVAAoACgAAAgAAAAgAABAEAAgAAAAAMN8QAAAAACigAQAAABQAAAAAFAFAAKoARQFAAoACigCWgAqgCgBQAAAAAAAACAQAAAgCAACAAAAGG+IAAAABRQAIAAFAAAAAAACgCgABaABFCgACgBQKAILQAVQBQFAACAAFAAAAAAEgAAIAEAAAAAA8++IAAABRQIAAAoAAUAAAAAACgAALQBAoUAAUAKAKAJaACqAKAoAQoAAAAAAAAAAEgAAIAAgAAAA8++IAAKBQIAAFAUAAAAAAAACgAAKKAIFUAAUAKABQAqKAFoAKFAAAQKAAAAAQAUAABEAAEAAAAAAPPvgAUCgAQABQoAbackground-size:contain; })); document.head.appendChild(styleEl); }); })();

性能如何?只要你不频繁更换背景或调整模糊半径,它的速度就会非常快!总的来说,这种技术的性能特点与我们之前向你展示的[高效盒状阴影过渡](/css/transition-box-shadows)方法不相上下。

Published At
Categories with 技术
Tagged with
comments powered by Disqus