Learn HTML and CSS: Focus, contrast and labels
Accessible
Rosa comes to the repair café too. Her eyesight is poor and she doesn't use a mouse, but works with the keyboard and a screen reader. Walter wants her to sign up just as easily as anyone else.
For everyone
Whoever works with the keyboard jumps from field to field with Tab and has to see where they are: the focus. Never take that ring away without putting something in its place. With :focus-visible you give a clear ring that only appears when someone works with the keyboard.
Contrast: text has to differ enough from its background. The guideline for ordinary text is a ratio of at least 4.5 to 1. Light grey on white doesn't make it.
And every field gets a label, as in lesson 6. Tap a field in the page: the yellow ring shows where you are.
input:focus-visible,button:focus-visible { outline: 3px solid #ffd166; outline-offset: 2px;}Try it yourself
Give the fields and the button a yellow ring on keyboard focus, outline: 3px solid #ffd166, with outline-offset: 2px. Without focus there's no ring.
/* Your CSS goes here. */<link rel="stylesheet" href="style.css"><main> <form> <label for="name">Name</label> <input id="name" type="text"> <label for="email">Email</label> <input id="email" type="email"> <button>Sign up</button> </form></main>body { margin: 0; font-family: system-ui, sans-serif; background: #f4f0e8; color: #2a2622;}header { padding: 12px 16px; background: #1f4e5f; color: #ffffff;}header h1 { margin: 0; font-size: 1.5rem;}nav a { padding: 6px 10px; border-radius: 999px; color: #ffffff; text-decoration: none;}main { padding: 0 16px 24px;}.slogan { margin: 16px 0 0; max-width: 40rem;}.benches { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 12px; margin: 16px 0;}.button { display: inline-block; margin-top: 12px; padding: 10px 18px; border-radius: 999px; background: #d1495b; color: #ffffff; font-weight: 700; text-decoration: none;}/* A coloured edge per bench and a tag with a hole: only for the look. */.bench { padding: 14px 16px 16px; border-top: 4px solid #f2a541; border-radius: 14px; background: #ffffff; box-shadow: 0 1px 2px rgb(42 38 34 / 0.08), 0 8px 18px -12px rgb(42 38 34 / 0.35);}.bench h2 { margin: 0 0 6px; font-size: 1.1rem;}.bench p { margin: 0; color: #5b544c;}.bike { border-top-color: #2a9d8f;}.electrics { border-top-color: #f2a541;}.sewing { border-top-color: #d1495b;}.computer { border-top-color: #5b6cae;}.tag { display: inline-block; margin-bottom: 8px; padding: 3px 10px 3px 16px; border-radius: 4px 999px 999px 4px; background: radial-gradient(circle at 7px 50%, #ffffff 0 2.5px, transparent 3px), #ffd166; color: #3d2c00; font-size: 0.75rem; font-weight: 700;}form { display: grid; gap: 6px; max-width: 28rem; margin: 16px 0;}label { margin-top: 8px; font-weight: 600;}input,select,textarea { padding: 8px 10px; border: 1px solid #b9b0a3; border-radius: 8px; background: #ffffff; color: #2a2622; font: inherit;}button { justify-self: start; margin-top: 12px; padding: 10px 18px; border: 0; border-radius: 999px; background: #1f4e5f; color: #ffffff; font: inherit; font-weight: 700;}footer { padding: 12px 16px; background: #1f4e5f; color: #ffffff;}Ready for more?
The full lesson has 5 exercises, from easy to challenging, with hints, points and a streak you can build.
Start the lesson