nourza
nourza

Reputation: 2321

How can I select li of a class with CSS

var divs = document.querySelectorAll('li a.shadow'),
  i;

for (i = 0; i < divs.length; ++i) {
  divs[i].parentNode.style.backgroundColor = "red";
}
.breadcrumb {
  margin: 20px;
  list-style: none;
  font: 15px Helvetica, Arial, Sans-Serif;
  padding: 0;
  display: flex;
}

.breadcrumb li {
  border-top: 1px solid black;
  border-bottom: 1px solid black;
  border-left: 1px solid white;
  color: black !important;
  text-decoration: none;
  background: brown;
  /* fallback color */
  background: hsla(34, 85%, 35%, 1);
  position: relative;
  display: flex;
  align-items: center;

}
.breadcrumb li:nth-child(2) {
    background: rgb(221 221 221) !important;
    border-left: 1px solid black !important;
}
.breadcrumb li:last-child {
    background: rgb(221 221 221) !important;
    border-right: 1px solid black !important;
}
.breadcrumb a,
.breadcrumb a:link,
.breadcrumb a:visited,
.breadcrumb a:active {
  color: #212121;
  margin: 0 0px;
}

.breadcrumb li span::before { 
  content: " "; 
  display: block; 
  width: 0; 
  height: 0;
  border-top: 15px solid transparent;       
  border-bottom: 15px solid transparent;
  border-left: 15px solid white;
  position: absolute;
  top: 50%;
  margin-top: -15px; 
  margin-left: 1px;
  left: 100%;
  z-index: 1; 
}
.breadcrumb li a::before { 
  content: " "; 
  display: block; 
  width: 0; 
  height: 0;
  border-top: 15px solid transparent;       
  border-bottom: 15px solid transparent;
  border-left: 15px solid white;
  position: absolute;
  top: 50%;
  margin-top: -15px; 
  margin-left: 2px;
  left: 100%;
  z-index: 1; 
}
.breadcrumb li:before {
  content: "";
  display: block;
  width: 0;
  height: 0;
  border-top: 15px solid transparent;
  /* Go big on the size, and let overflow hide */
  border-bottom: 15px solid transparent;
  border-left: 15px solid transparent;
  position: relative;
  left: 100%;
  z-index: 2;

}
.breadcrumb li:last-child:before {  
  border-left: 0px solid hsla(34, 85%, 35%, 1) !important;
  padding-left: 10px;
  padding-right: 10px; }
.breadcrumb li:nth-child(8) {
  background: rgb(221 221 221) !important;
}

.breadcrumb li:nth-child(8):before {
  border-left-color: rgb(221 221 221) !important;
}

.breadcrumb li:nth-child(7) {
  background: rgb(221 221 221) !important;
}

.breadcrumb li:nth-child(7):before {
  border-left-color: rgb(221 221 221) !important;
}

.breadcrumb li:nth-child(6) {
  background: rgb(221 221 221) !important;
}

.breadcrumb li:nth-child(6):before {
  border-left-color: rgb(221 221 221) !important;
}

.breadcrumb li:nth-child(5) {
  background: rgb(221 221 221) !important;
}

.breadcrumb li:nth-child(5):before {
  border-left-color: rgb(221 221 221) !important;
}

.breadcrumb li:nth-child(4) {
  background: rgb(221 221 221) !important;
}

.breadcrumb li:nth-child(4):before {
  border-left-color: rgb(221 221 221) !important;
}

.breadcrumb li:nth-child(3) {
  background: rgb(221 221 221) !important;
}

.breadcrumb li:nth-child(3):before {
  border-left-color: rgb(221 221 221) !important;
}

.breadcrumb li:nth-child(2) {
  background: rgb(221 221 221) !important;
}

.breadcrumb li:nth-child(2):before {
  border-left-color: rgb(221 221 221) !important;
}

.breadcrumb li:nth-child(1) {
  background: rgb(221 221 221) !important;
}

.breadcrumb li:nth-child(1):before {
  border-left-color: hsla(34, 85%, 85%, 1) !important;
}


.border{
  width: 100%
}
<ul class="breadcrumb">
  <li> <a href="" class="shadow">Link with shadow</a></li>
  <li> <a href="" class="shadow">Link with shadow</a></li>
  <li> <a href="">Link without shadow</a></li>
  <li> <a href="">Link without shadow</a></li>
  <li> <a href="" class="shadow">Link with shadow</a></li>
</ul>

How can I select any li that has a class named shadow to be background red

This is what I tried but it's not working

Upvotes: 1

Views: 76

Answers (2)

Zakaria Acharki
Zakaria Acharki

Reputation: 67505

There's no way to do this in CSS, Here's a JS solution by using querySelectorAll to select all the anchors inside li with the class shadow then loop through them and set the style to the parent li:

var divs = document.querySelectorAll('li a.shadow'),
  i;

for (i = 0; i < divs.length; ++i) {
  divs[i].parentNode.setAttribute('style', 'background-color: red !important');
}
.breadcrumb {
  margin: 20px;
  list-style: none;
  font: 15px Helvetica, Arial, Sans-Serif;
  padding: 0;
  display: flex;
}

.breadcrumb li {
  border-top: 1px solid black;
  border-bottom: 1px solid black;
  border-left: 1px solid white;
  color: black !important;
  text-decoration: none;
  background: brown;
  /* fallback color */
  background: hsla(34, 85%, 35%, 1);
  position: relative;
  display: flex;
  align-items: center;
}

.breadcrumb li:nth-child(2) {
  background: rgb(221 221 221) !important;
  border-left: 1px solid black !important;
}

.breadcrumb li:last-child {
  background: rgb(221 221 221) !important;
  border-right: 1px solid black !important;
}

.breadcrumb a,
.breadcrumb a:link,
.breadcrumb a:visited,
.breadcrumb a:active {
  color: #212121;
  margin: 0 0px;
}

.breadcrumb li span::before {
  content: " ";
  display: block;
  width: 0;
  height: 0;
  border-top: 15px solid transparent;
  border-bottom: 15px solid transparent;
  border-left: 15px solid white;
  position: absolute;
  top: 50%;
  margin-top: -15px;
  margin-left: 1px;
  left: 100%;
  z-index: 1;
}

.breadcrumb li a::before {
  content: " ";
  display: block;
  width: 0;
  height: 0;
  border-top: 15px solid transparent;
  border-bottom: 15px solid transparent;
  border-left: 15px solid white;
  position: absolute;
  top: 50%;
  margin-top: -15px;
  margin-left: 2px;
  left: 100%;
  z-index: 1;
}

.breadcrumb li:before {
  content: "";
  display: block;
  width: 0;
  height: 0;
  border-top: 15px solid transparent;
  /* Go big on the size, and let overflow hide */
  border-bottom: 15px solid transparent;
  border-left: 15px solid transparent;
  position: relative;
  left: 100%;
  z-index: 2;
}

.breadcrumb li:last-child:before {
  border-left: 0px solid hsla(34, 85%, 35%, 1) !important;
  padding-left: 10px;
  padding-right: 10px;
}

.breadcrumb li:nth-child(8) {
  background: rgb(221 221 221) !important;
}

.breadcrumb li:nth-child(8):before {
  border-left-color: rgb(221 221 221) !important;
}

.breadcrumb li:nth-child(7) {
  background: rgb(221 221 221) !important;
}

.breadcrumb li:nth-child(7):before {
  border-left-color: rgb(221 221 221) !important;
}

.breadcrumb li:nth-child(6) {
  background: rgb(221 221 221) !important;
}

.breadcrumb li:nth-child(6):before {
  border-left-color: rgb(221 221 221) !important;
}

.breadcrumb li:nth-child(5) {
  background: rgb(221 221 221) !important;
}

.breadcrumb li:nth-child(5):before {
  border-left-color: rgb(221 221 221) !important;
}

.breadcrumb li:nth-child(4) {
  background: rgb(221 221 221) !important;
}

.breadcrumb li:nth-child(4):before {
  border-left-color: rgb(221 221 221) !important;
}

.breadcrumb li:nth-child(3) {
  background: rgb(221 221 221) !important;
}

.breadcrumb li:nth-child(3):before {
  border-left-color: rgb(221 221 221) !important;
}

.breadcrumb li:nth-child(2) {
  background: rgb(221 221 221) !important;
}

.breadcrumb li:nth-child(2):before {
  border-left-color: rgb(221 221 221) !important;
}

.breadcrumb li:nth-child(1) {
  background: rgb(221 221 221) !important;
}

.breadcrumb li:nth-child(1):before {
  border-left-color: hsla(34, 85%, 85%, 1) !important;
}

.border {
  width: 100%
}
<ul class="breadcrumb">
  <li> <a href="" class="shadow">Link with shadow</a></li>
  <li> <a href="" class="shadow">Link with shadow</a></li>
  <li> <a href="">Link without shadow</a></li>
  <li> <a href="">Link without shadow</a></li>
  <li> <a href="" class="shadow">Link with shadow</a></li>
</ul>

Upvotes: 2

Amirreza Saki
Amirreza Saki

Reputation: 721

first, you can define .red-background that contains background-color in your CSS, after that you can iterate all HTML objects that have .shadow class name using js and add your .red-background class :

let elements_with_shadow_class = document.getElementsByClassName("shadow");

for(let element of elements_with_shadow_class){
   element.classList.add("red-background");
}

Upvotes: 0

Related Questions