Reputation: 69
I'm trying to create an asymmetrical sawtooth pattern at the bottom of a site header that looks like this (except the sawtooth would be asymmetrical):
I've tried some pure CSS approaches using (linear-gradient) to no avail.
I can create a repeating pattern, but cannot also make it a clip-path such that it cuts out the background color of the header (pink) to show the body background underneath.
https://codepen.io/rasterisk/pen/rZrKNO
body {
background-color: tomato;
margin: 0;
}
.header {
position:relative;
height: 100px;
background-color: pink;
overflow: hidden;
margin: 0;
}
.header svg {
position: absolute;
bottom: 0;
}
div::after { /*this doesn't work*/
content:'';
height:12px;
width: 100%;
position: absolute;
background-color: green;
-webkit-clip-path: url(#svgPath);
clip-path: url(#svgPath);
bottom: 0;
margin: 0;
}
<body>
<div class="header">
<svg width="3000" height="11" xmlns="http://www.w3.org/2000/svg">
<defs>
<clipPath id="svgPath">
<pattern id="Pattern" x="0" y="0" width="20" height="12" patternUnits="userSpaceOnUse">
<path fill="" d="M-131-167l-144.42-104.93s-6.87-4.59-9.07 3.17c-2.11 7.48-13.93 83.86-16.69 101.76H-131zM-354-50l-.14 111s15.54-94.28 17.65-101.76c2.19-7.77 9.07-3.17 9.07-3.17L-183 61V-50h-171zM0 0v11.61S2.08 1.73 2.33.92C2.6.07 3.04.5 3.04.5L20 11.61V0H0z"/>
</pattern>
</clipPath>
</defs>
<rect fill="url(#Pattern)" width="2400" height="12"/>
</svg>
</div>
</body>
Any help would be appreciated. This degree of SVG control is new terrain for me.
Upvotes: 3
Views: 2788
Reputation: 33044
You may try this css only solution: css linear gradients
body {
background-color: tomato;
margin: 0;
}
.header {
position:relative;
height: 100px;
background-color: pink;
overflow: hidden;
margin: 0;
}
.header svg {
position: absolute;
bottom: 0;
}
div::after{
content:"";
display:block;
position:absolute;
bottom:0;
width:100%;
height:1.2em;
background-image:-webkit-linear-gradient(45deg, pink 25%, transparent 26%, transparent 75%, pink 75%),
-webkit-linear-gradient(135deg, pink 25%, tomato 26%,tomato 75%, pink 75%);
background-image: linear-gradient(45deg, pink 25%, transparent 26%, transparent 75%, pink 75%),
linear-gradient(135deg, pink 25%, tomato 26%, tomato 75%, pink 75%);
background-size:36px 36px;}
}
<body>
<div class="header">
</div>
</body>
UPDATE
an asymmetrical sawtooth pattern:
body {
background-color: tomato;
margin: 0;
}
.header {
position:relative;
height: 100px;
background-color: pink;
overflow: hidden;
margin: 0;
}
.header svg {
position: absolute;
bottom: 0;
}
div::after{
content:"";
display:block;
position:absolute;
bottom:0;
width:100%;
height:25px;
background-image: linear-gradient(45deg, tomato 50%, pink 50% , pink 100%),
linear-gradient(135deg, tomato 50%, pink 50% , pink 100%);
background-size:25px 25px;}
}
<body>
<div class="header">
</div>
</body>
Upvotes: 1
Reputation: 1118
body {
background-color: tomato;
margin: 0;
}
.header {
position:relative;
height: 100px;
background-color: pink;
overflow: hidden;
margin: 0;
}
.header svg {
position: absolute;
bottom: 0;
background-color: tomato;//set your svg background color as your body color
}
div::after { /*this doesn't work*/
content:'';
height:12px;
width: 100%;
position: absolute;
background-color: green;
-webkit-clip-path: url(#svgPath);
clip-path: url(#svgPath);
bottom: 0;
margin: 0;
}
<body>
<div class="header">
<svg width="3000" height="11" xmlns="http://www.w3.org/2000/svg">
<defs>
<clipPath id="svgPath">
<pattern id="Pattern" x="0" y="0" width="20" height="12" patternUnits="userSpaceOnUse">
<path fill="" d="M-131-167l-144.42-104.93s-6.87-4.59-9.07 3.17c-2.11 7.48-13.93 83.86-16.69 101.76H-131zM-354-50l-.14 111s15.54-94.28 17.65-101.76c2.19-7.77 9.07-3.17 9.07-3.17L-183 61V-50h-171zM0 0v11.61S2.08 1.73 2.33.92C2.6.07 3.04.5 3.04.5L20 11.61V0H0z"/>
</pattern>
</clipPath>
</defs>
<rect fill="url(#Pattern)" width="2400" height="12"/>
</svg>
</div>
</body>
Upvotes: 2