我有一个容器元素,我试图找出它是否可以塑造它有两个45度角。像这样:
现在只是一个矩形:
<div id="home-img-text">
<div id="home-img-text-container">
<div id="home-img-text-description">WRECKING <br>& DEMOLITION <br> DONE RIGHT.</div>
</div>
</div>
#home-img-text-container {
background: rgba(0,0,0,.8);
padding: 30px 20px;
}
#home-img-text-description {
color: #FFF;
font-size: 2.5em;
line-height: 1.4em;
}
我将如何做到这一点?
更新:
.home-img-text {
position: absolute;
left: 10%;
top: 25%;
}
#home-img-text-container1, #home-img-text-container2 {
position: relative;
margin-bottom: 20px;
background: rgba(0,0,0,.8);
opacity: 0;
transition:1s; -webkit-transition:1s;
overflow: hidden;
}
#home-img-text-container1.fadeDisplay {
opacity: 1;
transform: translateX(30px); -webkit-transform: translateX(30px);
}
#home-img-text-container2.fadeDisplay {
opacity: 1;
transform: translateX(30px); -webkit-transform: translateX(30px);
}
#home-img-text-description {
position: relative;
margin: 40px 0px;
padding: 30px 20px;
color: #FFF;
font-size: 2.5em;
line-height: 1.4em;
}
#home-img-text-description2 {
color: #FFF;
font-size: 2em;
line-height: 1.4em;
padding: 30px 20px;
}
/*----Adding this ---*/
#home-img-text-description:before {
position: absolute;
content: '';
height: 40px;
width: 100%;
left: 0px;
background: inherit;
}
#home-img-text-description:before {
top: -40px;
transform: skewX(45deg);
transform-origin: right bottom;
}
答案 0 :(得分:4)
使用两个相反方向倾斜的伪元素(45度)也是生成这种形状的好选择。使用此选项的优点是 在右上角和右下角生成透明剪切 ,与使用border方法创建的形状不同。
由于lack of support in IE,我不推荐clip-path
(有或没有SVG)。
#home-img-text{
overflow: hidden;
}
#home-img-text-container {
position: relative;
background: rgba(0, 0, 0, .8);
padding: 30px 20px;
margin: 40px 0px;
}
#home-img-text-container:after,
#home-img-text-container:before {
position: absolute;
content: '';
height: 40px;
width: 100%;
left: 0px;
background: inherit;
}
#home-img-text-container:before {
top: -40px;
transform: skewX(45deg);
transform-origin: right bottom;
}
#home-img-text-container:after {
bottom: -40px;
transform: skewX(-45deg);
transform-origin: right top;
}
#home-img-text-description {
color: #FFF;
font-size: 2.5em;
line-height: 1.4em;
}
body {
background-image: radial-gradient(circle at center, chocolate, sandybrown);
min-height: 100vh;
}
&#13;
<div id="home-img-text">
<div id="home-img-text-container">
<div id="home-img-text-description">WRECKING
<br>& DEMOLITION
<br>DONE RIGHT.</div>
</div>
</div>
&#13;
这是一个在形状的所有边上都有边框的版本:
#home-img-text{
border-left: 2px solid;
overflow: hidden;
}
#home-img-text-container {
position: relative;
padding: 30px 20px;
margin: 40px 0px;
background: rgba(0, 0, 0, .8);
border-right: 2px solid;
}
#home-img-text-container:after,
#home-img-text-container:before {
position: absolute;
content: '';
height: 38px;
width: 100%;
left: 0px;
background: inherit;
border: 2px solid;
}
#home-img-text-container:before {
top: -40px; /* -(height + border-top) */
border-width: 2px 3px 0px 0px;
transform: skewX(45deg);
transform-origin: right bottom;
}
#home-img-text-container:after {
bottom: -40px; /* -(height + border-bottom) */
border-width: 0px 3px 2px 0px;
transform: skewX(-45deg);
transform-origin: right top;
}
#home-img-text-description {
color: #FFF;
font-size: 2.5em;
line-height: 1.4em;
}
body {
background-image: radial-gradient(circle at center, chocolate, sandybrown);
min-height: 100vh;
}
&#13;
<div id="home-img-text">
<div id="home-img-text-container">
<div id="home-img-text-description">WRECKING
<br>& DEMOLITION
<br>DONE RIGHT.</div>
</div>
</div>
&#13;
如果您需要添加图像(无论是否为背景),它将需要额外的元素和元素以具有固定的高度。但如前所述,即使需要额外的元素,这种方法也有其优势。
#home-img-text {
position: relative;
padding: 40px 0px; /* top/bottom padding equal to height of the two skewed elements, don't set left/right padding */
overflow: hidden;
}
#home-img-text-container {
height: 170px; /* height of image - 2 * height of skewed element */
padding: 0px 20px; /* don't set any top/bottom padding */
background: linear-gradient(rgba(0, 0, 0, .8), rgba(0, 0, 0, .8)),url(http://lorempixel.com/800/250/nature/1);
background-position: 0px 0px, 0px -40px; /* 0px 0px, 0px -(height of skewed element) */
}
#home-img-top,
#home-img-bottom {
position: absolute;
content: '';
height: 40px;
width: 100%;
left: 0px;
overflow: hidden;
}
#home-img-top {
top: 0px;
transform: skewX(45deg);
transform-origin: right bottom;
}
#home-img-bottom {
bottom: 0px;
transform: skewX(-45deg);
transform-origin: right top;
}
#home-img-top:before,
#home-img-bottom:before {
position: absolute;
content: '';
height: 100%;
width: 100%;
left: 0px;
background: linear-gradient(rgba(0, 0, 0, .8), rgba(0, 0, 0, .8)), url(http://lorempixel.com/800/250/nature/1);
}
#home-img-top:before {
top: 0px;
background-position: 0px 0px,0px 0px;
transform: skewX(-45deg);
transform-origin: right bottom;
}
#home-img-bottom:before {
bottom: 0px;
background-position: 0px 0px, 0px -210px; /* 0px -(height of image - height of skewed element) */
transform: skewX(45deg);
transform-origin: right top;
}
#home-img-text-description {
color: #FFF;
font-size: 2.5em;
line-height: 1.4em;
}
body {
background-image: radial-gradient(circle at center, chocolate, sandybrown);
min-height: 100vh;
}
&#13;
<div id="home-img-text">
<div id="home-img-top"></div>
<div id="home-img-text-container">
<div id="home-img-text-description">WRECKING
<br>& DEMOLITION
<br>DONE RIGHT.</div>
</div>
<div id="home-img-bottom"></div>
</div>
&#13;
答案 1 :(得分:1)
#home-img-text-container {
background: rgba(0,0,0,.8);
padding: 30px 20px;
position: relative;
}
#home-img-text-container:before,
#home-img-text-container:after {
position: absolute;
content: '';
display: block;
right: -40px;
border: 40px solid transparent;
border-right: 40px solid transparent;
}
#home-img-text-container:before {
top: 0;
border-top: 40px solid white;
}
#home-img-text-container:after {
bottom: 0;
border-bottom: 40px solid white;
}
#home-img-text-description {
color: #FFF;
font-size: 2.5em;
line-height: 1.4em;
}
<div id="home-img-text">
<div id="home-img-text-container">
<div id="home-img-text-description">WRECKING <br>& DEMOLITION <br> DONE RIGHT.</div>
</div>
</div>
答案 2 :(得分:0)
您可以在使用css3选择器之前和之后实现此目的。
<style type="text/css">
#home-img-text-container {
background: rgba(0,0,0,.8);
padding: 30px 20px;
width: 300px;
position: relative;
}
#home-img-text-container:before{
content: "";
position: absolute;
top: 0;
right: 0;
border-bottom: 45px solid rgba(0,0,0,0);
border-right: 45px solid #fff;
width: 45px;
height: 0;
}
#home-img-text-container:after{
content: "";
position: absolute;
bottom: 0;
right: 0;
border-top: 45px solid rgba(0,0,0,0);
border-right: 45px solid #fff;
width: 45px;
height: 0;
}
#home-img-text-description {
color: #FFF;
font-size: 2.5em;
line-height: 1.4em;
}
</style>
<div id="home-img-text">
<div id="home-img-text-container">
<div id="home-img-text-description">WRECKING <br>& DEMOLITION <br> DONE RIGHT.</div>
</div>
</div>
答案 3 :(得分:0)
您也可以在WORD MAKE_WORD( const BYTE Byte_hi, const BYTE Byte_lo)
{
return (( Byte_hi << 8 ) | Byte_lo & 0x00FF );
}
与gradients
和background-size
结合使用calc()
:
只有边界:
#home-img-text-container {
margin:1em;
display:inline-block;
background:
linear-gradient(0deg, rgba(0,0,0,0.9), rgba(0,0,0,0.9)) top left no-repeat ,
linear-gradient(0deg, rgba(0,0,0,0.9), rgba(0,0,0,0.9)) bottom left no-repeat ,
linear-gradient(90deg, rgba(0,0,0,0.9), rgba(0,0,0,0.9)) top left no-repeat,
linear-gradient(0deg, rgba(0,0,0,0.9), rgba(0,0,0,0.9)) center right no-repeat,
linear-gradient(-45deg, transparent 1.5em, rgba(0,0,0,0.8) 1.5em, rgba(0,0,0,0.9) calc(1.5em + 3px), transparent calc(1.5em + 3px)) bottom left no-repeat,
linear-gradient(-135deg, transparent 1.5em, rgba(0,0,0,0.8) 1.5em, rgba(0,0,0,0.9) calc(1.5em + 3px), transparent calc(1.5em + 3px)) top left no-repeat
;
background-size:
calc(100% - 2.25em) 3px ,
calc(100% - 2.25em) 3px ,
3px 100%,
3px calc(100% - 4.25em),
100% 50%,
100% 50%
;
padding: 30px 20px;
}
#home-img-text-description {
font-size: 2.5em;
line-height: 1.4em;
}
html {
min-height:100%;
background:linear-gradient(to bottom right, tomato, gold);
}
<div id="home-img-text">
<div id="home-img-text-container">
<div id="home-img-text-description">WRECKING
<br>& DEMOLITION
<br>DONE RIGHT.</div>
</div>
</div>
仅背景:(最接近问题)
#home-img-text-container {
margin: 1em;
display: inline-block;
background:
linear-gradient(-45deg, transparent 1.5em, rgba(0, 0, 0, 0.8) 1.5em) bottom left no-repeat,
linear-gradient(-135deg, transparent 1.5em, rgba(0, 0, 0, 0.8) 1.5em) top left no-repeat;
background-size: 100% 50%;
/* rgba(0,0,0,.8);*/
padding: 30px 20px;
}
#home-img-text-description {
color: #FFF;
font-size: 2.5em;
line-height: 1.4em;
}
html {
background:linear-gradient(to bottom right, tomato 30%, white 30%);
}
<div id="home-img-text">
<div id="home-img-text-container">
<div id="home-img-text-description">WRECKING
<br>& DEMOLITION
<br>DONE RIGHT.</div>
</div>
</div>
边界和背景:
#home-img-text-container {
margin:1em;
display:inline-block;
background:
linear-gradient(0deg, rgba(0,0,0,0.9), rgba(0,0,0,0.9)) top left no-repeat ,
linear-gradient(0deg, rgba(0,0,0,0.9), rgba(0,0,0,0.9)) bottom left no-repeat ,
linear-gradient(90deg, rgba(0,0,0,0.9), rgba(0,0,0,0.9)) top left no-repeat,
linear-gradient(0deg, rgba(0,0,0,0.9), rgba(0,0,0,0.9)) center right no-repeat,
linear-gradient(-45deg, transparent 1.5em, rgba(0,0,0,0.8) 1.5em, rgba(0,0,0,0.9) calc(1.5em + 3px), transparent calc(1.5em + 3px)) bottom left no-repeat,
linear-gradient(-135deg, transparent 1.5em, rgba(0,0,0,0.8) 1.5em, rgba(0,0,0,0.9) calc(1.5em + 3px), transparent calc(1.5em + 3px)) top left no-repeat,
linear-gradient(-45deg, transparent 1.5em, rgba(0,0,0,0.8) 1.5em) bottom left no-repeat,
linear-gradient(-135deg, transparent 1.5em, rgba(0,0,0,0.8) 1.5em) top left no-repeat;
background-size:
calc(100% - 2.25em) 3px ,
calc(100% - 2.25em) 3px ,
3px 100%,
3px calc(100% - 4.25em),
100% 50%, 100% 50%,
100% 50%, 100% 50%
;
/* rgba(0,0,0,.8);*/
padding: 30px 20px;
}
#home-img-text-description {
color: #FFF;
font-size: 2.5em;
line-height: 1.4em;
}
html {
background:linear-gradient(to bottom right, tomato 25%, gold 25%);
}
<div id="home-img-text">
<div id="home-img-text-container">
<div id="home-img-text-description">WRECKING
<br>& DEMOLITION
<br>DONE RIGHT.</div>
</div>
</div>