【问题标题】:Is it possible to clip a side of a DIV with CSS like so? [duplicate]是否可以像这样使用 CSS 剪辑 DIV 的一侧? [复制]
【发布时间】:2019-02-28 04:36:30
【问题描述】:

我有一个父母和一个孩子div,其 id 和维度如下图所述:

<div id="clip"> 
  <div id="page"> 
     <!-- Content/Images here -->
  </div>
</div>

父子div的尺寸是这样的:

#clip {
  height: 1000px;
  width: 1414px;
}

#page {
  height: 1000px;
  width: 707px; 
}

现在我想将孩子div 的一侧倾斜到angle ø 并剪裁div 的右侧,如下所示:

是否可以单独使用 CSS 来做到这一点?

约束:不能使用三角形边框hack,#page child div 内的内容不能倾斜,解决方案越少,对所有内容都越好。我希望这可以通过 CSS3 转换来完成,但到目前为止我找不到方法。

@ksav 的回答很接近,但它仍在使用具有绝对位置的伪 :before 元素的遮蔽技术。它不会让我 消失 div#page 的剪辑部分,因此它看起来像这样:

【问题讨论】:

标签: javascript html css css-transforms bookiza


【解决方案1】:

你可以使用-webkit-clip-path

#clip {
  height: 1000px;
  width: 1414px;
  background-color: yellow;
}

#page {
  height: 1000px;
  width: 707px; 
  background-color: blue;
  color: white;
  -webkit-clip-path: polygon(0 0, 40% 0, 29% 100%, 0% 100%);
} 

这里是一个例子:https://codepen.io/rollinglex/pen/ZMNvjY

我发现这个网站非常有用:https://bennettfeely.com/clippy/

关于使用js和css,这篇文章应该有帮助:https://eager.io/blog/communicating-between-javascript-and-css-with-css-variables/

【讨论】:

  • 有趣!您如何评估上面的多边形值?我们可以使用通用角度 ø 设置 polygon(0 0, x% 0, x-1% 100%, 0% 100%) 而不将值硬编码到 css 中吗?我将使用 javascript 来计算 ø 并直接在 div 上应用 x 值。
  • 在继续之前,请务必检查对 clip-path 的支持。 caniuse.com/#feat=css-clip-path
【解决方案2】:

.content {
  background: grey;
  position: relative;
 height: 1000px;
  width: 707px; 
}

.content:before {
  background: rgba(255, 255, 255, 0.8);
  position: absolute;
  height: 100%;
  width: 110%;
  transform: skewX(-5deg) translateX(10%);
  transform-origin: bottom left;
  content:'';
}
<div class="content">
  <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras imperdiet congue aliquam. Etiam efficitur lectus id nulla iaculis dapibus. Phasellus nec nisl bibendum, hendrerit diam at, consequat est. In posuere lorem eget felis venenatis elementum.
    Ut vestibulum a nulla commodo pharetra. Cras accumsan dui a libero faucibus rutrum. Integer sed nunc accumsan, convallis lectus venenatis, iaculis arcu. Pellentesque tincidunt purus eu pulvinar tempus. Nam aliquet orci vel sapien condimentum pharetra.
    In rhoncus vehicula metus, vitae euismod mauris consequat sit amet. Praesent suscipit quam libero, eget semper neque aliquet faucibus.</p>
</div>

Codepen

【讨论】:

  • 当 skewX(5%) 倾斜时,您是如何到达 translateX(30%) 的。我们可以对通用角度 ø 进行此操作吗?段落标签也必须在 div#clipper 里面。
  • translateX 只是将其从左向右移动,从设置为bottom lefttranslate-origin 测量。您可以将任何您喜欢的角度应用于 skewX()。坚持负值以达到预期的效果。另外,我已经编辑了上述解决方案,因此您只需要一个 div。
  • 有趣!...感谢您在 Codepen 上分享实验。我会在那里深入研究。
  • 在这种方法中,我们仍然使用 :before 伪元素来掩盖div#content。为了使它工作,我必须在background: rgba(255, 255, 255, 0.8) 中拨打alpha 以评估1;伪元素的属性。我需要做的是让 DIV 的剪辑侧完全消失。这样我就可以在它下面显示 HTML 页面的背景,即网页的根目录..
  • @Meeses 的解决方案是当时的必经之路(除非您需要支持 IE/Edge,在这种情况下您可能需要重新访问)。
【解决方案3】:

div{
  width:50%;
  height:100%;
  position: absolute;
  border: 1px solid black;
}
#parent{
  background: #fff333;
}
#child{
  background: #aaaccc;
  left: 30%;
  transform: skewX(-8deg);
}
<div id="parent">

</div>
<div id="child">
  
</div>

是的,这是可能的,这里有一个粗略的想法。我确信这不是最好的解决方案,但它确实有效。

【讨论】:

    猜你喜欢
    • 2013-12-16
    • 1970-01-01
    • 2018-05-20
    • 2011-04-27
    • 2013-01-15
    • 1970-01-01
    • 1970-01-01
    • 2011-10-20
    • 2016-09-24
    相关资源
    最近更新 更多