以下爲譯文:
用placeholder屬性代替label元素
開發人員經常用placeholder屬性代替label元素。但是,在這種寫法下,使用屏幕閲讀器的用戶無法填寫字段,因爲屏幕閲讀器無法從placeholder屬性中讀取文本。
<input type="email" placeholder="Enter your email" />
因此,我建議用label元素顯示字段名稱,而placeholder應該作爲例子顯示在用戶需要填充的數據中。
<label> <span>Enter your email</span> <input type="email"placeholder="e.g. example@gmail.com" /> </label>
用img元素標記裝飾用的圖片
我經常看到開發人員混淆裝飾圖片和内容圖片。例如,他們會使用img元素來顯示社交圖標。
<a href=" <img class="social__icon" src="twitter.svg" alt /> <span class="social__name">Twitter</span> </a>
然而,社交圖標是裝飾性圖標,其目的是幫助用戶迅速理解元素的含義,而無需閲讀文本。即便我們刪除這些圖標,元素的含義也不會消失,所以我們應該使用background-image屬性。
<a href=" <span class="social__name">Twitter</span> </a> .social::before {background-image: url("twitter.svg");}
使用resize屬性
如果利用resize屬性來禁止textarea調整大小,那麽你就破壞了可訪問性。因爲用戶無法舒適地輸入數據。
textarea { width: 100%; height: 200px; resize: none; }
你應該使用min-width、max-width、min-height以及max-height屬性,這些屬性可以限制元素的大小,而且用戶也可以舒舒服服地輸入數據。
textarea { min-width: 100%; max-width: 100%; min-height: 200px; max-height: 400px; }
同時使用display: block和position: absolute(fixed)
我經常看見開發人員像下面這樣使用display和position屬性:
.button::before { content: ""; display: block; position: absolute; top: 0;left: 0; }
但是,瀏覽器會默認設置block。因此,你無需爲absolute或fixed的元素設置這個值。也就是說,以下代碼的結果與上述代碼完全相同。
.button::before { content: ""; position: absolute; top: 0;left: 0; }
Outline屬性的none值
無法通過鍵盤訪問網站;鏈接打不開;無法注冊等等。出現這些情況是因爲開發人員將outline屬性設置成了none值,因此元素無法聚焦。
.button:focus { outline: none; } /* or */ .button:focus { outline: 0; }
如果你需要禁用默認的聚焦,那麽也別忘了指定取而代之的聚焦狀態。
.button:focus { outline: none; box-shadow: 003px0 blue; }
空元素
開發人員經常使用HTML空元素來調整元素的樣式。例如,利用空div或span元素來顯示導航欄菜單。
<button class="hamburger"> <span></span> <span></span> <span></span> </button> .hamburger { width: 60px; height: 45px; position: relative; } .hamburger span { width: 100%; height: 9px; background-color: #d3531a; border-radius: 9px; position: absolute; left: 0; } .hamburger span:nth-child(1) { top: 0; } .hamburger span:nth-child(2) { top: 18px; } .hamburger span:nth-child(3){ top: 36px; }
其實,你可以使用 ::before和 ::after偽元素達成同樣的效果。
<button class="hamburger"> <span class="hamburger__text"> <span class="visually-hidden">Openmenu</span> </span> </button> .hamburger { width: 60px; height: 45px; position: relative; } .hamburger::before,.hamburger::after,.hamburger__text::before { content: ""; width: 100%; height: 9px; background-color: #d3531a; border-radius: 9px; position: absolute; left: 0; } .hamburger::before { top: 0; } .hamburger::after { top: 18px; }.hamburger__text::before { top: 36px; } .visually-hidden { position: absolute !important; clip: rect(1px, 1px, 1px, 1px); width: 1px !important; height: 1px !important; overflow: hidden; }
原文:https://dev.to/melnik909/the-6-most-common-mistakes-developers-when-writing-html-and-css-f92