2017-02-20 40 views
-2

我正在寻找创建4个不同形状的内容区域,将响应工作。这里有一个例子形象 - non-symmetrical shapes你可以在css中创建非对称形状

是否有可能创造4个格容器这样无需使用SVG的?我知道你可以在容器内部创建一个三角形形状,并将其定位在绝对右上方,但是接下来的形状(float float right)需要更高的Z-index才能出现在顶部。

这一切听起来都很混乱,有人可以提醒吗?

+1

你尝试过什么?你的代码在哪里? HTML,CSS? SO不是一个代码制作网站。我们调试你的代码 –

+0

这更像是一个讨论点,因为问题表明它会以svg形式更好还是可以使用css?我不确定我写的地方是否有人可以为我编码? – SamXronn

+1

@SamXronn:这应该引导你在正确的方向 - http://stackoverflow.com/questions/30441122/shape-with-a-slanted-side-responsive。 – Harry

回答

3

有多种方法可以达到这种效果。

一种方法是:

  • 使用transform: skew改变右手的角度divs
  • 使用相对定位到右手divs向左滑动,所以它们重叠的左手divs
  • 使用::after伪元素以隐藏在右侧的右侧divs

工作实例:

body { 
 
width: 200vw; 
 
} 
 

 
div { 
 
float: left; 
 
width: 400px; 
 
height: 90px; 
 
border-left: 3px solid rgb(255,255,255); 
 
border-bottom: 3px solid rgb(255,255,255); 
 
} 
 

 
div:nth-of-type(3) { 
 
clear: left; 
 
} 
 

 
div:nth-of-type(even) { 
 
position: relative; 
 
transform:skew(315deg); 
 
} 
 

 
div:nth-of-type(even)::after { 
 
content: ''; 
 
display:block; 
 
position: absolute; 
 
top:0; 
 
height:90px; 
 
background-color:rgb(255,255,255); 
 
transform:skew(-315deg); 
 
} 
 

 
div:nth-of-type(1) { 
 
background-color:rgb(149,117,117); 
 
} 
 

 
div:nth-of-type(2) { 
 
left: -67px; 
 
background-color:rgb(117,149,117); 
 
} 
 

 
div:nth-of-type(3) { 
 
background-color:rgb(117,133,149); 
 
} 
 

 
div:nth-of-type(4) { 
 
left: -160px; 
 
background-color:rgb(149,117,149); 
 
} 
 

 
div:nth-of-type(2)::after { 
 
width:228px; 
 
right:-60px; 
 
} 
 

 
div:nth-of-type(4)::after { 
 
width:150px; 
 
right:-75px; 
 
} 
 

 
div p { 
 
height: 90px; 
 
margin: 0; 
 
padding: 0 24px; 
 
line-height: 90px; 
 
font-size: 33px; 
 
color: rgb(255,255,255); 
 
} 
 

 
div:nth-of-type(even) p { 
 
transform: skew(-315deg); 
 
}
<div><p>one</p></div> 
 
<div><p>two</p></div> 
 
<div><p>three</p></div> 
 
<div><p>four</p></div>

+1

嗨,谢谢你,这是一个非常好的答案,有可能使这些块完整的宽度,我明白他们如何工作,现在与固定的宽度。但是,例如,它们可能每个都是50%。 – SamXronn

+0

是的,通过一些杂耍,应该可以使这种方法奏效,用'%'或'vw'等相对单位替换所有绝对单位。 – Rounin