新的標題:使用純CSS和HTML壓縮HTML矩陣版面設計
P粉458913655
P粉458913655 2023-09-07 21:27:33
0
1
487

我正在嘗試使用純HTML和CSS建立一個標誌。設計非常直觀,是一個[13x13]的矩陣,其中包含一些有顏色的項目。

CSS非常簡單和次要。但是,HTML程式碼卻有許多重複的部分,需要進行DRY(Don't Repeat Yourself)處理。

body { width: 100vmin; margin: auto }
logo {
  display: grid;
  grid-template-columns: repeat(13, 1fr);
}

s { }
w { background-color: #d6d6d6; aspect-ratio: 1 }
l { background-color: #d6d6d6; aspect-ratio: 1 }
f { background-color: #d6d6d6; aspect-ratio: 1 }
<logo>
<f></f><f></f><f></f><s></s><f></f><f></f><f></f><s></s><f></f><s></s><f></f><f></f><f></f>
<f></f><s></s><f></f><s></s><s></s><s></s><f></f><s></s><f></f><s></s><s></s><s></s><s></s>
<f></f><s></s><f></f><s></s><f></f><f></f><f></f><s></s><f></f><s></s><f></f><s></s><f></f>
<f></f><s></s><s></s><s></s><s></s><s></s><s></s><s></s><f></f><s></s><s></s><s></s><f></f>
<f></f><s></s><l></l><l></l><l></l><l></l><l></l><s></s><f></f><s></s><f></f><s></s><f></f>
<f></f><s></s><s></s><s></s><s></s><s></s><s></s><s></s><s></s><s></s><f></f><s></s><f></f>
<f></f><s></s><l></l><l></l><l></l><l></l><l></l><l></l><s></s><f></f><f></f><s></s><f></f>
<f></f><s></s><l></l><s></s><s></s><s></s><s></s><s></s><s></s><s></s><s></s><s></s><s></s>
<f></f><s></s><l></l><s></s><l></l><l></l><l></l><s></s><w></w><s></s><w></w><s></s><w></w>
<s></s><s></s><l></l><s></s><s></s><s></s><l></l><s></s><s></s><s></s><w></w><s></s><s></s>
<l></l><l></l><l></l><s></s><l></l><l></l><l></l><w></w><w></w><w></w><w></w><s></s><w></w>
<l></l><s></s><s></s><s></s><s></s><s></s><s></s><s></s><s></s><s></s><s></s><w></w><s></s>
<l></l><l></l><l></l><l></l><l></l><l></l><l></l><l></l><l></l><l></l><s></s><w></w><w></w>
</logo>

我已經嘗試過使用<f/>代替<f></f>,但沒有成功。

有沒有辦法減少這段程式碼?

注意:顏色應保持不變。

P粉458913655
P粉458913655

全部回覆(1)
P粉713846879

如果javascript可以使用,您可以將單元格類型連接成字串對象,並使用它動態建立標誌。範例程式碼如下。

let logo = document.getElementById("logo"); 
logo.dataset["cells"].split('').forEach(a => logo.append(document.createElement(a)));
body { width: 100vmin; margin: auto }
logo {
  display: grid;
  grid-template-columns: repeat(13, 1fr);
}

w { background-color: #d6d6d6; aspect-ratio: 1 }
l { background-color: #d6d6d6; aspect-ratio: 1 }
f { background-color: #d6d6d6; aspect-ratio: 1 }
<logo id="logo" data-cells="fffsfffsfsffffsfsssfsfssssfsfsfffsfsfsffsssssssfsssffslllllsfsfsffsssssssssfsffsllllllsffsffslssssssssssfslslllswswswsslssslssswsslllslllwwwwswlssssssssssswllllllllllsww"></logo>

根據對HTML/CSS的需求和@Temani Afif的評論,這裡提供了一個SVG解決方案:

    .w * { stroke:red;stroke-width:1;;fill:none;stroke-linejoin="miter"; }
    .l * { stroke:green;stroke-width:1;;fill:none;stroke-linejoin="miter"; }
    .f * { stroke:blue;stroke-width:1;;fill:none;stroke-linejoin="miter"; }
<logo>
    <svg height="300" width="300" viewBox="-1 -1 15 15">
        <g class="w">
            <path d="M12.5,10 L12.5,12.5 L11,12.5" />
            <path d="M6.5,10.5 L10.5,10.5 L10.5,8" />
            <path d="M8,8.5 L9,8.5" />
            <path d="M12,8.5 L13,8.5" />
        </g>
        <g class="l">
            <path d="M4,8.5 L6.5,8.5 L6.5,10.5 L4,10.5" />
            <path d="M7,4.5 L2,4.5" />
            <path d="M8,6.5 L2.5,6.5 L2.5,10.5 L0.5,10.5 L0.5,12.5 L10,12.5" />
        </g>
        <g class="f">
            <path d="M0.5,9 L0.5,0.5 L2.5,0.5 L2.5,3" />
            <path d="M4,0.5 L6.5,0.5 L6.5,2.5 L4,2.5" />
            <path d="M8.5,0 L8.5,5" />
            <path d="M10,0.5 L13,0.5" />
            <path d="M10,2.5 L11,2.5" />
            <path d="M12.5,2 L12.5,7" />
            <path d="M10.5,4 L10.5,6.5 L9,6.5" />
        </g>
    </svg>
</logo>
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板