暴力的 div、table 堆叠不在此进行赘述,image-rendering、svg 与 canvas 不在范围内。
代码写起来较为简短,也有很多的生成器。但一般需要再套个元素在外以帮助占位,浏览器缩放会影响显示效果(存在缝隙或堆叠),且不太方便自适应。
CSS Pixel Art Generator PIXEL ART TO CSS
只需一个元素,十分方便的自适应,只需宽与高任意指定一个,甚至可以在里面写点字。但不支持透明,且代码又长又没什么生成器,写起来会不太方便。此外还应当设置
print-color-adjust: exact。
/** 代码修改自https://codepen.io/cgreinhold/pen/rNagxoK **/
const pixels = [
["","#F00"],
["#0F0","#00F"]
];
const pixelArt = document.getElementById("pixelart");
const width = pixels[0].length;
const height = pixels.length;
const backgroundImage = [];
const backgroundSize = [];
for (let i = 0; i < pixels.length; i++) {
const pixel = pixels[i];
const percent = 100 / pixel.length;
let cont = 0;
const backgroundParts = [];
for (let j = 0; j < pixel.length; j++) {
const pixelColor = pixel[j] || "#FFF";
let backgroundImagePart = "";
backgroundImagePart += `${pixelColor} ${cont}%`;
cont += percent;
backgroundImagePart += `, ${pixelColor} ${cont}%`;
backgroundParts.push(backgroundImagePart);
}
backgroundImage.push(
`linear-gradient(to right, ${backgroundParts.join(", ")})`
);
backgroundSize.push(`100% ${((i + 1) * 100) / height}%`);
}
pixelArt.style.aspectRatio = width / height;
pixelArt.style.backgroundImage = backgroundImage.join(",");
pixelArt.style.backgroundRepeat = "repeat-x";
pixelArt.style.backgroundSize = backgroundSize.join(",");
pixelArt.removeAttribute("id")