Skip to content
Styling HTML Elements — Complete Guide with CSS

Styling HTML Elements — Complete Guide with CSS

DodaTech Updated Jun 6, 2026 10 min read

Every HTML element — links, lists, tables, forms, buttons, images, and icons — can be styled with CSS to look polished and professional. This tutorial teaches you the specific properties and pseudo-classes for each one.

What You’ll Learn

By the end, you’ll style links (including :link, :visited, :hover, :active in LVHA order), format tables with border-collapse and zebra-striped rows, style form inputs including :focus and :invalid states, build button variants (primary, secondary, danger, sizes), create responsive images with hover overlays, and use Font Awesome, Bootstrap Icons, or inline SVGs for icons.

Prerequisite: You should understand CSS selectors and the box model. CSS Selectors and CSS Box Model cover what you need.

Where This Fits

    flowchart LR
    A["CSS Box Model"] --> B["CSS Flexbox & Grid"]
    B --> C["**Styling Elements**"]
    C --> D["CSS Components"]
    D --> E["Frontend-Ready Developer"]
    style C fill:#f97316,stroke:#c2410c,color:#fff
    style A fill:#e5e7eb,stroke:#9ca3af,color:#374151
    style E fill:#22c55e,stroke:#16a34a,color:#fff
  

Styling Links

Links have four states, styled with pseudo-classes. The order matters — known as LVHA (Link, Visited, Hover, Active):

a {
  color: #3498db;
  text-decoration: none;
  transition: color 0.2s;
}

a:visited { color: #8e44ad; }
a:hover   { color: #2980b9; text-decoration: underline; }
a:active  { color: #e74c3c; }
Pseudo-classWhen It Applies
:linkUnvisited link (default a selector)
:visitedUser has clicked this link before
:hoverMouse is over the link
:activeLink is being clicked

Why LVHA order? If you put :hover after :active, hover would override active when clicking. The mnemonic “LoVe HAte” helps remember: Link, Visited, Hover, Active.

Link as a Button

.button-link {
  display: inline-block;
  padding: 10px 20px;
  background: #3498db;
  color: white;
  border-radius: 8px;
  text-decoration: none;
  transition: background 0.2s;
}
.button-link:hover { background: #2980b9; text-decoration: none; }

Use case: Call-to-action buttons that look like buttons but navigate like links (no form submit).


Styling Lists

Remove default bullets and add custom styling:

/* Full removal */
.no-bullets {
  list-style: none;
  padding-left: 0;
}

/* Custom style with icons */
.fancy-list {
  list-style: none;
  padding: 0;
}
.fancy-list li {
  padding: 8px 12px;
  border-bottom: 1px solid #e2e8f0;
}
.fancy-list li:last-child { border-bottom: none; }
.fancy-list li::before {
  content: "→ ";
  color: #3498db;
}

List Properties

PropertyValues
list-style-typedisc, circle, square, decimal, lower-alpha, upper-roman, none
list-style-positionoutside (default), inside
list-style-imageurl('icon.svg') — image as bullet

Styling Tables

Tables need a few adjustments to look modern:

table {
  width: 100%;
  border-collapse: collapse;   /* Remove double borders */
}

th, td {
  padding: 12px 16px;
  text-align: left;
  border-bottom: 1px solid #e2e8f0;
}

th {
  background: #f8f9fa;
  font-weight: 600;
}

/* Zebra stripes */
tr:nth-child(even) { background: #f8f9fa; }

/* Hover highlight */
tr:hover { background: #e8f4fd; }

border-collapse: collapse explained: Without it, each cell has its own border and adjacent cells create double-thick borders. collapse merges them into single borders, giving a cleaner look.

Responsive Tables

.table-wrapper {
  overflow-x: auto;  /* Horizontal scroll on small screens */
}

Wrap your <table> in <div class="table-wrapper"> and it scrolls horizontally on narrow phones.


Styling Forms

Input Fields

input[type="text"],
input[type="email"],
input[type="password"],
textarea,
select {
  width: 100%;
  padding: 10px 14px;
  border: 1px solid #d1d5db;
  border-radius: 8px;
  font-size: 1rem;
  transition: border-color 0.2s, box-shadow 0.2s;
}

Focus State — Never Remove outline Without a Replacement

input:focus,
textarea:focus,
select:focus {
  outline: none;
  border-color: #3498db;
  box-shadow: 0 0 0 3px rgba(52,152,219,0.15);
}

Important: Never just do outline: none. That removes the focus indicator for keyboard users. Always replace it with another visible focus style (like the blue border + shadow above).

Validation States

input:invalid { border-color: #e74c3c; }      /* Red border on invalid */
input:disabled { background: #f1f5f9; cursor: not-allowed; }

Checkboxes and Radio Buttons

input[type="checkbox"],
input[type="radio"] {
  accent-color: #3498db;  /* Modern: change the check color */
}

Form Group Pattern

.form-group {
  margin-bottom: 1rem;
}
.form-group label {
  display: block;
  font-weight: 500;
  margin-bottom: 4px;
  color: #374151;
}

Why display: block on labels? Without it, the label sits inline beside the input. Block makes it sit above, which is standard for vertical forms.


Styling Buttons

Button Base

.btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  padding: 10px 24px;
  border: none;
  border-radius: 8px;
  font-size: 1rem;
  font-weight: 500;
  cursor: pointer;
  transition: all 0.2s ease;
}

Variants

.btn-primary   { background: #3498db; color: white; }
.btn-primary:hover   { background: #2980b9; }

.btn-secondary { background: #e2e8f0; color: #1a202c; }
.btn-secondary:hover { background: #cbd5e0; }

.btn-danger    { background: #e74c3c; color: white; }
.btn-danger:hover    { background: #c0392b; }

/* Sizes */
.btn-sm { padding: 6px 14px; font-size: 0.875rem; }
.btn-lg { padding: 14px 32px; font-size: 1.125rem; }

Button Group

.btn-group { display: flex; gap: 0; }
.btn-group .btn { border-radius: 0; border-right: 1px solid rgba(0,0,0,0.1); }
.btn-group .btn:first-child { border-radius: 8px 0 0 8px; }
.btn-group .btn:last-child  { border-radius: 0 8px 8px 0; border-right: none; }

Styling Images

Base — Always Include This

img {
  max-width: 100%;
  height: auto;
}

This prevents images from overflowing their container on small screens.

Image Shapes

.rounded { border-radius: 12px; }
.circle  { border-radius: 50%; aspect-ratio: 1; object-fit: cover; }
.bordered { border: 2px solid #e2e8f0; padding: 4px; }

Hover Overlay Effect

.image-container {
  position: relative;
  display: inline-block;
  overflow: hidden;
  border-radius: 12px;
}

.image-container img {
  display: block;
  transition: transform 0.3s;
}
.image-container:hover img {
  transform: scale(1.05);
}

.image-container::after {
  content: "";
  position: absolute;
  inset: 0;
  background: rgba(0,0,0,0);
  transition: background 0.3s;
}
.image-container:hover::after {
  background: rgba(0,0,0,0.2);
}

Use case: Gallery images that zoom slightly and darken on hover — common in portfolios and product pages.


Adding Icons

Font Awesome

<!-- Add to <head> -->
<link rel="stylesheet"
  href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.0/css/all.min.css">

<!-- Usage -->
<i class="fas fa-star"></i>
<i class="fas fa-heart" style="color: #e74c3c;"></i>
.fa-star { color: #f39c12; font-size: 1.5rem; }

Bootstrap Icons

<link rel="stylesheet"
  href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.0/font/bootstrap-icons.css">
<i class="bi bi-check-circle"></i>

Inline SVG (No External Dependency)

<svg viewBox="0 0 24 24" width="24" height="24"
     fill="none" stroke="currentColor" stroke-width="2">
  <circle cx="12" cy="12" r="10"/>
  <path d="M12 8v4M12 16h.01"/>
</svg>

Tip: Inline SVGs are preferred for performance and accessibility — they don’t require an HTTP request and can be styled with CSS.


Common Styling Mistakes

1. Forgetting the LVHA Order for Links

/* ❌ Wrong: hover won't work for visited links */
a:visited { color: purple; }
a { color: blue; }

2. Removing outline Without a Replacement

/* ❌ Breaks keyboard accessibility */
input:focus { outline: none; }

/* ✅ Visible alternative */
input:focus { outline: none; box-shadow: 0 0 0 3px blue; }

3. Not Using border-collapse on Tables

/* ❌ Double borders between cells */
table {  }

/* ✅ Clean single borders */
table { border-collapse: collapse; }

4. Styling Buttons Without cursor: pointer

/* ❌ No cursor change — looks like text */
.btn { }

/* ✅ Pointer cursor signals clickability */
.btn { cursor: pointer; }

5. Using <br> for Form Spacing Instead of CSS

/* ❌ Wrong: markup for spacing */
<input><br><input><br>

/* ✅ Correct: CSS for spacing */
.form-group { margin-bottom: 1rem; }

Security Angle — Form Styling for Phishing Resistance

Well-styled forms with clear visual states (green valid, red invalid, blue focus) help users distinguish legitimate forms from phishing attempts. Security tools like Doda Browser use these visual cues to warn users when a form field looks suspicious or when a connection is untrusted.


Try It Yourself

Experiment with all the element styles:

▶ Try It Yourself Edit the code and click Run

Common Mistakes Beginners Make

1. Skipping the Fundamentals

Many beginners jump straight to advanced topics without mastering the basics. Take time to understand the core concepts before moving on.

2. Not Practicing Enough

Reading tutorials without writing code leads to shallow understanding. Code along with every example and experiment on your own.

3. Ignoring Error Messages

Error messages tell you exactly what went wrong. Read them carefully — they usually point to the line and type of issue.

4. Copy-Pasting Without Understanding

It’s tempting to copy code from tutorials, but typing it yourself and understanding each line builds real skill.

5. Giving Up Too Early

Every developer hits frustrating bugs. Take breaks, ask for help, and remember that struggling is part of learning.

Practice Questions

Q1: What’s the LVHA order and why does it matter?

LVHA = Link, Visited, Hover, Active. The order prevents hover from overriding active when a link is being clicked. Use the mnemonic “LoVe HAte”.

Q2: Why should you never remove outline without a replacement?

The outline is the focus indicator for keyboard users. Removing it without adding an alternative (like a box-shadow) makes your site inaccessible to people who navigate without a mouse.

Q3: What does border-collapse: collapse do on a table?

It merges adjacent cell borders into single borders instead of double borders, giving tables a cleaner appearance.

Q4: How do you make all images responsive by default?

Set max-width: 100% and height: auto on all img elements. Images never overflow their container and maintain aspect ratio.

Q5: What’s the advantage of inline SVG over icon fonts?

Inline SVGs don’t require HTTP requests (faster), can be styled with CSS properties, and are more accessible. They’re also sharper at any resolution.

Challenge

Build a profile card component:

  • User avatar (circular image)
  • Name, role, and bio
  • Styled links for GitHub, Twitter, website
  • A “Follow” button with hover state
  • Icons next to each link using Font Awesome or inline SVGs
  • Full-width on mobile, 400px max on desktop

FAQ

How do I style visited links differently from unvisited ones?

Use :visited pseudo-class. Note that for privacy reasons, browsers limit which properties you can change on visited links (only color, background-color, etc.).

How do I create a responsive table?

Wrap the <table> in a <div style="overflow-x: auto;">. On small screens, the table scrolls horizontally instead of squishing.

Can I use CSS to validate forms?

Yes. input:valid and input:invalid pseudo-classes let you style valid/invalid states. But actual validation still needs HTML attributes (required, type="email") or JavaScript.

Should I use <button> or <a> for call-to-action?

Use <button> if it performs an action (submit, toggle). Use <a> if it navigates. Style them to look the same with CSS.

Why isn’t my :hover working on touch devices?

Touch devices don’t have hover — the first tap acts as hover, the second as click. Use @media (hover: hover) to apply hover styles only on devices that support it.


FAQ

{< faq >}

What is Css Styling?
Css Styling refers to the core concepts and practices used to build and manage modern web applications. Understanding it is essential for web developers.
Do I need prior experience to learn Css Styling?
Basic familiarity with web development concepts helps, but Css Styling can be learned step by step even as a beginner.
How long does it take to learn Css Styling?
With consistent practice, you can grasp the fundamentals in a few days to a week. Mastery takes ongoing practice and real-world projects.
Where can I use Css Styling in real projects?
Css Styling is used in a wide range of applications — from simple websites to complex enterprise systems, depending on the specific tools and technologies involved.
What are common tools used with Css Styling?
The specific tools depend on the technology stack, but version control (Git), package managers, and testing frameworks are commonly used alongside most development topics.

{< /faq >}

FAQ

What is Styling in CSS?
: Styling refers to the CSS properties and techniques used to control how elements are displayed on a webpage. Mastering it helps you build better, more responsive layouts.
Do I need to memorize all CSS properties?
: No. Focus on understanding the core concepts and use reference docs when needed. Practice is more important than memorization.
How do I debug Styling issues?
: Use browser DevTools (F12) to inspect elements, check computed styles, and experiment with values in real time.
Is Styling the same across all browsers?
: Most modern browsers support CSS standards consistently, but always test across browsers for edge cases.
What’s the best way to practice Styling?
: Build small projects and experiment with different values. Use online playgrounds like CodePen or JSFiddle for quick testing.

What’s Next?

Now that you can style individual elements, learn to build reusable components:

What’s Next

Congratulations on completing this Css Styling tutorial! Here’s where to go from here:

  • Practice daily — Consistency is more important than long study sessions
  • Build a project — Apply what you learned by building something real
  • Explore related topics — Check out other tutorials in the same category
  • Join the community — Discuss with other learners and share your progress

Remember: every expert was once a beginner. Keep coding!

Built by the developers of DodaTech

Doda Browser, DodaZIP & Durga Antivirus Pro