CSS Interview Questions

28 Questions
HTML & CSS

HTML & CSS

Web DevelopmentFrontend

Question 10

What are pseudo-elements? How do they differ from pseudo-classes?

Answer:

Pseudo-Elements

Pseudo-elements are special keywords in CSS that allow you to style specific parts of an element's content, rather than the element itself. They let you target and style sub-parts of an element, like the first line of a paragraph, the first letter, or content that is not directly in the HTML, such as before or after an element.

Commonly Used Pseudo-Elements

  1. ::before

    • Description: Inserts content before the actual content of an element.
    • Example:
      p::before {
          content: "Note: ";
          font-weight: bold;
          color: red;
      }
      • This example adds the text "Note: " before the content of every p element.
  2. ::after

    • Description: Inserts content after the actual content of an element.
    • Example:
      p::after {
          content: " [Read more]";
          font-style: italic;
          color: blue;
      }
      • This example adds "[Read more]" after the content of every p element.
  3. ::first-line

    • Description: Targets and styles only the first line of text within a block-level element.
    • Example:
      p::first-line {
          font-weight: bold;
          color: green;
      }
      • This example makes the first line of every paragraph bold and green.
  4. ::first-letter

    • Description: Targets and styles the first letter of the first line in a block-level element.
    • Example:
      p::first-letter {
          font-size: 2em;
          color: red;
      }
      • This example makes the first letter of every paragraph larger and red.
  5. ::selection

    • Description: Targets and styles the portion of an element that a user has highlighted or selected.
    • Example:
      ::selection {
          background-color: yellow;
          color: black;
      }
      • This example changes the background color of selected text to yellow and the text color to black.

How Pseudo-Elements Differ from Pseudo-Classes

Pseudo-elements and pseudo-classes are both used to style specific states or parts of elements, but they serve different purposes and have some key differences:

1. Targeting

  • Pseudo-Elements:
    • Target specific parts of an element, such as the first line, first letter, or content that doesn't exist in the HTML (::before and ::after).
  • Pseudo-Classes:
    • Target elements based on their state or position in the DOM, such as :hover (when an element is hovered), :nth-child (targeting specific children), or :focus (when an element is focused).

2. Syntax

  • Pseudo-Elements:
    • In CSS3 and later, pseudo-elements are written with a double colon (::). This differentiates them from pseudo-classes.
    • Example: ::before, ::after, ::first-line.
  • Pseudo-Classes:
    • Pseudo-classes are written with a single colon (:).
    • Example: :hover, :active, :nth-child.

Note: Before CSS3, pseudo-elements were written with a single colon, like pseudo-classes. The double colon is a newer convention, but most browsers still support the single colon syntax for backward compatibility.

3. Function

  • Pseudo-Elements:
    • Modify or create specific parts of the content within an element.
    • Example: ::before can insert content before the main content of an element.
  • Pseudo-Classes:
    • Modify the styling of an element based on its state or position.
    • Example: :hover changes the style of an element when the mouse hovers over it.

4. Multiple Use

  • Pseudo-Elements:
    • Typically, you can only apply one pseudo-element to an element at a time (e.g., you cannot use both ::before and ::first-letter on the same element).
  • Pseudo-Classes:
    • Multiple pseudo-classes can be applied to the same element (e.g., a:hover:focus).

Example of Both in Action

Here's a practical example showing both pseudo-elements and pseudo-classes:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <style>
        /* Pseudo-Class */
        a:hover {
            color: red;
        }

        /* Pseudo-Element */
        p::first-line {
            font-weight: bold;
            color: blue;
        }

        p::before {
            content: "Introduction: ";
            font-weight: bold;
            color: green;
        }
    </style>
    <title>Pseudo-Classes and Pseudo-Elements</title>
</head>
<body>
    <p>This is a paragraph. It will have a special introduction and styled first line.</p>
    <a href="#">Hover over this link to see the pseudo-class in action.</a>
</body>
</html>

Summary

  • Pseudo-Elements: Used to style specific parts of an element, such as inserting content or targeting the first letter/line.
  • Pseudo-Classes: Used to style elements based on their state or position in the document tree.

Understanding the difference between pseudo-classes and pseudo-elements allows for more precise and flexible styling in CSS.

Recent job openings