Search code examples
htmlcsspseudo-element

How to remove a before pseudo class on the first child, but not others?


In my project, using a mobile-first approach, I'm showing only the first breadcrumb (li). Initially the breadcrumb displays a ::before class with a content: '<';. Once the viewport reaches 575px, I'm showing both breadcrumbs. However, I don't want to show the ::before class on the first breadcrumb, only on the second breadcrumb and any breadcrumb placed after. In other words, all but the first.

body {
  background-color: darkblue;
}

a {
  text-decoration: none;
}

.prelative ~ .breadcrumb-section {
  z-index: 1000;
}
@media (min-width: 576px) {
  .prelative ~ .breadcrumb-section {
    padding: 1rem 0;
  }
}
.prelative ~ .breadcrumb-section ol {
  margin: 0;
  padding: 0;
}
.prelative ~ .breadcrumb-section .breadcrumb {
  position: absolute;
  top: 8%;
  display: flex;
  list-style-type: none;
  padding-left: 1rem;
  justify-content: space-between;
}
@media (min-width: 1200px) {
  .prelative ~ .breadcrumb-section .breadcrumb {
    top: 10%;
    padding: 0 2.833rem;
  }
}
.prelative ~ .breadcrumb-section .breadcrumb-item {
  color: white;
  font-weight: weight(regular);
}
.prelative ~ .breadcrumb-section .breadcrumb-item + .breadcrumb-item {
  padding-left: 2rem;
}
.prelative ~ .breadcrumb-section .breadcrumb-item + .breadcrumb-item::before {
  padding-right: 5rem;
  color: white;
}
.prelative ~ .breadcrumb-section .breadcrumb-item:not(:first-child) {
  display: none;
}
@media (min-width: 576px) {
  .prelative ~ .breadcrumb-section .breadcrumb-item:not(:first-child) {
    display: block;
  }
}
.prelative ~ .breadcrumb-section .breadcrumb-item a {
  color: #fff;
  font-weight: 700;
  display: flex;
  align-items: center;
}
.prelative ~ .breadcrumb-section .breadcrumb-item a::before {
  font-weight: 300;
  content: "<";
  display: inline-block;
  padding-right: 0.5rem;
}
@media (min-width: 576px) {
  .prelative ~ .breadcrumb-section .breadcrumb-item a::before {
    content: "/";
  }
  .prelative ~ .breadcrumb-section .breadcrumb-item a::before:first-child {
    content: "";
  }
}
.prelative ~ .breadcrumb-section .breadcrumb-item.active {
  display: none;
}
<div class="prelative"></div>
<div class="breadcrumb-section">
  <nav aria-label="Full path to the current page" class="breadcrumb-wrapper">
    <ol class="breadcrumb">
      <li class="breadcrumb-item"><a href="/police">Police</a></li>
      <li class="breadcrumb-item"><a href="/police/police-child">Police Child</a></li>
    </ol>
  </nav>
</div>


Solution

  • Are you looking for this?

    .prelative ~ .breadcrumb-section .breadcrumb-item:first-child a::before {
    

    Perhaps also set display: none, to avoid it allocating the space.

    body {
      background-color: darkblue;
    }
    
    a {
      text-decoration: none;
    }
    
    .prelative ~ .breadcrumb-section {
      z-index: 1000;
    }
    @media (min-width: 576px) {
      .prelative ~ .breadcrumb-section {
        padding: 1rem 0;
      }
    }
    .prelative ~ .breadcrumb-section ol {
      margin: 0;
      padding: 0;
    }
    .prelative ~ .breadcrumb-section .breadcrumb {
      position: absolute;
      top: 8%;
      display: flex;
      list-style-type: none;
      padding-left: 1rem;
      justify-content: space-between;
    }
    @media (min-width: 1200px) {
      .prelative ~ .breadcrumb-section .breadcrumb {
        top: 10%;
        padding: 0 2.833rem;
      }
    }
    .prelative ~ .breadcrumb-section .breadcrumb-item {
      color: white;
      font-weight: weight(regular);
    }
    .prelative ~ .breadcrumb-section .breadcrumb-item + .breadcrumb-item {
      padding-left: 2rem;
    }
    .prelative ~ .breadcrumb-section .breadcrumb-item + .breadcrumb-item::before {
      padding-right: 5rem;
      color: white;
    }
    .prelative ~ .breadcrumb-section .breadcrumb-item:not(:first-child) {
      display: none;
    }
    @media (min-width: 576px) {
      .prelative ~ .breadcrumb-section .breadcrumb-item:not(:first-child) {
        display: block;
      }
    }
    .prelative ~ .breadcrumb-section .breadcrumb-item a {
      color: #fff;
      font-weight: 700;
      display: flex;
      align-items: center;
    }
    .prelative ~ .breadcrumb-section .breadcrumb-item a::before {
      font-weight: 300;
      content: "<";
      display: inline-block;
      padding-right: 0.5rem;
    }
    @media (min-width: 576px) {
      .prelative ~ .breadcrumb-section .breadcrumb-item a::before {
        content: "/";
      }
      .prelative ~ .breadcrumb-section .breadcrumb-item:first-child a::before {
        content: "";
      }
    }
    .prelative ~ .breadcrumb-section .breadcrumb-item.active {
      display: none;
    }
    <div class="prelative"></div>
    <div class="breadcrumb-section">
      <nav aria-label="Full path to the current page" class="breadcrumb-wrapper">
        <ol class="breadcrumb">
          <li class="breadcrumb-item"><a href="/police">Police</a></li>
          <li class="breadcrumb-item"><a href="/police/police-child">Police Child</a></li>
        </ol>
      </nav>
    </div>