半透明倾斜背景
Semi-transparent slanted background
我想创建一个 html 元素,例如一个div,样式如下:
- 半透明背景色
- 所有边上的圆角边框
- 左边div画一条直线
- 右边div画一条斜线
我只想在 CSS 中创建它,想知道这是否可能。到目前为止,我想出了两种不同的方法,它们都有自己的缺点并且不够充分。你可以看看这个 fiddle:
https://jsfiddle.net/n4tecna3/
.one-side-skew-1,
.one-side-skew-2 {
font-size: 20px;
padding: 2%;
background-color: rgba(220, 50, 255, 0.6);
position: relative;
display: block;
border-radius: 4px;
z-index: 2;
color: #ffffff;
margin-top: 30px;
}
.one-side-skew-2 {
border-top-right-radius: 0px;
}
.one-side-skew-1:after {
height: 100%;
width: 20%;
position: absolute;
top: 0;
left: 85%;
display: inline-block;
content: "";
background-color: rgba(220, 50, 255, 0.6);
-moz-transform: skewX(-10deg);
-webkit-transform: skewX(-10deg);
-ms-transform: skewX(-10deg);
-o-transform: skewX(-10deg);
transform: skewX(-10deg);
z-index: -1;
border-radius: 4px;
}
.one-side-skew-2:after {
border-top: 1em solid rgba(220, 50, 255, 0.6);
border-left: 0.25em solid rgba(220, 50, 255, 0.6);
border-right: 0.25em solid transparent;
border-bottom: 1em solid transparent;
border-top-right-radius: 4px;
left: 100%;
display: inline-block;
position: absolute;
content: "";
top: 0;
}
.container {
width: 500px;
}
<div class="container">
<div class="one-side-skew-1">
<span class="inner-text">One Side Skew With Pseudo Element Skewed</span>
</div>
<div class="one-side-skew-2">
<span class="inner-text">One Side Skew With Pseudo Element Border</span>
</div>
</div>
方法 1 .one-side-skew-1
使用具有圆形边框的 div 元素和倾斜的圆形边框伪元素来创建单侧倾斜元素。只要背景颜色是纯色,这就很好用。对于半透明背景,您会在元素及其伪元素相遇的地方看到难看的颜色重叠。
方法 2 .one-side-skew2
使用一个 div 元素,它后面有一个仅包含边框的伪元素。这有点老套,但接近我想要的结果。尽管如此,右侧看起来并不像第一种方法中那样平滑。
只有 CSS 其他人对此问题有好的解决方案吗?或者我必须使用带有半透明背景图像的后备解决方案来解决这个问题吗?
您可以对所有背景使用伪元素,并在元素上使用溢出 属性 隐藏溢出部分。
这将防止元素和伪元素背景重叠并允许半透明背景:
div {
position: relative;
width: 250px;
font-size: 20px;
border-radius: 4px;
overflow: hidden;
color: #fff;
padding: 1% 2%;
}
div:before {
content: '';
position: absolute;
top: 0; right: 0;
width: 100%; height: 100%;
background: rgba(220, 50, 255, 0.6);
-webkit-transform-origin:100% 0;
-ms-transform-origin:100% 0;
transform-origin: 100% 0;
-webkit-transform: skewX(-10deg);
-ms-transform: skewX(-10deg);
transform: skewX(-10deg);
border-radius: 4px 4px 6px;
z-index: -1;
}
/** FOR THE DEMO **/body {background: url('http://lorempixel.com/output/people-q-g-640-480-3.jpg');background-size: cover;}
<div>content</div>
我想创建一个 html 元素,例如一个div,样式如下:
- 半透明背景色
- 所有边上的圆角边框
- 左边div画一条直线
- 右边div画一条斜线
我只想在 CSS 中创建它,想知道这是否可能。到目前为止,我想出了两种不同的方法,它们都有自己的缺点并且不够充分。你可以看看这个 fiddle:
https://jsfiddle.net/n4tecna3/
.one-side-skew-1,
.one-side-skew-2 {
font-size: 20px;
padding: 2%;
background-color: rgba(220, 50, 255, 0.6);
position: relative;
display: block;
border-radius: 4px;
z-index: 2;
color: #ffffff;
margin-top: 30px;
}
.one-side-skew-2 {
border-top-right-radius: 0px;
}
.one-side-skew-1:after {
height: 100%;
width: 20%;
position: absolute;
top: 0;
left: 85%;
display: inline-block;
content: "";
background-color: rgba(220, 50, 255, 0.6);
-moz-transform: skewX(-10deg);
-webkit-transform: skewX(-10deg);
-ms-transform: skewX(-10deg);
-o-transform: skewX(-10deg);
transform: skewX(-10deg);
z-index: -1;
border-radius: 4px;
}
.one-side-skew-2:after {
border-top: 1em solid rgba(220, 50, 255, 0.6);
border-left: 0.25em solid rgba(220, 50, 255, 0.6);
border-right: 0.25em solid transparent;
border-bottom: 1em solid transparent;
border-top-right-radius: 4px;
left: 100%;
display: inline-block;
position: absolute;
content: "";
top: 0;
}
.container {
width: 500px;
}
<div class="container">
<div class="one-side-skew-1">
<span class="inner-text">One Side Skew With Pseudo Element Skewed</span>
</div>
<div class="one-side-skew-2">
<span class="inner-text">One Side Skew With Pseudo Element Border</span>
</div>
</div>
方法 1 .one-side-skew-1
使用具有圆形边框的 div 元素和倾斜的圆形边框伪元素来创建单侧倾斜元素。只要背景颜色是纯色,这就很好用。对于半透明背景,您会在元素及其伪元素相遇的地方看到难看的颜色重叠。
方法 2 .one-side-skew2
使用一个 div 元素,它后面有一个仅包含边框的伪元素。这有点老套,但接近我想要的结果。尽管如此,右侧看起来并不像第一种方法中那样平滑。
只有 CSS 其他人对此问题有好的解决方案吗?或者我必须使用带有半透明背景图像的后备解决方案来解决这个问题吗?
您可以对所有背景使用伪元素,并在元素上使用溢出 属性 隐藏溢出部分。
这将防止元素和伪元素背景重叠并允许半透明背景:
div {
position: relative;
width: 250px;
font-size: 20px;
border-radius: 4px;
overflow: hidden;
color: #fff;
padding: 1% 2%;
}
div:before {
content: '';
position: absolute;
top: 0; right: 0;
width: 100%; height: 100%;
background: rgba(220, 50, 255, 0.6);
-webkit-transform-origin:100% 0;
-ms-transform-origin:100% 0;
transform-origin: 100% 0;
-webkit-transform: skewX(-10deg);
-ms-transform: skewX(-10deg);
transform: skewX(-10deg);
border-radius: 4px 4px 6px;
z-index: -1;
}
/** FOR THE DEMO **/body {background: url('http://lorempixel.com/output/people-q-g-640-480-3.jpg');background-size: cover;}
<div>content</div>