css 转换倾斜子div,但也将其保留在父容器中

olmpazwi  于 2023-06-07  发布在  其他
关注(0)|答案(1)|浏览(247)

我有一个父容器宽度为3(或更多)的子div的包括图像。当我倾斜我的子div时,它们比父div大,所以它们不能很好地倾斜。
我想做到这一点:

我尝试了以下方法:

<div class="parent">
   <div class="child">
     <!-- Image -->
   </div>
   
   <div class="child">
     <!-- Image -->
   </div>

   <div class="child">
     <!-- Image -->
   </div>
</div>

具有以下样式:

.parent{
   display:flex;
   flex-wrap:wrap;
   justify-content: space-between;
}

.child{
    width:30%;
    height:375px;
    transform: skew(-45deg);
    overflow:hidden; //Because i want to insert images inside it
    transform-origin: bottom right;
    background:red;
}

但这给予我的不是正确的结果

所以澄清一下,这就是我想要的:

但我得到的是

zyfwsgd6

zyfwsgd61#

对于45度的倾斜,如果我们考虑三个红色方块,然后倾斜,这可以实现。他们需要有25%的宽度,而不是30%,以留出足够的空间给最后一个孩子的倾斜部分。
对于整个容器的任何纵横比,一种方法是将其与子元素的直接父元素分离。
这个代码段有一个长宽比为1 / 1的容器(如注解中给出的)。高度已被设置为100 vh只是为了这个演示。
子节点的父节点在其内部,宽度计算为坐在整个容器的四分之三加上差距的余量。
差距被设置为CSS变量,因此可以根据需要轻松更改。

<style>
  * {
    box-sizing: border-box;
    margin: 0;
  }
  
  .container {
    width: 100vh;
    aspect-ratio: 1 / 1;
    display: flex;
    align-items: center;
    background: lightblue;
  }
  
  .parent {
    --gap: 10px;
    --halfgap: calc(var(--gap) / 2);
    width: calc(75% + var(--halfgap));
    display: flex;
    justify-content: space-between;
  }
  
  .child {
    width: calc(100% / 3);
    aspect-ratio: 1 / 1;
    background: red;
    border: solid 1px black;
    transform: skewX(-45deg);
    transform-origin: bottom left;
    box-sizing: border-box;
    margin: 0 var(--halfgap);
  }
  
  .child:first-child {
    margin: 0 var(--halfgap) 0 0;
  }
  
  .child:last-child {
    margin: 0 0 0 var(--halfgap);
  }
</style>
<div class="container">
  <div class="parent">
    <div class="child"></div>
    <div class="child"></div>
    <div class="child"></div>
  </div>
</div>

相关问题