防止 CSS 剪辑路径剪辑儿童?

Posted

技术标签:

【中文标题】防止 CSS 剪辑路径剪辑儿童?【英文标题】:Prevent CSS clip-path from clipping children? 【发布时间】:2017-10-24 14:03:21 【问题描述】:

有什么方法可以防止 clip-path 剪裁它的孩子吗?例如,考虑以下代码:

.el 
  width: 300px;
  height: 300px;
  clip-path: polygon(50% 0%, 100% 25%, 100% 75%, 50% 100%, 0% 75%, 0% 25%);
  background-color: orangered;


h1 
  position: relative;
  z-index: 100;
<div class="el">
  <h1>Work Hard, Play Hard</h1>
</div>

Codepen

【问题讨论】:

剪辑路径本质上是切掉了div的一部分,因为标题在div内部,它本身就会被剪辑,使用svg在div内绘制六边形可能更容易 【参考方案1】:

本质上是什么

尼克A说:

剪辑路径基本上切断了部分 div,因为 标头在 div 内,它本身会被剪裁,它可能是 使用 svg 更容易在 div 内绘制六边形

让某样东西成为某样正在消失的东西的孩子……但你想让它出现,并没有太大意义。

相反,将您想要显示的东西放在正在消失的东西之外......这样它就不会消失/被剪掉。

这就像 ram vinoth 说的。

【讨论】:

【参考方案2】:

问题是您将一个矩形 div 裁剪成一个六边形,从而隐藏了子元素。尝试使用 SVG:

<svg xmlns="http://www.w3.org/2000/svg" version="1.1"   xmlns:xlink="http://www.w3.org/1999/xlink">
    <polygon class="hex" points="300,150 225,280 75,280 0,150 75,20 225,20" fill="orangered" transform="translate(10)"></polygon>
    <text x="160" y="160"
        font-size="30"
        text-anchor="middle"
    >
    Any Text Here
    </text>  
</svg>

【讨论】:

【参考方案3】:

考虑伪元素:

.el 
  width: 300px;
  height: 300px;
  position:relative;
  z-index:0;

.el::before 
  content:"";
  position:absolute;
  z-index:-1;
  top:0;
  left:0;
  right:0;
  bottom:0;
  clip-path: polygon(50% 0%, 100% 25%, 100% 75%, 50% 100%, 0% 75%, 0% 25%);
  background-color: orangered;
<div class="el">
  <h1>Work Hard, Play Hard</h1>
</div>

【讨论】:

以上是关于防止 CSS 剪辑路径剪辑儿童?的主要内容,如果未能解决你的问题,请参考以下文章

防止 UITableView 超出单元格绑定视图在 insertRowsAtIndexPaths 上剪辑:

如何使用 CSS 剪辑路径剪辑画布?

当引用为 css 剪辑路径属性时,SVG 剪辑路径的位置不正确

将具有混合(固定和百分比)值的 CSS 剪辑路径转换为 ​​SVG 剪辑路径

为啥带有 SVG 的 CSS 剪辑路径在 Safari 中不起作用?

固定导航上的 CSS 剪辑/剪辑路径在 Chrome 和 IE 中不合作