【问题标题】:How to make a pure CSS full height and truly transparent folding effect over an image?如何在图像上制作纯 CSS 全高和真正透明的折叠效果?
【发布时间】:2017-09-20 11:49:05
【问题描述】:

this linkthis link的启发,我正在尝试制作纯CSS折叠效果,有两个要求:

  1. 完全透明的背景,在其后面显示<IMAGE> (!)
  2. 能够在其中使用 <DIV> 元素的完整高度 (!)

我试过让我的工作,但右上角没有变得透明。如果我更换...

border-top: 60px solid red;

border-top: 60px solid transparent;

然后矩形框的背景通过它出现。有没有办法用纯 CSS 解决方案来解决这个问题?如果是怎么办?如果不是,那么它们有哪些接近 CSS 的替代方案?代码/坐标应该是可读的、可解释的并且可以由人类轻松更改,而不需要基于矢量的程序,例如 inkscape。

我被卡住的DEMO:
https://jsfiddle.net/cg7hoyt3/

【问题讨论】:

  • 嗯...我可能会使用剪贴蒙版或类似的东西。
  • 您可以使用 SVG 创建便笺设计。然后添加折叠。这将避免任何黑客攻击。 :)
  • 可能必须使用 RGBA
  • 设置.fold:after { border-top: 60px solid rgba(0,0,0,0); .... }可以使红色三角形不可见,但是下面会出现.page的金色背景...

标签: html css layout transparency transparent


【解决方案1】:

也许使用linear-gradient 而不是纯色作为主 div 的背景。

border-width 和渐变色标的比例为1 / sqrt(2) = .7071

如果您使用 CSS 自定义属性或 CSS 预处理器,这将变得更加简单。

Codepen Demo of variable use

body {
  background-image: url("http://hdbackgroundspic.com/wp-content/uploads/2017/09/drop-of-water-background.jpg");
}

div {
  width: 230px;
  height: 230px;
  margin: 50px auto;
  background: linear-gradient(-135deg, transparent, transparent 45px, gold 45px, gold);
  position: relative;
}

div::after {
  content: " ";
  position: absolute;
  top: 0;
  right: 0;
  height: 0px;
  width: 0px;
  z-index: 2;
  border-width: 30px; /* note .7071 of gradient-stop */
  border-style: solid;
  border-color: transparent transparent yellow yellow;
  filter: drop-shadow(-2px 6px 6px rgba(0, 0, 0, .5));
}
<div></div>

【讨论】:

  • 令人难以置信的天才方法 +1 队友感谢将尝试这个又好又干净的方法!
  • 请注意,片段使用固定值。在渐变停止点和边框宽度之间需要进行计算,但这是一个相对简单的计算。为此效果添加了评论和演示。
  • 您的解决方案在 FireFox 和 Chrome 中看起来和工作完美无瑕,但在 MS Edge 中不起作用/看起来很糟糕!知道为什么以及可以做些什么吗?谢谢!
  • 它适用于我的 IE11(投影除外),但那是因为它不受支持。在 Edge 中,我认为它需要一个 webkit 前缀。
  • 确实很奇怪!在我的 Microsoft Edge 38.14393.1066.0 中,即使我添加了该后缀,它也会完全损坏。它在 FireFox 和 Chrome 中完美运行。我仍然接受这是一个很好的答案,并且稍后会找到解决这个明显孤立的事情的方法。再次感谢 Jonathan 和 Paulie_D!
【解决方案2】:

正如 cmets 中所建议的,这可以使用剪贴蒙版来完成:

clip-path: polygon(0 0, 210px 0, 100% 60px, 100% 100%, 0 100%);

虽然这看起来相当令人生畏,但实际上很容易阅读:只需从左上​​角开始逐个阅读要点。这些点在可见周围绘制一个多边形。

请注意,剪贴蒙版仅适用于现代浏览器(不包括 IE + Edge)。请参阅Can I use 了解最新的浏览器支持和Mozilla Plotform Status 了解最新的开发状态。

代码如下:

body {background-image: url("http://hdbackgroundspic.com/wp-content/uploads/2017/09/drop-of-water-background.jpg")}
.page {
  width: 230px;
  height: 230px;
  margin: 50px auto;
  background: gold;
  padding: 20px;
}
.fold {
  position: relative;
  -webkit-box-shadow: -5px 7px 5px rgba(0,0,0,0.8);
  -moz-box-shadow: -5px 7px 5px rgba(0,0,0,0.8);
  box-shadow: -5px 7px 5px rgba(0,0,0,0.8);
  -webkit-clip-path: polygon(0 0, 210px 0, 100% 60px, 100% 100%, 0 100%);
  clip-path: polygon(0 0, 210px 0, 100% 60px, 100% 100%, 0 100%);
}
.fold:before, .fold:after {
  content: "";
  position: absolute;
  top: 0%;
  right: 0%;
  width: 0px;
  height: 0px;
}
.fold:before {
  border-bottom: 60px solid #BBB;
  border-right: 60px solid transparent;
  -webkit-box-shadow: -5px 5px 5px 5px rgba(0,0,0,0.1);
  -moz-box-shadow: -5px 5px 5px 5px rgba(0,0,0,0.1);
  box-shadow: -5px 5px 5px 5px rgba(0,0,0,0.1);
}
.fold:after {
  border-top: 60px solid transparent;
  border-left: 60px solid yellow;
}
<div class="page fold">
  <h2>Dear Bettie</h2>
  Will you please erase that darn red corner from this folded note love?<br><br>
  Thanks xxx<br>Sandra
</div>

【讨论】:

  • 也感谢好友这个精心制作的版本非常好+1 不知道整个剪贴蒙版!它适用于所有当前的浏览器?
  • 好点。它适用于所有现代浏览器,但不适用于 IE + Edge。 caniuse.com/#search=css-clip-path 我将更新我的答案以反映这一点。 Paulie_D 的回答会更兼容。
猜你喜欢
  • 1970-01-01
  • 2015-08-23
  • 1970-01-01
  • 2014-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-14
相关资源
最近更新 更多