Search

Exploring CSS ::marker Pseudo-Element

The ::marker pseudo-element is a feature in CSS that enables you to style the markers of list items. Whether you want to customize the appearance of bullets in an unordered list or the numbering in an ordered list, ::marker gives you the flexibility to enhance the visual appeal of your lists.

Basic Usage

The basic syntax for using ::marker is as follows:


ul li::marker {
/* Your styling properties here */
}

ol li::marker {
/* Your styling properties here */
}

Example 1: Customizing Bullets in an Unordered List

Let’s say you want to change the look  of bullets in an unordered list. Here’s how you can achieve that.

<ul>
    <li>Item 1</li>
    <li>Item 2</li>
    <li>Item 3</li>
  </ul>
ul {
  list-style: none;
  font-size: 1.2rem;
  font-family: 'Noto Sans Hebrew', sans-serif;
}
li {
  padding-left: 7px;
}
li::marker {
  content: "🔹";
  color: blue;
}

In this example, the marker content is set to a blue diamond emoji using the content property, and the color is set to blue. This creates a custom marker for each list item.

Here’s how it looks:

See the Pen
The Use of ::marker psuedo element
by Roee Yossef (@roeey)
on CodePen.

Example 2: Styling Numbers in an Ordered List

Suppose you want to make the numbers in an ordered list appear as bold and red:

<ol>
    <li>Item 1</li>
    <li>Item 2</li>
    <li>Item 3</li>
</ol>
li::marker {
    font-weight: bold;
    color: red;
}

Here’s the result:

See the Pen
Untitled
by Roee Yossef (@roeey)
on CodePen.

Example 3: Advanced ::marker Example

In this advanced example, a dynamic task list is created with custom markers to represent the progress status of each task.

The list items, styled using the li selector, are displayed as flex containers to align the marker and task text. The ::before pseudo-element is employed to generate a custom bullet point for each list item.

The markers are initially styled with a neutral color and size, and their appearance dynamically changes based on the completion status of the corresponding task. JavaScript is integrated to toggle the completion status when a task item is clicked.

Additionally, a hover effect is implemented to visually enhance the markers by scaling them when the user hovers over a task. This example aims to showcase a more interactive and visually engaging approach to styling list items with a focus on the dynamic manipulation of the markers using both CSS and JavaScript.

HTML:

<ul>
    <li class="completed"><span>Task 1: Completed</span></li>
    <li class="in-progress"><span>Task 2: In Progress</span></li>
    <li><span>Task 3: Incomplete</span></li>
</ul>

CSS:

ul {
    list-style: none;
    padding: 0;
    font-family: 'Noto Sans Hebrew', sans-serif;
    font-size: 1.2rem;
}

li {
    margin-bottom: 10px;
    display: flex;
    align-items: center;
    cursor: pointer;
}

li::before {
    content: '•'; /* Bullet character */
    display: inline-block;
    width: 0.7em;
    font-size: 1.5em;
    color: #ddd;
    transition: transform 0.3s, color 0.3s;
}

li.completed::before {
    color: #4CAF50; /* Green color for completed tasks */
}

li.in-progress::before {
    color: #FFC107; /* Yellow color for in-progress tasks */
}

li span {
    flex-grow: 1;
}

li:hover::before {
    transform: scale(1.2);
}

JavaScript:

document.addEventListener('DOMContentLoaded', function() {
  const taskItems = document.querySelectorAll('li');

  taskItems.forEach(function(item) {
    item.addEventListener('click', function() {
      this.classList.toggle('completed');
      this.classList.toggle('in-progress');
    });
  });
});

The Result:

See the Pen
Untitled
by Roee Yossef (@roeey)
on CodePen.


Feel free to experiment with various properties such as font-family, background-color, and more to achieve the desired look for your list item markers.

The ::marker pseudo-element provides a convenient way to enhance the styling of lists and make them more visually appealing.

Roee Yossef
Roee Yossef

I develop websites & custom WordPress themes by design. I love typography, colors & everything between, and aim to provide high performance, seo optimized websites with a clean & semantic code.

0 Comments...

Leave a Comment

Quick Navigation

Up!
Blog