<input> öğesini <label> içine yerleştirerek veya etiketin for özelliğini girişin id özelliğiyle eşleştirerek her onay kutusunun kendi etiketiyle ilişkilendirildiği semantik ve erişilebilir HTML kullanın.
Modern CSS, onay kutularını stillendirmek için iki yaklaşım sunar: accent-color ile yerel görünümü özelleştirme veya <input type="checkbox"> öğesinde appearance: none ile varsayılan sunumu geçersiz kılma.
accent-color ile yerel özelleştirme
Doğal oluşturma, klavye davranışı, doğrulama ve işletim sistemi odak göstergelerini koruyan basit, markayla tutarlı bir stil için accent-color kullanın.
.checkbox-native {
accent-color: #1a73e8;
/* Sizing is controlled via relative units */
inline-size: 1.25em;
aspect-ratio: 1;
margin: 0;
cursor: pointer;
}
appearance: none ile tamamen özel stil oluşturma
Tasarım, onay kutusunun şekli, boyutu, durumları veya göstergeleri üzerinde kontrol gerektirdiğinde appearance: none kullanın. Bu işlem, doğal görsel stili kaldırır ancak <input> öğesini etkileşimli hedef olarak bırakır.
appearance: none, tarayıcının varsayılan boyutlarını kaldırdığından --checkbox-size ve --checkbox-icon-size için açık göreli boyutlar ayarlayın. Kenarlığı ve görsel dolgusu için yer bırakmak amacıyla simgeyi onay kutusundan daha küçük tutun.
/* Reusable SVG assets */
:root {
--icon-check: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='3.5' stroke-linecap='round' stroke-linejoin='round'><polyline points='20 6 9 17 4 12'></polyline></svg>");
--icon-dash: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='4.5' stroke-linecap='round' stroke-linejoin='round'><line x1='5' y1='12' x2='19' y2='12'></line></svg>");
}
/* Custom checkbox */
.checkbox-custom {
--checkbox-size: 1.25em;
--checkbox-icon-size: 0.7em;
appearance: none;
display: inline-grid;
place-content: center;
inline-size: var(--checkbox-size);
aspect-ratio: 1;
margin: 0;
border: 2px solid currentColor;
cursor: pointer;
&::before {
content: "";
inline-size: var(--checkbox-icon-size);
aspect-ratio: 1;
background-color: currentColor;
mask: var(--checkbox-icon) no-repeat center / contain;
scale: 0;
@media (prefers-reduced-motion: no-preference) {
transition: scale 150ms ease;
}
@media (forced-colors: active) {
background-color: CanvasText;
}
}
&:checked {
--checkbox-icon: var(--icon-check);
}
&:indeterminate {
--checkbox-icon: var(--icon-dash);
}
&:is(:checked, :indeterminate)::before {
scale: 1;
}
&:focus-visible {
outline: 2px solid currentColor;
outline-offset: 2px;
}
&:disabled {
cursor: not-allowed;
opacity: 0.5;
}
}
Belirsiz durum
Belirsiz durum, HTML özelliği aracılığıyla ayarlanamaz. JavaScript'te (checkbox.indeterminate = true) indeterminate DOM özelliğini ayarlayın ve :indeterminate sözde sınıfının hem :checked hem de işaretlenmemiş durumlardan görsel olarak farklı olduğundan emin olun:
- Yerel (
accent-color): Öğeninaccent-colorkullanılarak tarayıcı tarafından otomatik olarak stillendirilir (ek:indeterminateCSS kuralı gerekmez). - Özel (
appearance: none): Yukarıda gösterildiği gibi.checkbox-custom:indeterminateüzerinde--checkbox-iconilevar(--icon-dash)arasında geçiş yapın.
const selectAll = document.querySelector("#select-all");
selectAll.indeterminate = true;
Erişilebilirlik ve etkileşim
- Özel onay kutularındaki odak göstergelerini biçimlendirmek için
:focusyerine:focus-visibleKULLANIN. Böylece, işaretçi tıklamalarında görünmeden klavye ile gezinme için belirgin bir çerçeve görünür. - Onay kutularında
outline: nonekullanmayın veya odak göstergelerini gizlemeyin. DO Onay kutusunun veya sarmalayıcısının
<label>en az44px x 44pxboyutunda etkileşim isabeti hedefi sağladığından emin olun ve görsel onay kutusunun boyutunu göreceli birimlerde tutun:label { display: inline-flex; align-items: center; gap: 0.65rem; min-block-size: 44px; cursor: pointer; }YAPIN: Etkin olmayan durumları net bir şekilde belirtmek için opaklığı azaltan ve
cursor: not-alloweddeğerini ayarlayan bir:disabledstil varyantı sağlayın.
accent-color kullanırken dikkat edilmesi gereken sorunlar
accent-color öğesinin tarayıcıda oluşturulma şekli değişiklik gösterir.
Tarayıcılar, genellikle vurgu rengi arka plan üzerine boyanan göstergeler (ör. onay kutusu işaretleri ve radyo düğmesi noktaları) için farklı işlemler uygulayabilir:
- Chromium ve Firefox genellikle zıt bir gösterge rengi seçer.
- Safari ise açık modda beyaz bir göstergeyi veya koyu modda siyah bir göstergeyi koruyarak arkasındaki vurgu rengini değiştirebilir. Bu ayarlama, sağlanan her renk için her zaman yeterli kontrast sağlamaz. Bu nedenle, Safari'de hem açık hem de koyu renk şemaları dahil olmak üzere önemli kombinasyonları test edin. Safari'nin en iyi kontrastı sağlayan gösterge rengini otomatik olarak seçeceğini varsaymayın.
Yedek stratejiler
Vurgu rengi için yedekler ve tarayıcı desteği
accent-color özelliği, progresif geliştirmedir.
Bu özelliği desteklemeyen tarayıcılar, özelliği yok sayar ve varsayılan kullanıcı arayüzü renklerini kullanır.