Learn HTML and CSS: The viewport meta and mobile first
Mobile first
Walter opens the website on his phone: everything is tiny, as if he's reading a newspaper from a metre away. One line of HTML fixes that, and a different way of thinking does the rest.
The viewport
Without help, a phone pretends to be a computer screen about 980px wide, and then shrinks everything. The line <meta name="viewport" content="width=device-width, initial-scale=1"> in the <head> says: use the real width of the device, without zooming. Every site that has to work on a phone has it.
Mobile first means: you write the CSS for a narrow screen first, and then add what a wide screen gets on top. The narrow screen is the base, the wide one the exception. Lesson 4 shows how you write that exception.
Here you see the page as a 375px wide phone shows it, with the viewport line in the <head>.
<!DOCTYPE html><html lang="en"><head> <title>Broken? Not Today!</title> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="stylesheet" href="basis.css"> <link rel="stylesheet" href="style.css"></head><body> <header> <img src="sleutel.svg" alt="" width="40" height="40"> <h1>Broken? Not Today!</h1> </header> <main> <p class="slogan">Bring your broken things: we fix them together.</p> <a class="button" href="sign-up.html">Sign up your device</a> </main></body></html>Try it yourself
Put the viewport line in the <head> of the page.
<!DOCTYPE html><html lang="en"><head> <title>Broken? Not Today!</title> <link rel="stylesheet" href="style.css"></head><body> <header> <h1>Broken? Not Today!</h1> </header> <main> <p class="slogan">Bring your broken things: we fix them together.</p> </main></body></html>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 4 exercises, from easy to challenging, with hints, points and a streak you can build.
Start the lesson