Using a solid background?
If you are using a solid colour background, you could use a pseudo element to ‘cover it up’
.wrap {
position: relative;
height: 300px;
width: 300px;
}
.img {
height: inherit;
width: inherit;
background: url(http://lorempixel.com/300/300);
position: relative;
overflow: hidden;
z-index: -2;
}
.img:before {
content: "";
position: absolute;
top: 100%;
lefT: 0;
height: 100%;
width: 200%;
transform: skewY(-22.5deg);
transform-origin: top left;
background: white;
}
.text {
position: absolute;
top: 80%;
left: 20%;
width: 60%;
background: antiquewhite;
display: inline-block;
min-height: 50%;
}
.text:before {
content: "";
position: absolute;
top: -30%;
left: 0;
width: 100%;
height: 100%;
background: inherit;
z-index: -1;
transform: skewY(-22.5deg);
}
<div class="wrap">
<div class="img"></div>
<div class="text">
Lorem whatever it is
</div>
</div>
Only need new browsers?
Why not try the clip path property (limited support, however)
div{
height:300px;
width:300px;
background:url(http://lorempixel.com/300/300);
position:relative;
overflow:hidden;
-webkit-clip-path:polygon(0% 0%, 100% 0%, 100% 50%, 0% 100%);
clip-path:polygon(0% 0%, 100% 0%, 100% 50%, 0% 100%);
}
/*for demo only*/
html, body{
height:100%;
background: rgb(79, 79, 79);
background: -moz-radial-gradient(center, ellipse cover, rgba(79, 79, 79, 1) 0%, rgba(34, 34, 34, 1) 100%);
background: -webkit-gradient(radial, center center, 0px, center center, 100%, color-stop(0%, rgba(79, 79, 79, 1)), color-stop(100%, rgba(34, 34, 34, 1)));
background: -webkit-radial-gradient(center, ellipse cover, rgba(79, 79, 79, 1) 0%, rgba(34, 34, 34, 1) 100%);
background: -o-radial-gradient(center, ellipse cover, rgba(79, 79, 79, 1) 0%, rgba(34, 34, 34, 1) 100%);
background: -ms-radial-gradient(center, ellipse cover, rgba(79, 79, 79, 1) 0%, rgba(34, 34, 34, 1) 100%);
background: radial-gradient(ellipse at center, rgba(79, 79, 79, 1) 0%, rgba(34, 34, 34, 1) 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr="#4f4f4f", endColorstr="#222222", GradientType=1);
}
<div></div>
Need a transparent background and browser support?
You may be able to get away with skewing a container element and ‘unskewing’ the child img tag – although I must add that I cannot garentee image quality to remain
.skewMe {
position: relative;
height: 300px;
width: 300px;
transform: skewY(-22.5deg);
overflow: hidden;
}
.skewMe img {
transform: skewY(22.5deg);
transform-origin: top left;
position: absolute;
top: 0;
lefT: 0;
height: 100%;
width: 100%;
}
<div class="skewMe">
<img src="http://lorempixel.com/300/300" />
</div>
1
solved How do this with only CSS