30 Common CSS Mistakes

30 CSS common mistakes we make includes: complicating selectors,Overuse of the “!important” declaration, Mishandling the z-index property, Duplicating code, Relying solely on color names and more

Algogenz logo

6m · 8min read

CSS (Cascading Style Sheets) is a fundamental technology for styling web pages, enabling developers to control the layout and appearance of HTML documents. Despite its simplicity, developers often encounter challenges that can lead to inefficient, inaccessible, or broken designs. These challenges stem from a variety of common mistakes, including:


1. Using Inline Styles Instead of External Stylesheets

Mistake

<p style="color: red;">This is a paragraph.</p>

Corrected Version

<link rel="stylesheet" href="styles.css">

/* styles.css */
p {
 color: red;
}

Explanation: Inline styles are not recommended because they mix content with presentation, making the code harder to maintain and reuse. External stylesheets separate the styling from the HTML, making the code cleaner and more manageable.


2. Not Using Semantic HTML Elements

Mistake

<div class="header">Header</div>

Corrected Version

<header>Header</header>

Explanation: Semantic HTML elements like <header> provide meaning to the structure of the document, improving accessibility and SEO. Using generic <div> elements without semantic meaning can lead to a less accessible and less SEO-friendly website.


3. Overusing !important

Mistake

p {
 color: blue !important;
}

Corrected Version

.important-text {
 color: blue;
}

Explanation: Overusing !important can make debugging CSS difficult and can lead to specificity wars. It's better to rely on the natural cascading of CSS and use more specific selectors to apply styles.


4. Using IDs for Styling

Mistake

#unique-id {
 color: green;
}

Corrected Version

.unique-class {
 color: green;
}

Explanation: IDs should be used for unique elements, not for styling. Using classes for styling allows for reusability and keeps the CSS more maintainable.


5. Complicating Selectors

Mistake

.searchBox div.inputBox {
    width: 100%;
}

Corrected Version

.inputBox {
    width: 100%;
}

Explanation: Overly specific selectors can make your CSS harder to maintain and understand. Using class selectors without unnecessary specificity (like div.inputBox) can lead to brittle code that's tightly coupled to the HTML structure. Instead, use class selectors directly for simplicity and maintainability.


6. Using Pixels Instead of Relative Units

Mistake

font-size: 16px;

Corrected Version

font-size: 1rem;

Explanation: Using relative units like rem instead of absolute units like px makes the design more flexible and accessible. It allows users to adjust the font size in their browser settings, improving accessibility.


7. Neglecting CSS Variables

Mistake

body {
 background-color: #f0f0f0;
}

Corrected Version

:root {
 --main-bg-color: #f0f0f0;
}

body {
 background-color: var(--main-bg-color);
}

Explanation: CSS variables make the code more maintainable and easier to update. They allow you to define a value once and reuse it throughout the stylesheet, making it simpler to change the design later.


8. Not Using Media Queries for Responsive Design

Mistake

.container {
 width: 100%;
}

Corrected Version

@media (max-width: 600px) {
 .container {
    width: 100%;
 }
}

Explanation: Media queries are essential for creating responsive designs that adapt to different screen sizes. Without them, the layout may not look good on all devices.


9. Not Using CSS Grid or Flexbox for Layout

Mistake

.container {
 display: block;
}

Corrected Version

.container {
 display: flex;
}

Explanation: CSS Grid and Flexbox are powerful layout systems that allow for more complex and flexible designs than traditional layout methods. They make it easier to create responsive designs without relying on floats or positioning.


10. Not Using Pseudo-classes for Interactive States

Mistake

a {
 color: blue;
}

Corrected Version

a:hover {
 color: red;
}

Explanation: Pseudo-classes like :hover allow you to style elements in different states, enhancing the user experience by providing visual feedback. Without them, interactive elements may not be as intuitive.


11. Not Using box-sizing: border-box;

Mistake

.box {
 width: 100px;
 padding: 10px;
}

Corrected Version

.box {
 box-sizing: border-box;
 width: 100px;
 padding: 10px;
}

Explanation: box-sizing: border-box; changes the box model so that padding and border are included in the element's total width and height. This makes layout calculations more predictable and consistent.


12. Not Using z-index for Stacking Context

Mistake

.overlay {
 position: absolute;
}

Corrected Version

.overlay {
 position: absolute;
 z-index: 10;
}

Explanation: z-index controls the stacking order of elements. Without it, elements with a higher position value may not appear as expected, leading to layout issues.


13. Not Using alt Attributes for Images

Mistake

<img src="image.jpg">

Corrected Version

<img src="image.jpg" alt="Description of the image">

Explanation: The alt attribute provides alternative text for images, improving accessibility for users who cannot see the images. It also helps with SEO and provides a fallback for when the image cannot be loaded.


14. Not Using rel="noopener" for External Links

Mistake

<a href="https://external-site.com">External Site</a>

Corrected Version

<a href="https://external-site.com" rel="noopener">External Site</a>

Explanation: rel="noopener" prevents the new page from having access to the window.opener property, enhancing security and performance when linking to external sites.


15. Not Using aria-label for Accessibility

Mistake

<button>Click me</button>

Corrected Version

<button aria-label="Close modal">X</button>

Explanation: aria-label provides accessible names for elements that do not have visible text, improving accessibility for users with screen readers.


16. Not Using figure and figcaption for Images with Captions

Mistake

<img src="image.jpg" alt="Description">
<p>Caption for the image</p>

Corrected Version

<figure>
 <img src="image.jpg" alt="Description">
 <figcaption>Caption for the image</figcaption>
</figure>

Explanation: Using figure and figcaption elements semantically groups an image with its caption, improving accessibility and making the structure of the content clearer.


17. Neglecting to use label for Form Inputs

Mistake

<form>
  <input type="text" id="name">
  <span>Name</span>
</form>

Corrected Version

<form>
  <label for="name">Name</label>
  <input type="text" id="name">
</form>

Explanation: The label element improves accessibility by allowing users to click on the label to focus the associated input. It also enhances usability by providing a larger clickable area for the input.


18. Not Using role Attributes for Accessibility

Mistake

<div>Navigation</div>

Corrected Version

<nav role="navigation">Navigation</nav>

Explanation: role attributes provide additional semantic information about an element, improving accessibility by making the structure and purpose of the content clearer to assistive technologies.


19. Not Using lang Attribute for Multilingual Content

Mistake

<html>

Corrected Version

<html lang="en">

Explanation: The lang attribute specifies the language of the content, improving accessibility and SEO by helping search engines and screen readers understand the content better.


20. Ignoring meta Tags for SEO

Mistake

<head>
 <title>Page Title</title>
</head>

Corrected Version

<head>
 <title>Page Title</title>
 <meta name="description" content="Description of the page">
 <meta name="keywords" content="keyword1, keyword2">
</head>

Explanation: meta tags provide metadata about the webpage, improving SEO by helping search engines understand the content and relevance of the page.


21. Not Using a Proper CSS Reset

Mistake

/* No CSS reset applied */
body {
    font-family: Arial, sans-serif;
}

Corrected Version

/* CSS reset applied */
* {
    margin: 0;
    padding: 0;
    box-sizing: border-box;
}

body {
    font-family: Arial, sans-serif;
}

Explanation: Browsers apply default styles to HTML elements, leading to inconsistencies across different browsers. A CSS reset sets all the styles of all HTML elements to a predictable baseline value, ensuring that your styles are effective across all browsers. This provides a consistent starting point for styling your website.


22. Not Organizing Your CSS in a Logical Way

Mistake

/* Styles scattered without organization */
.header {
    background-color: #333;
}

.footer {
    background-color: #333;
}

.main-content {
    background-color: #fff;
}

Corrected Version

/* Styles organized by section */
/* Header */
.header {
    background-color: #333;
}

/* Main Content */
.main-content {
    background-color: #fff;
}

/* Footer */
.footer {
    background-color: #333;
}

Explanation: Organizing your CSS code logically, such as by section or component, makes it easier to navigate and maintain. This approach helps prevent confusion and ensures that styles are applied as intended.


23. Redundant Selectors

Mistake

.button {
    background-color: blue;
}

.button {
    color: white;
}

Corrected Version

.button {
    background-color: blue;
    color: white;
}

Explanation: Redundant selectors can lead to unnecessary repetition and confusion. It's important to consolidate styles for the same selector to keep the CSS clean and efficient. Tools like CSS optimizers can help identify and merge redundant selectors.


24. Not Using Shorthand Properties

Mistake

.selector {
    margin-top: 50px;
    margin-right: 0;
    margin-bottom: 50px;
    margin-left: 0;
}

Corrected Version

.selector {
    margin: 50px 0;
}

Explanation: Using shorthand properties reduces code redundancy and improves readability. Shorthand properties allow you to specify multiple related styles in a single line, making your CSS more concise and easier to maintain.


25. Unnecessary Whitespace

Mistake

body {
    margin: 0;
    padding: 0;
}

Corrected Version

body{margin:0;padding:0;}

Explanation: Unnecessary whitespace in CSS files can increase file size, affecting page load times. Minification removes unnecessary characters, including whitespace, to optimize performance. It's a good practice to minify CSS files before deploying them to production.


26. Using Color Names Instead of Hexadecimal

Mistake

body {
    background-color: red;
}

Corrected Version

body {
    background-color: #FF0000;
}

Explanation: Using color names can lead to inconsistencies across browsers, as different browsers may interpret the same color name differently. Using hexadecimal color codes ensures consistency and predictability across all browsers.


27. Using Only One Stylesheet for Everything

Mistake

<link rel="stylesheet" href="styles.css">

Corrected Version

<link rel="stylesheet" href="reset.css">
<link rel="stylesheet" href="typography.css">
<link rel="stylesheet" href="layout.css">

Explanation: Splitting stylesheets into multiple files based on their purpose (e.g., reset, typography, layout) improves maintainability and modularity. This approach makes it easier to manage and update styles, especially for large projects.


28. Misuse of z-index

Mistake

.element1 {
    z-index: 1000000000;
}

.element2 {
    z-index: 233040202;
}

Corrected Version

.element1 {
    z-index: 1;
}

.element2 {
    z-index: 2;
}

Explanation: Using extremely high z-index values can lead to confusion and maintenance issues. It's generally recommended to keep z-index values as low as possible and only use them when necessary. High z-index values can also lead to stacking context issues, making it difficult to predict how elements will stack relative to each other. Instead, use z-index values that are just high enough to achieve the desired stacking order, keeping them as low as possible to avoid potential issues.


29. Misusing Floats

Mistake:

.float-left {
     float: left; 
 } 
    
.float-right { 
    float: left; 
}

Correction:

.float-left {
     float: left; 
 } 
    
.float-right { 
    float: right; 
}

Explanation: Misusing floats can lead to unexpected layout issues. Be sure to use the correct value for each situation.


30. Ignoring Vendor Prefixes

Mistake

div {
    border-radius: 5px;
}

Corrected Version

div {
    border-radius: 5px;
    -webkit-border-radius: 5px;
    -moz-border-radius: 5px;
}

Explanation: Vendor prefixes ensure compatibility with older browsers that require special CSS properties. They allow developers to adopt new CSS features gradually, providing a safe space for testing and experimentation. By using vendor prefixes, you can assess the viability of a particular CSS property or feature in your project without committing to a non-standardized solution. This is particularly useful when you want to fine-tune the appearance of your website or web application, ensuring that even outdated browsers can render your styles correctly


Conclusion

By avoiding these common CSS mistakes, developers can create more efficient, accessible, and responsive web designs. Understanding and applying best practices in CSS not only enhances the user experience but also streamlines the development process.

Related Tags

Recommended

TypeScript Types vs Interfaces

4m · 5min read

Web Development

TypeScript Types vs Interfaces

Types vs Interfaces: Types in TypeScript are more flexible and can define a wider range of data types, including primitives, unions, intersections, tuples, and more, while interfaces are primarily used to describe the shape of objects and support declaration merging and extending, making them ideal for object-oriented programming and complex data structures

The this Keyword in JavaScript

5m · 3min read

Web Development

The this Keyword in JavaScript

The this keyword in JavaScript is a reference to the object that a function is a property of. It's a fundamental concept in JavaScript, especially in object-oriented programming. Unlike in languages like Java, C#, or PHP, where this typically refers to the current instance of the class, JavaScript's this behaves differently and can be quite versatile.

Next pages: