我试图制作一个理想情况下由多个div组成的网站布局,我希望每个div都有一个倾斜的底部,进入下面的那个。
到目前为止看看这个模型:
@charset "utf-8";
/* CSS Document */
* {
margin: 0;
font-size: 10px;
}
.red {
position: relative;
height: 500px;
background: red;
background-size: cover;
background-repeat: no-repeat;
background-position: center;
clip-path: polygon(0 0, 100% 0, 100% 100%, 0 calc(100% - 5vw));
}
.blue {
height: 500px;
margin-top: -5vw;
background: blue;
}
.green {
height: 500px;
margin-top: -5vw;
background: green;
}
.orange {
height: 500px;
margin-top: -5vw;
background: orange;
}
.purple {
height: 500px;
margin-top: -5vw;
background: purple;
}

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Untitled Document</title>
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
<div class="red"></div>
<div class="blue"></div>
<div class="green"></div>
<div class="orange"></div>
<div class="purple"></div>
</body>
</html>
&#13;
正如你所知道的那样,我只能得到第一个div以保持我喜欢倾斜的底部的外观。
我从某个地方抢过了一些代码,我可以使用clip-path将第一个div框倾斜到我喜欢的方式。我的问题是,我希望下一个div也有一个倾斜的底部 - 大概是通过使用剪辑路径? - 但是当我尝试这个时,它可以工作,但第一个剪辑路径倾斜&#39;恢复为不存在。
因为 - 正如我之前提到的 - 我从某个地方抢过了代码,我不完全理解我正在查看的剪辑路径属性的值。
希望我不会太困惑,并感谢您的帮助!
答案 0 :(得分:3)
此处的问题是关于stacking-context和painting order。如果你将clip-path
添加到你的下一个元素,那么这个元素将位于第一个元素的顶部,因为它将创建一个新的堆叠上下文,并且将被绘制为以后,因为我们有负余量将隐藏第一个剪辑部分。
除非之外的计算值会导致创建a 堆叠上下文的方式与CSS不透明度相同 适用于
以外的值
一个简单的解决方案是添加z-index
来纠正所有这些:
body {
margin: 0;
font-size: 10px;
}
body>div {
clip-path: polygon(0 0, 100% 0, 100% 100%, 0 calc(100% - 5vw));
position: relative;
height: 500px;
}
.red {
z-index: 5;
background: red;
}
.blue {
z-index: 4;
margin-top: -5vw;
background: blue;
}
.green {
z-index: 3;
margin-top: -5vw;
background: green;
}
.orange {
z-index: 2;
margin-top: -5vw;
background: orange;
}
.purple {
z-index: 1;
margin-top: -5vw;
background: purple;
}
<div class="red"></div>
<div class="blue"></div>
<div class="green"></div>
<div class="orange"></div>
<div class="purple"></div>
避免添加许多z-index
的另一个解决方案是以不同的方式思考,而不是在底部中创建slatend部分,我们在顶部中创建它。就像我们获得逻辑paiting顺序的优势一样,我们避免使用z-index
。
body {
margin: 0;
font-size: 10px;
}
body>div {
margin-bottom:-5vw;
height: 500px;
}
body>div:not(:first-child) {
clip-path: polygon(0 0, 100% 5vw, 100% 100%, 0 100%);
}
.red {
background: red;
}
.blue {
background: blue;
}
.green {
background: green;
}
.orange {
background: orange;
}
.purple {
background: purple;
}
<div class="red"></div>
<div class="blue"></div>
<div class="green"></div>
<div class="orange"></div>
<div class="purple"></div>