我想用斜线分隔2个漂浮的div,它们有不同的背景颜色。
此处示例:
HTML标记:
<div id="wrap">
<div id="one"></div>
<div id="two"></div>
</div>
我已经尝试过旋转它们(正如你在jsFiddle中看到的那样):
#wrap div {
-moz-transform: rotate(20deg);
-ms-transform: rotate(20deg);
-o-transform: rotate(20deg);
-webkit-transform: rotate(20deg);
float:left;
width:50%;
height:200px;
}
我也试过smth。与overflow:hidden
:
http://jsfiddle.net/F6DgA/1/(部分相关,但不是非常干净的解决方案)
有没有更简单的方法(不要使用图像......)?
答案 0 :(得分:4)
我个人会避免使用转换并使用border属性。这对我来说似乎更清晰(也适用于IE8)。
示例:http://jsfiddle.net/F6DgA/5/
注意:要确保div内的内容不会浮动在边缘上,请添加类似* { box-sizing:border-box; }
的内容,然后向div / left /右边添加填充。 < / p>
CSS:
#wrap {
width:300px;
height:100px;
margin:0 auto;
position:relative;
}
#wrap div {
position:relative;
height:100%;
float:left;
}
#one {
background:#333;
width:calc(50% + 15px);
}
#one:after {
content:"";
position:absolute;
right:0;
border-right:30px solid black;
border-top:100px solid transparent;
}
#two {
background:#000;
width:calc(50% - 15px);
}
答案 1 :(得分:1)
对#wrap
div,check here for an example使用CSS渐变。
这样的事情:
background: #9dd53a;
background: -moz-linear-gradient(-45deg, #9dd53a 0%, #a1d54f 50%, #80c217 51%, #7cbc0a 100%);
background: -webkit-gradient(linear, left top, right bottom, color-stop(0%,#9dd53a), color-stop(50%,#a1d54f), color-stop(51%,#80c217), color-stop(100%,#7cbc0a));
background: -webkit-linear-gradient(-45deg, #9dd53a 0%,#a1d54f 50%,#80c217 51%,#7cbc0a 100%);
background: -o-linear-gradient(-45deg, #9dd53a 0%,#a1d54f 50%,#80c217 51%,#7cbc0a 100%);
background: -ms-linear-gradient(-45deg, #9dd53a 0%,#a1d54f 50%,#80c217 51%,#7cbc0a 100%);
background: linear-gradient(135deg, #9dd53a 0%,#a1d54f 50%,#80c217 51%,#7cbc0a 100%);
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#9dd53a', endColorstr='#7cbc0a',GradientType=1 );
答案 2 :(得分:1)
无论您的父级div的高度和宽度是多少,您都需要将子元素的高度加倍。之后,将position:absolute
提供给您的子元素。给你的第一个孩子div留下-50%左边的位置,给你的第二个孩子div -50%正确的位置
CSS将如下:
#wrap {
width:400px;
margin:0 auto;
position:relative;
height:300px;
overflow:hidden;
}
#wrap div {
-moz-transform: rotate(20deg);
-ms-transform: rotate(20deg);
-o-transform: rotate(20deg);
-webkit-transform: rotate(20deg);
float:left;
width:100%;
height:600px;
top:-50%;
position:absolute;
}
#wrap div#one { left:-50%; }
#wrap div#two { right:-50%; }
#one {
background:#333;
}
#two {
background:#000;
}
请检查此Working URL
答案 3 :(得分:1)
<强> Demo 强>
CSS
#one {
border-top: 200px solid gray;
border-right: 100px solid transparent;
height: 0;
width: 30%;
float:left
}
#two {
border-bottom: 200px solid black;
border-left: 100px solid transparent;
height: 0;
width: 30%;
float:left;
margin-left:-100px;
}
#wrap {
width:400px;
margin:0 auto;
}
答案 4 :(得分:0)
你可以使用伪元素:after或:before
<div class="rect"></div>
.rect {
background:#000;
height: 50px;
width: 150px;
position: relative;
overflow: hidden;
}
.rect:after {
content: "";
background:#333;
height: 100px;
width: 300px;
-moz-transform: rotate(-45deg);
-ms-transform: rotate(-45deg);
-webkit-transform: rotate(-45deg);
-o-transform: rotate(-45deg);
transform: rotate(-45deg);
display: block;
position: absolute;
top:-7px;
right: 10px;
}
答案 5 :(得分:0)
这是我尝试过的。 Demo here!
这与您的需求不完全相同
但我想,你可以通过一点修改来满足你的需求!
<强> HTML 强>
<div Id="parallelogram"></div>
<div Id="parallelogram2"></div>
<强> CSS 强>
#parallelogram {
width: 130px;
height: 75px;
background: pink;
position:absolute;
overflow:hidden;
/* Skew */
-webkit-transform: skew(-20deg);
-moz-transform: skew(-20deg);
-o-transform: skew(-20deg);
transform: skew(-20deg);
}
#parallelogram2 {
width: 130px;
height: 75px;
margin-left:100px;
background: Black;
position:absolute;
overflow:hidden;
/* Skew */
-webkit-transform: skew(-20deg);
-moz-transform: skew(-20deg);
-o-transform: skew(-20deg);
transform: skew(-20deg);
}