如何摆脱连接元素之间的透明空间?
How to get rid transparent spaces between connecting elements?
情况
我有一个包含 2 个背景图像的元素(手写 SVG)。每个图像代表一个具有 45 度边缘的角。图像具有固定宽度,元素具有相同宽度的(左和右)填充,因此元素的内容不会与角图像重叠。该元素包含一个子元素,它将用 background-color
属性 填充透明度,因为子元素的父元素不能使用这些图像设置 属性 background-color
.
代码
元素的结构。
<div class="shape">
<div class="content">
</div>
</div>
元素的样式。
.shape {
background:url("http://imgh.us/left.svg") no-repeat scroll left bottom,
url("http://imgh.us/right_1.svg") no-repeat scroll right bottom;
background-size:10vw 10vw;
min-height:10vw;
padding:0 10vw;
}
.content {
min-height:10vw;
background-color:#0080cb;
}
使用的两个 SVG 文件之一(这是左边的一个)。
<svg viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">
<path d="M0 0 L100 0 L100 100Z" fill="rgb(0,128,203)"/>
</svg>
问题
如何去除连接元素之间的透明空间?它似乎没有出现在 FireFox 上,但其他浏览器根本不喜欢它。
它应该是这样的(Windows 8.1 Firefox 30):
这就是我要修复的问题 (Windows 8.1 Chrome 36):
另外(题外话)如果你对这个问题有任何了解请告诉我(Windows 8.1 Opera 12.16):
链接
我检查了SVG文件,它们没有笔划,无法进一步优化。所以剩下的唯一旋钮是 tweak the sizing of the boxes so that things overlap:
.shape {
background:url("http://imgh.us/left.svg") no-repeat scroll left bottom,
url("http://imgh.us/right_1.svg") no-repeat scroll right bottom;
background-size:10vw 10.2vw;
min-height:10vw;
padding:0 9.99vw;
}
请检查fiddle。
与其对元素使用 svg,不如使用 css 边框:
.wrapper {
min-height: 10vw;
border-left: 10vw solid transparent;
border-right: 10vw solid transparent;
border-top: 10vw solid #0080cb;
position: relative;
}
.text {
position: absolute;
top: -10vw;
}
<div class="wrapper">
<div class="text">Hello World!</div>
</div>
为了使矩形保持在顶部,您可以使用这种样式:
html,body{
margin:0;padding:0;
}
.wrapper{
height:20px;
width:100%;
display:inline-block;
background:#0080cb;
position:relative;
}
.text{
position:absolute;
width:70%;
left:15%;
z-index:5;
display:inline-block;
}
.wrapper:before, .wrapper:after{
position:absolute;
content:"";
right:0;
height:0;
width:50%;
top:20px;
border-top:100px solid #0080cb;
border-right:100px solid transparent;
}
.wrapper:after{
border-top:100px solid #0080cb;
border-left:100px solid transparent;
border-right:0;
left:0;
}
<div class="wrapper">
<div class="text">Hello World!Hello World!Hello World!Hello World!Hello World!Hello World!Hello World!Hello World!Hello World!Hello World!Hello World!</div>
</div>
又一次转轮
这是另一个可能对您有用的实现:
.wrapper {
height: 180px;
width: 60%;
margin: 0 auto;
text-align: center;
position: relative;
z-index: 5;
overflow: hidden;
}
.blueshape {
z-index: -3;
height: 0px;
position: absolute;
left: -50px;
right: -50px;
border-left: 100px solid transparent;
border-right: 100px solid transparent;
border-top: 150px solid blue;
padding-top: -50px;
top: -50px;
}
.text{
position:absolute;
top:-100px;
}
<div class="wrapper">
<div class="blueshape">
<div class="text">you can place text in here!</div>
</div>
</div>
它使用的逻辑是:
+-------------------------------+
| |<--wrapper
| |
| |
| |
| |
+-------------------------------+
+-------------------------------+
*-|-------------------------------|-+ <-- borders create this part
\| |/
|\ /|
| \___________________________/ | <-- set overflow hidden to wrapper
| |
+-------------------------------+
最终结果:
|-------------------------------|
| |
\ /
\___________________________/
情况
我有一个包含 2 个背景图像的元素(手写 SVG)。每个图像代表一个具有 45 度边缘的角。图像具有固定宽度,元素具有相同宽度的(左和右)填充,因此元素的内容不会与角图像重叠。该元素包含一个子元素,它将用 background-color
属性 填充透明度,因为子元素的父元素不能使用这些图像设置 属性 background-color
.
代码
元素的结构。
<div class="shape">
<div class="content">
</div>
</div>
元素的样式。
.shape {
background:url("http://imgh.us/left.svg") no-repeat scroll left bottom,
url("http://imgh.us/right_1.svg") no-repeat scroll right bottom;
background-size:10vw 10vw;
min-height:10vw;
padding:0 10vw;
}
.content {
min-height:10vw;
background-color:#0080cb;
}
使用的两个 SVG 文件之一(这是左边的一个)。
<svg viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">
<path d="M0 0 L100 0 L100 100Z" fill="rgb(0,128,203)"/>
</svg>
问题
如何去除连接元素之间的透明空间?它似乎没有出现在 FireFox 上,但其他浏览器根本不喜欢它。
它应该是这样的(Windows 8.1 Firefox 30):
这就是我要修复的问题 (Windows 8.1 Chrome 36):
另外(题外话)如果你对这个问题有任何了解请告诉我(Windows 8.1 Opera 12.16):
链接
我检查了SVG文件,它们没有笔划,无法进一步优化。所以剩下的唯一旋钮是 tweak the sizing of the boxes so that things overlap:
.shape {
background:url("http://imgh.us/left.svg") no-repeat scroll left bottom,
url("http://imgh.us/right_1.svg") no-repeat scroll right bottom;
background-size:10vw 10.2vw;
min-height:10vw;
padding:0 9.99vw;
}
请检查fiddle。
与其对元素使用 svg,不如使用 css 边框:
.wrapper {
min-height: 10vw;
border-left: 10vw solid transparent;
border-right: 10vw solid transparent;
border-top: 10vw solid #0080cb;
position: relative;
}
.text {
position: absolute;
top: -10vw;
}
<div class="wrapper">
<div class="text">Hello World!</div>
</div>
为了使矩形保持在顶部,您可以使用这种样式:
html,body{
margin:0;padding:0;
}
.wrapper{
height:20px;
width:100%;
display:inline-block;
background:#0080cb;
position:relative;
}
.text{
position:absolute;
width:70%;
left:15%;
z-index:5;
display:inline-block;
}
.wrapper:before, .wrapper:after{
position:absolute;
content:"";
right:0;
height:0;
width:50%;
top:20px;
border-top:100px solid #0080cb;
border-right:100px solid transparent;
}
.wrapper:after{
border-top:100px solid #0080cb;
border-left:100px solid transparent;
border-right:0;
left:0;
}
<div class="wrapper">
<div class="text">Hello World!Hello World!Hello World!Hello World!Hello World!Hello World!Hello World!Hello World!Hello World!Hello World!Hello World!</div>
</div>
又一次转轮
这是另一个可能对您有用的实现:
.wrapper {
height: 180px;
width: 60%;
margin: 0 auto;
text-align: center;
position: relative;
z-index: 5;
overflow: hidden;
}
.blueshape {
z-index: -3;
height: 0px;
position: absolute;
left: -50px;
right: -50px;
border-left: 100px solid transparent;
border-right: 100px solid transparent;
border-top: 150px solid blue;
padding-top: -50px;
top: -50px;
}
.text{
position:absolute;
top:-100px;
}
<div class="wrapper">
<div class="blueshape">
<div class="text">you can place text in here!</div>
</div>
</div>
它使用的逻辑是:
+-------------------------------+
| |<--wrapper
| |
| |
| |
| |
+-------------------------------+
+-------------------------------+
*-|-------------------------------|-+ <-- borders create this part
\| |/
|\ /|
| \___________________________/ | <-- set overflow hidden to wrapper
| |
+-------------------------------+
最终结果:
|-------------------------------|
| |
\ /
\___________________________/