Skip to content

Commit f2652b1

Browse files
nextlevelshitMichael Czechowski
authored andcommitted
fix(a11y): batch 4 — drop duplicate h1 + add missing form labels (#190)
Co-authored-by: Michael Czechowski <mail@dailysh.it> Co-committed-by: Michael Czechowski <mail@dailysh.it>
1 parent ae9eca3 commit f2652b1

3 files changed

Lines changed: 31 additions & 9 deletions

File tree

src/i18n.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,7 @@ const translations = {
165165
// Newsletter
166166
newsletterText: "Want to know when new features launch?",
167167
newsletterPlaceholder: "your@email.com",
168+
newsletterEmailLabel: "Email address for newsletter",
168169
newsletterButton: "Notify Me",
169170
newsletterThanks: "Thanks! We'll keep you posted.",
170171
newsletterDisclaimer: "Max once a week. Unsubscribe anytime — see Imprint for contact.",
@@ -399,6 +400,7 @@ const translations = {
399400
// Newsletter
400401
newsletterText: "Möchtest du erfahren, wenn neue Funktionen erscheinen?",
401402
newsletterPlaceholder: "deine@email.de",
403+
newsletterEmailLabel: "E-Mail-Adresse für Newsletter",
402404
newsletterButton: "Benachrichtigen",
403405
newsletterThanks: "Danke! Wir halten dich auf dem Laufenden.",
404406
newsletterDisclaimer: "Max. einmal pro Woche. Abmelden jederzeit — Kontakt im Impressum.",
@@ -629,6 +631,7 @@ const translations = {
629631
// Newsletter
630632
newsletterText: "Chcesz wiedzieć, kiedy pojawią się nowe funkcje?",
631633
newsletterPlaceholder: "twoj@email.pl",
634+
newsletterEmailLabel: "Adres e-mail do newslettera",
632635
newsletterButton: "Powiadom mnie",
633636
newsletterThanks: "Dzięki! Będziemy informować.",
634637
newsletterDisclaimer: "Maks. raz w tygodniu. Wypisz się w dowolnym momencie — kontakt w Stopce redakcyjnej.",
@@ -861,6 +864,7 @@ const translations = {
861864
// Newsletter
862865
newsletterText: "¿Quieres saber cuando se lancen nuevas funciones?",
863866
newsletterPlaceholder: "tu@email.com",
867+
newsletterEmailLabel: "Dirección de correo para el boletín",
864868
newsletterButton: "Notificarme",
865869
newsletterThanks: "¡Gracias! Te mantendremos informado.",
866870
newsletterDisclaimer: "Máximo una vez por semana. Cancela cuando quieras — contacto en el Aviso legal.",
@@ -1088,6 +1092,7 @@ const translations = {
10881092
// Newsletter
10891093
newsletterText: "هل تريد معرفة متى تُطلق ميزات جديدة؟",
10901094
newsletterPlaceholder: "بريدك@email.com",
1095+
newsletterEmailLabel: "عنوان البريد الإلكتروني للنشرة",
10911096
newsletterButton: "أبلغني",
10921097
newsletterThanks: "شكراً! سنبقيك على اطلاع.",
10931098
newsletterDisclaimer: "مرة واحدة أسبوعياً كحد أقصى. إلغاء الاشتراك في أي وقت — جهة الاتصال في بيان الناشر.",
@@ -1317,6 +1322,7 @@ const translations = {
13171322
// Newsletter
13181323
newsletterText: "Хочете дізнатися, коли з'являться нові функції?",
13191324
newsletterPlaceholder: "ваш@email.com",
1325+
newsletterEmailLabel: "Email-адреса для розсилки",
13201326
newsletterButton: "Повідомити мене",
13211327
newsletterThanks: "Дякуємо! Ми будемо тримати вас в курсі.",
13221328
newsletterDisclaimer: "Максимум раз на тиждень. Відписатися можна будь-коли — контакт у вихідних даних.",

src/index.html

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -121,9 +121,9 @@
121121
</button>
122122
<a href="#" class="header-level-pill" id="header-level-pill"></a>
123123
</div>
124-
<a href="#" id="logo-link" class="logo">
125-
<img src="/bowl.png" width="40" alt="CODE CRISPIES Logo" decoding="async" />
126-
<h1><span class="code-text">CODE</span><span class="crispies-text">CRISPIES</span></h1>
124+
<a href="#" id="logo-link" class="logo" aria-label="Code Crispies — home">
125+
<img src="/bowl.png" width="40" alt="" decoding="async" />
126+
<p class="logo-text"><span class="code-text">CODE</span><span class="crispies-text">CRISPIES</span></p>
127127
</a>
128128
<div class="header-actions">
129129
<nav class="main-nav" id="main-nav" aria-label="Main sections">
@@ -281,7 +281,8 @@ <h3 data-i18n="comingSoonChallengesTitle">Code Challenges</h3>
281281
<div class="newsletter-signup">
282282
<p data-i18n="newsletterText">Want to know when new features launch?</p>
283283
<form id="newsletter-form" class="newsletter-form">
284-
<input type="email" id="newsletter-email" required data-i18n-placeholder="newsletterPlaceholder" placeholder="your@email.com">
284+
<label for="newsletter-email" class="visually-hidden" data-i18n="newsletterEmailLabel">Email address for newsletter</label>
285+
<input type="email" id="newsletter-email" required data-i18n-placeholder="newsletterPlaceholder" placeholder="your@email.com">
285286
<button type="submit" class="btn btn-outline" data-i18n="newsletterButton">Notify Me</button>
286287
</form>
287288
<p class="newsletter-disclaimer" data-i18n="newsletterDisclaimer">Max once a week. Unsubscribe anytime — see Imprint for contact.</p>
@@ -840,7 +841,7 @@ <h3 data-i18n="shareDialogTitle">Share Lesson</h3>
840841
<div class="dialog-content">
841842
<p id="share-lesson-label" class="share-lesson-label"></p>
842843
<div class="share-url-container">
843-
<input type="text" id="share-url-input" class="share-url-input" readonly />
844+
<input type="text" id="share-url-input" class="share-url-input" readonly aria-label="Lesson share URL" />
844845
<button id="copy-url-btn" class="btn btn-primary" data-i18n="copyUrl">Copy</button>
845846
</div>
846847
<p id="copy-feedback" class="copy-feedback" role="status" aria-live="polite" data-i18n="urlCopied" hidden>URL copied to clipboard!</p>

src/main.css

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -354,21 +354,36 @@ kbd {
354354
cursor: pointer;
355355
}
356356

357-
.logo h1 {
357+
.logo .logo-text {
358358
font-size: 1rem;
359359
font-weight: 800;
360360
color: var(--text-color);
361361
line-height: 1;
362362
display: flex;
363363
align-items: center;
364364
gap: 0.15rem;
365+
margin: 0;
366+
}
367+
368+
/* Visually-hidden labels — invisible to sighted users, exposed to screen
369+
readers. Used for inputs that have a placeholder but no visible label. */
370+
.visually-hidden {
371+
position: absolute;
372+
width: 1px;
373+
height: 1px;
374+
padding: 0;
375+
margin: -1px;
376+
overflow: hidden;
377+
clip: rect(0, 0, 0, 0);
378+
white-space: nowrap;
379+
border: 0;
365380
}
366381

367-
.logo h1 .code-text {
382+
.logo .logo-text .code-text {
368383
color: #9163b8;
369384
}
370385

371-
.logo h1 .crispies-text {
386+
.logo .logo-text .crispies-text {
372387
background: #9163b8;
373388
color: white;
374389
padding: 0.15rem 0.35rem;
@@ -3550,7 +3565,7 @@ input:checked + .toggle-slider::before {
35503565
}
35513566

35523567
@media (max-width: 480px) {
3553-
.logo h1 {
3568+
.logo .logo-text {
35543569
font-size: 0.9rem;
35553570
}
35563571

0 commit comments

Comments
 (0)