こんにちは世界

Checkerboard

A repeating checkerboard pattern with customizable colors and tile size.

Demo

<script lang="ts">
  import * as Null from "#lib/index.js";
</script>

<Null.Checkerboard />

Checkerboard.svelte

<script lang="ts">
    import type { Snippet } from "svelte";
    import type { HTMLAttributes } from "svelte/elements";

    let {
        blockSize = 20,
        blockColor = "#777",
        backgroundColor = "#222",
        children,
        class: className = "",
        style = "",
        ...rest
    }: HTMLAttributes<HTMLDivElement> & {
        blockSize?: number;
        blockColor?: string;
        backgroundColor?: string;
        children?: Snippet;
    } = $props();

    const half = $derived(blockSize / 2);
</script>

<div
    {...rest}
    data-slot="checkerboard"
    class={`checkerboard ${className}`}
    style={`
        background-image:
            linear-gradient(45deg, ${blockColor} 25%, transparent 25%),
            linear-gradient(-45deg, ${blockColor} 25%, transparent 25%),
            linear-gradient(45deg, transparent 75%, ${blockColor} 75%),
            linear-gradient(-45deg, transparent 75%, ${blockColor} 75%);
        background-size: ${blockSize}px ${blockSize}px;
        background-position:
            0 0,
            0 ${half}px,
            ${half}px -${half}px,
            -${half}px 0;
        background-color: ${backgroundColor};
        ${style}
    `}
>
    {@render children?.()}
</div>

<style>
    .checkerboard {
        min-height: 100px;
        overflow: hidden;
    }
</style>