CSS锯齿边框与纹理背景(CSS Zigzag Border with a Textured Bac

2019-06-17 19:10发布

我一直工作在与锯齿边缘的标题。 这样做的一个方法是使用图像,使锯齿效果。

(1)有什么办法来创建CSS实用的跨浏览器的锯齿边缘,而无需使用图像的?

我也试图把一个纹理背景上这头延伸到曲折。 然而,头的垂直尺寸可能会改变,我无法实现的标题作为一个单一的形象。

如果我尝试纹理既添加到锯齿边缘和头元素,有机会,纹理将关闭同步。

(2)上实施,其延伸到所述Z字形而不关闭同步一个纹理背景任何想法?

我的[老]代码(与纹理一起)是这里的jsfiddle 。

 body { padding: 20px; } header { width: 240px; background-color: #BCED91; } header:after { content: " "; display: block; position: relative; width: 240px; bottom: -15px; height: 15px; background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAPCAYAAACWV43jAAAAw0lEQVRIx83RsQ3CMBCF4T83AZKLVOmyBa1HSIlXwKySGaDOBClZAToWQIpETQONyxAS+2J4pe9knd5X9EP7QicPYAsUwBnYaHwqSsd1QGmNv1rjL0AZ3pJTKDTorPGnsUE/tDvg+KsG70D96TiAMKvDbtYDO6Cyxt++LYadKpY8hthNtTaVGHLRJJ3R5mJy0SbVJp9D7FJaSyWXNUk1yGVt0lTyMWK3ZmtLySUnaQy55CZdSi7AHmis8U/+JOGWBji8AaYPVy6VELZvAAAAAElFTkSuQmCC) repeat-x; } img { margin-top: 50px; } 
 <header> <br /> <br /> <br /> <br /> </header> <img src="http://i.imgur.com/qKsVr.png" /> 


编辑#1:

谢谢你安娜的代码。 我把它和在其上的提高。

http://dabblet.com/gist/3401493

我不认为一个一致的背景将是可能的。

Answer 1:

如果你要使用border-image ,那么它是不是一个跨浏览器的解决方案,因为IE不支持它。

此外,即使除了IE9每目前的浏览器版本同时支持CSS渐变(这将让你得到一个Z字形图案 )和border-image ,我最后一次检查(这是好几个月前,所以更好的测试这又),使用渐变色border-image仅在WebKit的工作。 另外,我不认为,即使是在WebKit的工作原理与一个以上的梯度(你可以只设置一个边界图像和一个梯度一个图像),你需要两个梯度的Z字形图案。

对于CSS Z字形图案的代码是:

background: linear-gradient(#BCED91 49%, transparent 49%),
        linear-gradient(-45deg, white 33%, transparent 33%) 0 50%,
        white linear-gradient(45deg, white 33%, #BCED91 33%) 0 50%;
    background-repeat: repeat-x;
    background-size: 1px 100%, 40px 40px, 40px 40px;

如果你想这下面是在这一个同步的纹理,那么你必须确保它在重复同样的时间间隔( 40px ,但你也可以去20px )。


编辑 :关于polyfills,你可以尝试列出的其中一个位置 : CSS3 PIE或cssSandpaper



Answer 2:

(在现代的浏览器),可以使用SVGs创建简单的图画,并把它们作为嵌入式的CSS背景图像数据URI 。

这里是什么SVGs样子:

 body { background: #888; } 
 <svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="8px" height="4px"> <polygon points="0,4 4,0 8,4" fill="#CC0000" /> </svg> <svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="8px" height="4px"> <polygon points="0,0 4,4 8,0" fill="#CC0000" /> </svg> <svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="8px" height="4px"> <polygon points="0,0 4,4 8,0" fill="#FFFFFF" /> </svg> <svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="8px" height="4px"> <polygon points="0,4 4,0 8,4" fill="#FFFFFF" /> </svg> 

实施例1:

 .zigzag-outside { position: relative; margin-top: 4px; margin-bottom: 4px; background-color: #CC0000; /* example content */ padding: 1em; font: bold medium sans-serif; color: #FFFFFF; } .zigzag-outside:before { content: ""; position: absolute; top: -4px; left: 0; right: 0; height: 4px; /* red up pointing triangle */ background-image: url("data:image/svg+xml,%3Csvg%20version%3D%221.1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%228px%22%20height%3D%224px%22%3E%3Cpolygon%20points%3D%220%2C4%204%2C0%208%2C4%22%20fill%3D%22%23CC0000%22%2F%3E%3C%2Fsvg%3E"); } .zigzag-outside:after { content: ""; position: absolute; bottom: -4px; left: 0; right: 0; height: 4px; /* red down pointing triangle */ background-image: url("data:image/svg+xml,%3Csvg%20version%3D%221.1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%228px%22%20height%3D%224px%22%3E%3Cpolygon%20points%3D%220%2C0%204%2C4%208%2C0%22%20fill%3D%22%23CC0000%22%2F%3E%3C%2Fsvg%3E"); } 
 <div class="zigzag-outside">Example 1</div> 

实施例2:

 .zigzag-inside { position: relative; /* example content */ width: 600px; height: 100px; background-image: url(http://i.stack.imgur.com/uOVfl.jpg); } .zigzag-inside:before { content: ""; position: absolute; top: 0; left: 0; right: 0; height: 4px; /* white down pointing triangle */ background-image: url("data:image/svg+xml,%3Csvg%20version%3D%221.1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%228px%22%20height%3D%224px%22%3E%3Cpolygon%20points%3D%220%2C0%204%2C4%208%2C0%22%20fill%3D%22%23FFFFFF%22%2F%3E%3C%2Fsvg%3E"); } .zigzag-inside:after { content: ""; position: absolute; bottom: 0; left: 0; right: 0; height: 4px; /* white up pointing triangle */ background-image: url("data:image/svg+xml,%3Csvg%20version%3D%221.1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%228px%22%20height%3D%224px%22%3E%3Cpolygon%20points%3D%220%2C4%204%2C0%208%2C4%22%20fill%3D%22%23FFFFFF%22%2F%3E%3C%2Fsvg%3E"); } 
 <div class="zigzag-inside"></div> 



Answer 3:

改良的最小CSS:

 div { background: #1ba1e2; position: relative; } div:after { content: ""; display: block; position: absolute; width: 100%; height: 30px; background: linear-gradient(-45deg, transparent 75%, #1ba1e2 0) 0 50%, linear-gradient(45deg, transparent 75%, #1ba1e2 0) 0 50%; background-size: 30px 30px; } /* Styles just for demo */ h1 { color: #fff; text-align: center; margin: 0; padding: 0.5em; } 
 <div> <h1>Zig Zag Borders</h1> </div> 

如果你想删除重复值,您可以使用CSS变量AKA自定义属性 。 他们除了IE以外的工作无处不在。

 :root { --background-color: #1ba1e2; --zigzag-item-size: 30px; } div { background: var(--background-color); position: relative; } div:after { content: ""; display: block; position: absolute; width: 100%; height: var(--zigzag-item-size); background: linear-gradient(-45deg, transparent 75%, var(--background-color) 0) 0 50%, linear-gradient(45deg, transparent 75%, var(--background-color) 0) 0 50%; background-size: var(--zigzag-item-size) var(--zigzag-item-size); } /* Styles just for demo */ h1 { color: #fff; text-align: center; margin: 0; padding: 0.5em; } 
 <div> <h1>Zig Zag Borders</h1> </div> 

小记:

我用零0梯度颜色停止,以避免重复以前的值,因为根据CSS3图像规格颜色停止位置不能小于前一个。

如果颜色停止拥有职位小于之前的任何颜色,停在列表中的指定位置,设置它的位置,等于之前的任何颜色停止的最大的指定位置。



文章来源: CSS Zigzag Border with a Textured Background