我尝试在HTML / CSS中重新创建此布局(跨浏览器兼容回IE9):
基本上,它是一条跨越视口宽度的对角线,它划分了两个背景图案。它将具有固定的高度,但它应该动态地伸展到其容器的整个宽度。
我无法想到使用纯CSS实现此目的的方法,所以我的下一个想法是使用SVG。这对于纯色来说并不是很难:
http://codepen.io/troywarr/pen/EPXVRV?editors=110
但是,我对如何将重复背景图案应用于SVG形状感到困惑。它需要与上方和下方的<section>
s中的背景图案对齐,背景填充不应该与形状的尺寸一致,否则会出现扭曲。
在CSS中应用一些背景图片,我越来越近了:
http://codepen.io/troywarr/pen/OMgyoE?editors=110
我只需要在SVG的填充部分中使用深色背景图案。
使用更加可见的图片作为测试,我可以将其拉伸到<polyline>
的尺寸:
http://codepen.io/troywarr/pen/BjZoEq?editors=110
但是,那是我不想要的延伸。我需要平铺我的图案,或者至少不扭曲其原生尺寸(因此我可以使用它的大样本,如果需要的话),即使形状本身具有流体宽度。我已经为<pattern>
元素尝试了几种不同的属性值组合,但我还没有找到任何符合预期效果的内容,即使遵循相关答案的一些指导:
有什么建议吗?我也喜欢听到非SVG方法的任何想法。谢谢!
更新
抱歉,我刚才意识到我的CodePen示例中的背景模式并不起作用。我已使用工作图片网址对其进行了更新。
答案 0 :(得分:2)
这是使用CSS完成它的一种方法。你可以使用after伪元素来帮助你获得这些角度,只需要一个png用于对角线(或者如果你想避开元素就旋转一个元素),另一个用于重复模式。由于我没有你的图像,我只是快速做了一些,但这应该或多或少是你想要的。
html { height:100%; }
body {
padding:0;
margin:0;
height:100%;
background:#333;
}
.demo {
width:100%;
height:auto;
position:absolute;
}
body:after {
position:absolute;
content:'';
top:0;
bottom:0;
right:0;
left:0;
pointer-events:none;
background: transparent url(http://i.imgur.com/iUhGezx.png) repeat top left;
}
.demo .top {
min-height:100px;
background:#FFF;
position:relative;
}
.demo .bottom { min-height:60px; }
.demo .top:after {
position:absolute;
content:'';
top:100%;
left:0;
right:0;
height:100px;
background: transparent url(http://i.imgur.com/iEubBd5.png) repeat top left;
background-size: 100% 100px;
}
<div class="demo">
<div class="top"></div>
<div class="bottom"></div>
</div>
答案 1 :(得分:2)
考虑到你需要:
您可以使用简单的CSS方法使用border和viewport units:
body,html{padding:0;margin:0;}
div{
border-bottom:50px solid rgba(0,0,0,.8);
border-top: 50px solid transparent;
background-image:url('http://i.imgur.com/iUhGezx.png');
}
div:before{
content:'';
display:block;
border-right:100vw solid rgba(0,0,0,.8);
border-top:50px solid transparent;
}
<div></div>
使用background-image属性重复该模式。倾斜是由伪元素上的边框构成的 父div上的边框只是为了在倾斜周围形成顶部和底部空间。
IE9及以上版本支持视口相关单元(vw)(有关详细信息,请参阅canIuse)。
更新:
如果您需要为这两个区域分别设置背景图像,则有两种可能的CSS方法:
使用转换:支持IE9及以上vendor prefixes。倾斜总是具有相同的角度。
body,
html {
padding: 0;
margin: 0;
overflow:hideden;
}
div{
width:100%;height:150px;
position:absolute;
}
.top {
padding-top:50px;
background: #fff url('http://i.imgur.com/dzFT6wB.png');
}
.bot {
transform-origin:100% 0;
transform:rotate(-5deg);
overflow:hidden;
top:50px; right:0;
width:110%;
}
.bot:after{
content:'';
position:absolute;
right:0;top:0;
width:100%;height:100%;
transform-origin:inherit;
transform:rotate(5deg) translatez(0px);
background: #262729 url('http://i.imgur.com/LxTJ685.png');
}
<div class="top"></div>
<div class="bot"></div>
使用clip-path property:虽然它有low browser support,但它可以让您更好地控制倾斜角度:
body,html{padding:0;margin:0;}
div{
position:relative;
height:150px;
}
div:before, div:after{
content:'';
width:100%; height:100%;
position:absolute;
}
div:before{
background: url('http://i.imgur.com/dzFT6wB.png');
}
div:after{
-webkit-clip-path:polygon(0% 60%, 100% 40%, 100% 100%, 0% 100%);
clip-path:polygon(0% 60%, 100% 40%, 100% 100%, 0% 100%);
background:#262729 url('http://i.imgur.com/LxTJ685.png');
}
<div></div>
答案 2 :(得分:2)
SVG目前无法实现这一目标。如果使用preserveAspectRatio="none"
扩展SVG,则SVG的全部内容都会受到影响。某些内容无法选择退出拉伸变换。
将来可能有办法在SVG2中执行此操作,但不能使用当前版本的SVG。
<强>更新强>
如果您可以使用它而不在IE中工作,您可以使用蒙版或剪辑路径来实现您想要的效果。以下是使用clip-path
。
body {
margin: 0;
}
section {
height: 50px;
}
main {
background-image: url('http://mass-relevance-all-access.massrel.io/template-static-2e84fe3d1c7dc87710f58b990263ad6c29dacafc/img/bg-pattern-light.png');
}
.dark {
background: #262729 url('http://mass-relevance-all-access.massrel.io/template-static-2e84fe3d1c7dc87710f58b990263ad6c29dacafc/img/bg-pattern-dark.png');
}
.diagonal {
background: url(http://www.boogdesign.com/examples/svg/daisy-grass-repeating-background.jpg);
-webkit-clip-path: url(#diagonalclip);
clip-path: url(#diagonalclip);
}
<svg width="0" height="0">
<defs>
<clipPath id="diagonalclip" clipPathUnits="objectBoundingBox">
<polyline points="0,1 1,0 1,1 0,1"/>
</clipPath>
</defs>
</svg>
<main>
<section class="light"></section>
<section class="diagonal"></section>
<section class="dark"></section>
</main>