【问题标题】:Trapezoid Sections, Clipping Background Images梯形截面,剪切背景图像
【发布时间】:2019-03-23 02:19:06
【问题描述】:

我正在尝试创建一个带有梯形形状的网页布局,如附图所示。此外,每个部分都有一个background-image,用cover 或类似结果填充背景。

第一部分(深蓝色)我仅使用skew 和两个 div 就实现了,如下所示。

但是,我无法创建以下部分,它会以两种方式倾斜。我曾尝试使用clip-path,但没有运气。然后最后一部分需要再次进行调整。

HTML

<section id="my_section">
        <div id="my_section_bg"></div>
        <div id="my_section_content">
            <!-- any typical content, text/images here -->
        </div>
    </section>

CSS

#my_section {
    padding-top: 80px;
    padding-bottom: 90px;

    background-color: rgba(74,90,119,.5);

    transform: skewY(-4deg);
}

#my_section_bg {
    position: absolute;
    top: 0;
    left: 0;
    height: 100%;
    width: 100%;

    background-size: cover;
    background-position: center;
    background-repeat: no-repeat;
    background-image: linear-gradient(
        to bottom,
        rgba(29,44,71,.85) 0%,
        rgba(29,44,71,1) 100%
        ), url("./assets/my_bg_img.jpeg");
    background-color: rgba(29,44,71,1);

    transform: skewY(8deg);
}

#my_section_content {
    transform: skewY(4deg);
}

【问题讨论】:

  • (我们不鼓励问候、希望你能帮助、谢谢、提前感谢、感谢信、问候、亲切的问候、签名、请你帮忙、闲聊材料和缩写txtspk,恳求,你被困了多久,投票建议,元评论等。只需解释你的问题,并展示你尝试过的,你期望的,以及实际发生的事情。)按照注释on this deleted question .

标签: html css background-image css-transforms clip-path


【解决方案1】:

您可以简单地将第二个倾斜部分的一部分隐藏在第一个倾斜部分下以创建此效果。最后一节也是这样:

这是一个基本的例子:

.box {
  min-height:250px;
  position:relative;
  overflow:hidden;
  transform-origin:left; /*this will do the magic*/
  max-width:1000px;
  margin:auto;
}
.box:before {
  content:"";
  position:absolute;
  top:-100px;
  left:0;
  right:0;
  bottom:-100px;
  transform-origin:left;
  background:var(--img,red) center/cover;
}

.first {
  transform:skewY(5deg);
  z-index:2;
  --img:url(https://picsum.photos/800/600?image=0)
}
.first:before {
  transform:skewY(-5deg);
}

.second {
  transform:skewY(-5deg);
  z-index:1;
  --img:url(https://picsum.photos/800/600?image=1069)
}
.second:before {
  transform:skewY(5deg);
}

.last {
  --img:url(https://picsum.photos/800/600?image=1053);
  margin-top:-100px;
}
<div class="first box">

</div>
<div class="second box">

</div>

<div class="last box">

</div>

或者使用clip-path,你可以像下面这样(在任何地方调整50px来控制角度)

.box {
  min-height:250px;
  position:relative;
  overflow:hidden;
  max-width:1000px;
  margin:auto;
}
.first {
  clip-path:polygon(0 0,100% 50px, 100% 100%,0 100%);
  background:url(https://picsum.photos/800/600?image=0) center/cover;
}

.second {  
  clip-path:polygon(0 50px,100% 0, 100% 100%,0 calc(100% - 50px));
  z-index:1;
  margin:-50px auto;
  background:url(https://picsum.photos/800/600?image=1069) center/cover;
}

.last {
  background:url(https://picsum.photos/800/600?image=1053) center/cover;
}
<div class="first box">
</div>
<div class="second box">
</div>
<div class="last box">
</div>

【讨论】:

    【解决方案2】:

    我有一个非常相似的项目正在筹备中,所以我想为什么不尝试一下。根据需要,我认为 2x 容器重叠和倾斜会起作用。

    但是,如果顶部和底部以不同的角度倾斜,那将无法正常工作......所以最好的选择是绝对定位的伪元素并使用 CSS clip-path。我使用this tool 轻松创建剪辑路径。

    我这样做是为了避免剪辑每个部分的内容,但这对你来说可能无关紧要。

    .container {
      width: 80vw;
      margin: 0 auto;
      overflow: hidden;
    }
    
    section {
      min-height: 40vh;
      position: relative;
      padding: 2rem;
    }
    
    .sec1 {
      background-color: #FFFFFF;
    }
    
    .sec2 {
      background: #01579B;
    }
    .sec2:before {
      content: '';
      position: absolute;
      background-color: #01579B;
      height: 3rem;
      bottom: 100%;
      right: 0;
      left: 0;
      z-index: 10;
      -webkit-clip-path: polygon(0 0, 0% 100%, 100% 100%);
              clip-path: polygon(0 0, 0% 100%, 100% 100%);
    }
    .sec2:after {
      content: '';
      position: absolute;
      background-color: #01579B;
      height: 7rem;
      top: 100%;
      right: 0;
      left: 0;
      z-index: 10;
      -webkit-clip-path: polygon(100% 0, 0 0, 100% 100%);
              clip-path: polygon(100% 0, 0 0, 100% 100%);
    }
    .sec2 .decor {
      position: absolute;
      background-color: #D7CCC8;
      height: 6rem;
      bottom: 100%;
      right: 0;
      left: 50%;
      z-index: 5;
      -webkit-clip-path: polygon(100% 0, 0 100%, 100% 100%);
              clip-path: polygon(100% 0, 0 100%, 100% 100%);
    }
    
    .sec3 {
      background-color: #0288D1;
    }
    .sec3:after {
      content: '';
      position: absolute;
      background-color: #0288D1;
      height: 7rem;
      top: 100%;
      right: 0;
      left: 0;
      z-index: 10;
      -webkit-clip-path: polygon(0 0, 0 100%, 100% 0);
              clip-path: polygon(0 0, 0 100%, 100% 0);
    }
    <div class="container">
    	<section class="sec1">Section 1 Content</section>
    	<section class="sec2">
    		<span class="decor">
    <!-- unfortunatly, I needed another element -->
    		</span>
    		Section 2 Content
    	</section>
    	<section class="sec3">
    		Section 3 Content
    	</section>
    	<section class="sec4">
    		Section 4 Content
    	</section>
    </div>

    我能看到的唯一问题是您是否需要图像背景。在这种情况下,您可能希望使用复杂的多边形作为整个部分的蒙版。

    【讨论】:

      猜你喜欢
      • 2016-04-25
      • 2022-11-17
      • 2016-07-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多