使用CSS创建方格背景

时间:2014-12-03 17:11:55

标签: css

为什么你不能用这样的东西创建格仔背景?

background-color:#ccc;
background-image:linear-gradient(90deg, transparent 50%, #aaa 50%),
                 linear-gradient(90deg, #aaa 50%, #ccc 50%);
background-size:50px 50px,50px 50px;
background-position:0 0, 0 25px;

这个想法是在条纹方块的底部层叠交替的颜色。它不起作用但看起来应该如此。

7 个答案:

答案 0 :(得分:5)

经过大量的游戏,并尝试以其他方式做到这一点,我实际上明白你想做什么:-)。而你实际上非常接近。你有一个问题:你的渐变都有90deg,所以它们互相覆盖。此外,不需要背景颜色,因为背面的渐变没有任何透明度,它涵盖了所有内容。



html {
    height: 100%;
    width: 100%;
    padding: 0;
    margin: 0;
}
body {
    height: 100%;
    width: 100%;
    padding: 0;
    margin: 0;
    background-image:linear-gradient(0deg, transparent 50%, #aaa 50%),
                 linear-gradient(90deg, #aaa 50%, #ccc 50%);
background-size:50px 50px,50px 50px;
background-position:0 0, 0 25px;
}




另请参阅这篇关于如何创建正确的棋盘的精彩文章:http://lea.verou.me/2011/02/checkerboard-pattern-with-css3/

答案 1 :(得分:5)

这是格仔背景在Photoshop或Illustrator等图形设计编辑器中的外观的精确复制品。 (所有CSS)

.checkered{
    height: 240px;
    background: -webkit-linear-gradient(45deg, rgba(0, 0, 0, 0.0980392) 25%, transparent 25%, transparent 75%, rgba(0, 0, 0, 0.0980392) 75%, rgba(0, 0, 0, 0.0980392) 0), -webkit-linear-gradient(45deg, rgba(0, 0, 0, 0.0980392) 25%, transparent 25%, transparent 75%, rgba(0, 0, 0, 0.0980392) 75%, rgba(0, 0, 0, 0.0980392) 0), white;
    background: -moz-linear-gradient(45deg, rgba(0, 0, 0, 0.0980392) 25%, transparent 25%, transparent 75%, rgba(0, 0, 0, 0.0980392) 75%, rgba(0, 0, 0, 0.0980392) 0), -moz-linear-gradient(45deg, rgba(0, 0, 0, 0.0980392) 25%, transparent 25%, transparent 75%, rgba(0, 0, 0, 0.0980392) 75%, rgba(0, 0, 0, 0.0980392) 0), white;
    background: linear-gradient(45deg, rgba(0, 0, 0, 0.0980392) 25%, transparent 25%, transparent 75%, rgba(0, 0, 0, 0.0980392) 75%, rgba(0, 0, 0, 0.0980392) 0), linear-gradient(45deg, rgba(0, 0, 0, 0.0980392) 25%, transparent 25%, transparent 75%, rgba(0, 0, 0, 0.0980392) 75%, rgba(0, 0, 0, 0.0980392) 0), white;
    background-repeat: repeat, repeat;
    background-position: 0px 0, 5px 5px;
    -webkit-transform-origin: 0 0 0;
    transform-origin: 0 0 0;
    -webkit-background-origin: padding-box, padding-box;
    background-origin: padding-box, padding-box;
    -webkit-background-clip: border-box, border-box;
    background-clip: border-box, border-box;
    -webkit-background-size: 10px 10px, 10px 10px;
    background-size: 10px 10px, 10px 10px;
    -webkit-box-shadow: none;
    box-shadow: none;
    text-shadow: none;
    -webkit-transition: none;
    -moz-transition: none;
    -o-transition: none;
    transition: none;
    -webkit-transform: scaleX(1) scaleY(1) scaleZ(1);
    transform: scaleX(1) scaleY(1) scaleZ(1);
}

您可以在我的笔here

中看到一个有效的例子

答案 2 :(得分:2)

此实现在Chrome,Firefox和Safari上产生方格背景:

body {
    background-image:
      linear-gradient(45deg, #000 25%, transparent 25%),
      linear-gradient(45deg, transparent 75%, #000 75%),
      linear-gradient(45deg, transparent 75%, #000 75%),
      linear-gradient(45deg, #000 25%, #fff 25%);    

    background-size:100px 100px;       

    background-position:0 0, 0 0, -50px -50px, 50px 50px;
}

此样式定义了一个四部分的背景图像。每个线性渐变定义一个黑色三角形。三角形被移动以使其对齐以形成正方形(每个三角形两个)。最后一个线性渐变定义了其他两个正方形(负空间)的颜色。第三个三角形和第四个三角形的位置使其起作用。 (否则,它们将位于其他两种类似样式的顶部。)请参见提供的小提琴中的结果(为了更好地理解,将#000替换为四种不同的颜色,并将#fff更改为透明):

http://jsfiddle.net/1o0f34hp

应用于div: http://jsfiddle.net/1o0f34hp/1

但是,在Firefox中,三角形之间的边缘似乎确实有些撕裂。这里引用了此工件:

background image, linear gradient jagged edged result needs to be smooth edged

我也将其实现为React样式化组件,如下所示:

let dark = '#777';
let light = '#ccc';

export const Checkerboard = styled.div`
  background-image: linear-gradient(45deg, ${dark} 25%, transparent 25%),
    linear-gradient(45deg, transparent 75%, ${dark} 75%),
    linear-gradient(45deg, transparent 75%, ${dark} 75%),
    linear-gradient(45deg, ${dark} 25%, ${light} 25%);

  background-size: ${props => `${props.size} ${props.size}`};

  background-position: 0 0, 0 0,
    ${props =>
      `calc(${props.size} / -2) calc(${props.size} / -2), calc(${
        props.size
      } / 2) calc(${props.size} / 2)`};
`;

答案 3 :(得分:1)

这是对此设计的另一个调整,但是偏见。

请注意,背景大小对于在此模式中保持平滑过渡非常重要。

html {
height: 100%;
width: 100%;
padding: 0;
margin: 0;
}

body {
    height: 100%;
    width: 100%;
    padding: 0;
    margin: 0;
    background:repeating-linear-gradient(135deg, rgba(0,64,101,0.7) 40%, #004065 60%),
       repeating-linear-gradient(45deg, rgba(0,80,126,0.7) 40%, #004065 60%);
    background-size:12px 18px;
    background-position: 0 0;
}

要更改背景的颜色,请在两个重复的线性渐变中更改第二个十六进制颜色。

希望这有助于某人

答案 4 :(得分:1)

我制作了这个简化版。在 CSS 的根属性中设置颜色和大小。

:root {
    --checker-color-1: #abcedf;
    --checker-color-2: #123456;
    --checker-size: 20px;
    --checker-gradient: linear-gradient(45deg, var(--checker-color-1) 25%, transparent 25%, transparent 75%, var(--checker-color-1) 75%);
}

body {
    background-color: var(--checker-color-2);
    background-image: var(--checker-gradient), var(--checker-gradient);
    background-position: 0 0, var(--checker-size) var(--checker-size);
    background-size: calc(var(--checker-size) * 2) calc(var(--checker-size) * 2);
}
<!DOCTYPE html>
<html>
<head>
    <title>CSS Checkered Background</title>
    <meta charset="utf-8">
</head>
<body>
</body>
</html>

更新:

此代码段源自 CSS Checkered Background,其中显示了更多选项。

但此后我也学习了一种实现相同效果的新方法,但它使用 SVG(以及 JavaScript 来创建 SVG)SVG Checkered Background。不过,每种方法都有自己的注意事项。

答案 5 :(得分:1)

我使用 ImageMagick 在终端中制作了一个基于 10x10 方块的棋盘格图案,如下所示:

magick -size 10x10 xc:"gray(154)" xc:"gray(102)" +append \( xc:"gray(102)" xc:"gray(154)" +append \) -append -strip checkerboard.png

看起来像这样:

enter image description here

现在,如果我想要 base64 表示,我可以这样做:

magick -size 10x10 xc:"gray(154)" xc:"gray(102)" +append \( xc:"gray(102)" xc:"gray(154)" +append \) -append -strip png:- | base64

这就给出了:

iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAAAAACo4kLRAAAAH0lEQVQY02OcxQADZ+AsJgYsYKgIsiD8YTJInEShIAA1NwKQeKc4/QAAAABJRU5ErkJggg==

然后我可以将其用于重复背景,如下所示:

<div style="background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAAAAACo4kLRAAAAH0lEQVQY02OcxQADZ+AsJgYsYKgIsiD8YTJInEShIAA1NwKQeKc4/QAAAABJRU5ErkJggg==)">'

如果我在该背景上放置一个具有渐变透明度的红色 <img>,我会得到:

enter image description here

答案 6 :(得分:0)

虽然先前的回答表明有可能,但在大多数情况下,使用实际的背景图像可能会更好。

10x10 PNG检查器图像大约80个字节。 这是108个字节的base64编码,而完整的CSS规则是148个字节-少于最短的纯CSS解决方案。
2x2 PNG图像的尺寸并不小,但是需要额外的CSS来缩放和渲染。