为 div 创建斜边
Create a slanted edge to a div
我正在尝试创建一个倾斜的 div,在我看过的所有地方,我刚刚找到了如何使用某种边框来实现它,但这是行不通的,因为 div 将是放置在图像的顶部。
所以现在的代码如下使用Bootstrap:
<div class="thumbnail">
<a href="#">
<img class="img-responsive" src="banner.jpg">
<h3 class="headline-badge">slanted div text</h3>
</a>
</div>
这是相关的 CSS:
.thumbnail img.img-responsive {
width: 100%;
border-top-left-radius: 4px;
border-top-right-radius: 4px;
}
.headline-badge {
color: #fff;
margin-top: 0;
padding: 2%;
position: absolute;
top: 0;
left: 0;
overflow: hidden;
background-color: #000;
}
所以我想创建一个向右上角的倾斜。我尝试使用边框,但收效甚微,而且每当我尝试使边框透明时,它都不会显示边框。
有人知道如何使用 CSS 创建这个吗?我相信它也应该是响应式的,这是一个主要问题,因为倾斜不能只是固定的 height/width.
倾斜度应该在 45 度左右,并且只在 div 的右侧。文本不应受到倾斜的影响。
效果应该是这样的:
http://jsfiddle.net/webtiki/yLu1sxmj/
感谢您发布此 fiddle,但我实际上需要向 div 添加文本,而您的解决方案很难做到这一点,正如回复中的评论所建议的那样。倾斜也需要向上倾斜,而不是向下倾斜,我努力在不影响 div 左侧的情况下做到这一点。以你的例子我无法弄清楚如何在 div 之上添加文本,但我很害怕。
您可以使用倾斜的伪元素来制作元素的倾斜纯色背景。这样,文本就不会受到变换 属性 的影响。
变换原点属性允许伪元素从右下角倾斜,溢出部分用overflow:hidden;
隐藏。
伪元素堆叠在div的内容后面,带有负数z-index
:
div {
position: relative;
display: inline-block;
padding: 1em 5em 1em 1em;
overflow: hidden;
color: #fff;
}
div:after {
content: '';
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: #000;
-webkit-transform-origin: 100% 0;
-ms-transform-origin: 100% 0;
transform-origin: 100% 0;
-webkit-transform: skew(-45deg);
-ms-transform: skew(-45deg);
transform: skew(-45deg);
z-index: -1;
}
body {
background: url('https://farm3.staticflickr.com/2878/10944255073_973d2cd25c.jpg');
background-size: cover;
}
<div>slanted div text</div>
<div>
slanted div text<br/> on several lines<br/> an other line
</div>
<div>wider slanted div text with more text inside</div>
我认为您正在尝试为横幅或简单的点击区域添加倾斜度。我要给出的建议来自亚马逊和google等主要网站的做法。如下:
创建一个具有您想要的倾斜度的矢量图像,它覆盖了您想要的 div 的比例。然后,当您将其添加为叠加层时,您可以将其设置为 position:absolute,z-index 大于 div 中的任何内容。
这将大大减少处理,缓存图像的加载速度将与 css 一样快。这也将防止跨浏览器问题。
希望对您有所帮助。
PS:矢量图像可以很好地调整大小,因此您不必担心像素化和任何类似的问题。
**background-image: -webkit-linear-gradient(130deg, rgba(113, 182, 46, .6) 78%, rgba(0, 0, 0, 0) 0%);**
这可以使用 CSS clip-path
(和 -webkit-clip-path
)
轻松实现
我还发现 this handy tool 可以轻松生成 CSS 代码。
已接受答案的问题是,当您将图像作为父元素的背景时,它不起作用。我改用了内联 svg 背景。
Html
<div class="parent">
<div class="slanted">
I have a slanted edge
</div>
</div>
Css
.parent {
background-image: url('http://lorempixel.com/600/350');
background-size: cover;
background-position: center center;
padding: 100px;
}
.slanted {
color: white;
background: url("data:image/svg+xml;utf8,<svg viewBox='0 0 200 100' xmlns='http://www.w3.org/2000/svg' preserveAspectRatio='none'><polygon points='0,300 0,0 150,0 300,300' width='100%' height='100%' style='fill:blue;'/></svg>");
background-size:contain;
width: 30%;
font-size: 2em;
padding: 4px 40px;
}
注意:您可能需要稍微调整一下 svg 以及高度和宽度。接受的答案应该适用于大多数情况。它对我不起作用,因为我有一个具有图像背景的父元素。
以下是 svg 标签上的一些资源:
https://www.w3schools.com/graphics/svg_intro.asp
我正在尝试创建一个倾斜的 div,在我看过的所有地方,我刚刚找到了如何使用某种边框来实现它,但这是行不通的,因为 div 将是放置在图像的顶部。
所以现在的代码如下使用Bootstrap:
<div class="thumbnail">
<a href="#">
<img class="img-responsive" src="banner.jpg">
<h3 class="headline-badge">slanted div text</h3>
</a>
</div>
这是相关的 CSS:
.thumbnail img.img-responsive {
width: 100%;
border-top-left-radius: 4px;
border-top-right-radius: 4px;
}
.headline-badge {
color: #fff;
margin-top: 0;
padding: 2%;
position: absolute;
top: 0;
left: 0;
overflow: hidden;
background-color: #000;
}
所以我想创建一个向右上角的倾斜。我尝试使用边框,但收效甚微,而且每当我尝试使边框透明时,它都不会显示边框。
有人知道如何使用 CSS 创建这个吗?我相信它也应该是响应式的,这是一个主要问题,因为倾斜不能只是固定的 height/width.
倾斜度应该在 45 度左右,并且只在 div 的右侧。文本不应受到倾斜的影响。
效果应该是这样的:
http://jsfiddle.net/webtiki/yLu1sxmj/
感谢您发布此 fiddle,但我实际上需要向 div 添加文本,而您的解决方案很难做到这一点,正如回复中的评论所建议的那样。倾斜也需要向上倾斜,而不是向下倾斜,我努力在不影响 div 左侧的情况下做到这一点。以你的例子我无法弄清楚如何在 div 之上添加文本,但我很害怕。
您可以使用倾斜的伪元素来制作元素的倾斜纯色背景。这样,文本就不会受到变换 属性 的影响。
变换原点属性允许伪元素从右下角倾斜,溢出部分用overflow:hidden;
隐藏。
伪元素堆叠在div的内容后面,带有负数z-index
:
div {
position: relative;
display: inline-block;
padding: 1em 5em 1em 1em;
overflow: hidden;
color: #fff;
}
div:after {
content: '';
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: #000;
-webkit-transform-origin: 100% 0;
-ms-transform-origin: 100% 0;
transform-origin: 100% 0;
-webkit-transform: skew(-45deg);
-ms-transform: skew(-45deg);
transform: skew(-45deg);
z-index: -1;
}
body {
background: url('https://farm3.staticflickr.com/2878/10944255073_973d2cd25c.jpg');
background-size: cover;
}
<div>slanted div text</div>
<div>
slanted div text<br/> on several lines<br/> an other line
</div>
<div>wider slanted div text with more text inside</div>
我认为您正在尝试为横幅或简单的点击区域添加倾斜度。我要给出的建议来自亚马逊和google等主要网站的做法。如下:
创建一个具有您想要的倾斜度的矢量图像,它覆盖了您想要的 div 的比例。然后,当您将其添加为叠加层时,您可以将其设置为 position:absolute,z-index 大于 div 中的任何内容。
这将大大减少处理,缓存图像的加载速度将与 css 一样快。这也将防止跨浏览器问题。
希望对您有所帮助。
PS:矢量图像可以很好地调整大小,因此您不必担心像素化和任何类似的问题。
**background-image: -webkit-linear-gradient(130deg, rgba(113, 182, 46, .6) 78%, rgba(0, 0, 0, 0) 0%);**
这可以使用 CSS clip-path
(和 -webkit-clip-path
)
我还发现 this handy tool 可以轻松生成 CSS 代码。
已接受答案的问题是,当您将图像作为父元素的背景时,它不起作用。我改用了内联 svg 背景。
Html
<div class="parent">
<div class="slanted">
I have a slanted edge
</div>
</div>
Css
.parent {
background-image: url('http://lorempixel.com/600/350');
background-size: cover;
background-position: center center;
padding: 100px;
}
.slanted {
color: white;
background: url("data:image/svg+xml;utf8,<svg viewBox='0 0 200 100' xmlns='http://www.w3.org/2000/svg' preserveAspectRatio='none'><polygon points='0,300 0,0 150,0 300,300' width='100%' height='100%' style='fill:blue;'/></svg>");
background-size:contain;
width: 30%;
font-size: 2em;
padding: 4px 40px;
}
注意:您可能需要稍微调整一下 svg 以及高度和宽度。接受的答案应该适用于大多数情况。它对我不起作用,因为我有一个具有图像背景的父元素。
以下是 svg 标签上的一些资源:
https://www.w3schools.com/graphics/svg_intro.asp