7

有没有办法只在父元素中使用倾斜?我需要创建类似“钻石”的东西作为掩码,并且子元素不会受到影响。在这种情况下,无法使用 png 作为掩码。提前致谢!

4

4 回答 4

18

这真的很容易,你只需要为孩子们​​解开这个东西。Unskew 意味着应用另一个倾斜变换,但这次是相反的角度。

.parent { transform: skewX(45deg); }
.parent > * { transform: skew(-45deg); }

一般来说,如果您在父元素上应用了许多变换并且希望子元素恢复正常,那么您必须应用相同的变换,只是以相反的顺序(在大多数情况下顺序很重要!)和用于倾斜、旋转或平移的角度/长度值减号。在比例的情况下,您需要一个比例因子1/scale_factor_for_parent。也就是说,对于规模,你会做这样的事情:

.parent { transform: scale(4); }
.parent > * { transform: scale(.25); /* 1/4 = .25 */ }

带孩子的钻石形状很容易。

演示

结果

结果

HTML

<div class='wrapper'>
  <div class='diamond'>
    <div class='child'>Yogi Bear</div>
    <div class='child'>Boo Boo</div>
  </div>
</div>

CSS

.wrapper {
  overflow: hidden;
  margin: 0 auto;
  width: 10em; height: 10em;
}
.diamond {
  box-sizing: border-box;
  margin: 0 auto;
  padding: 4em 1em 0;
  width: 86.6%; height: 100%;
  transform: translateY(-37.5%) rotate(30deg) skewY(30deg);
  background: lightblue;
}
.child {
  transform: skewY(-30deg) rotate(-30deg);
}
于 2013-02-15T04:34:03.883 回答
1

任何transform属性都会影响应用到的元素及其所有子元素。

因此,skew获得单个“父”元素的唯一方法是让它没有子元素(即:它不能同时是父元素!)。

于 2012-10-23T09:35:45.250 回答
1

您能否尝试详细说明您想要得到什么结果?

skew(),就像所有的变换属性总是影响子元素。您可以尝试在同一位置使用两个 HTML 块,一个带有 skew(),另一个带有内容。

此外,如果你只想要一颗钻石,一个带有 scale() 和 rotate() 的矩形框就足够了,但同样没有子元素。

如果你想要那颗钻石作为遮罩,我很确定渲染钻石中不存在的部分会更容易。渲染钻石的外部应该不是那么难,毕竟它们只是矩形三角形。

于 2012-10-23T09:36:51.287 回答
0

实现这一点的唯一方法是将子元素从文档流中取出,并对子元素position:absolute;施加相等的负度偏斜。

这样做的问题是您现在必须手动调整父级的大小。

于 2017-11-18T04:04:44.337 回答