Vishal Pandey
Vishal Pandey

Reputation: 41

How to change the background of all td's, before a particular td, on hover on that td

I want to change the background color of all the td before a particular td on hover on that particular td.

enter image description here

So that when I hover over the icon all the icons and text before it in that particular row change their background.

Can anyone please suggest how to achieve it.

Here is my HTML

  <div class="table-responsive">
        <table class="table table-condensed">
            <tr>
                <td>Lorem ipsum dolor sit amet,</td>
                <td><i class="fa fa-gift"></i></td>
                <td><i class="fa fa-gift"></i></td>
                <td><i class="fa fa-gift"></i></td>
                <td><i class="fa fa-gift"></i></td>
            </tr>
            <tr>
                <td>Lorem ipsum dolor sit amet,</td>
                <td><i class="fa fa-gift"></i></td>
                <td><i class="fa fa-gift"></i></td>
                <td><i class="fa fa-gift"></i></td>
                <td><i class="fa fa-gift"></i></td>
            </tr>
            <tr>
                <td>Lorem ipsum dolor sit amet,</td>
                <td><i class="fa fa-gift"></i></td>
                <td><i class="fa fa-gift"></i></td>
                <td><i class="fa fa-gift"></i></td>
                <td><i class="fa fa-gift"></i></td>
            </tr>
            <tr>
                <td>Lorem ipsum dolor sit amet,</td>
                <td><i class="fa fa-gift"></i></td>
                <td><i class="fa fa-gift"></i></td>
                <td><i class="fa fa-gift"></i></td>
                <td><i class="fa fa-gift"></i></td>
            </tr>
            <tr>
                <td>Lorem ipsum dolor sit amet,</td>
                <td><i class="fa fa-gift"></i></td>
                <td><i class="fa fa-gift"></i></td>
                <td><i class="fa fa-gift"></i></td>
                <td><i class="fa fa-gift"></i></td>
            </tr>
    </div>

and Style

  <style type="text/css">
        .table {
            width: 310px;
        }

        td:nth-child(1) {
            width: 200px;
        }

        .table-responsive {
            border: 1px solid;
            width: 340px;
            padding: 20px 30px 10px 10px;
            border-radius: 5px;
        }

        td:nth-child(2),
        td:nth-child(3),
        td:nth-child(4) {
            width: 30px;
        }

        tr:active {
            color: orange;
        }

        td:hover {
            background-color: #00BD9A;
        }

    </style>

Upvotes: 0

Views: 969

Answers (4)

Mohammad Jawad
Mohammad Jawad

Reputation: 21

Greetings,

I found a way to do this through javascript (JQuery) you also need to add a class to each td under the tr

HTML

<div class="table-responsive">
    <table class="MyTable">
        <tr>
            <td class="C1">Lorem ipsum dolor sit amet,</td>
            <td class="C2"><i class="fa fa-gift">1</i></td>
            <td class="C3"><i class="fa fa-gift">2</i></td>
            <td class="C4"><i class="fa fa-gift">3</i></td>
            <td class="C5"><i class="fa fa-gift">4</i></td>
        </tr>
        <tr>
            <td class="C1">Lorem ipsum dolor sit amet,</td>
            <td class="C2"><i class="fa fa-gift">1</i></td>
            <td class="C3"><i class="fa fa-gift">2</i></td>
            <td class="C4"><i class="fa fa-gift">3</i></td>
            <td class="C5"><i class="fa fa-gift">4</i></td>
        </tr>
</table>

CSS

    .MyTable td{
        width: 30px;
    }
    .MyTable td:nth-child(1) {
        width: 200px;
    }
    .table-responsive {
        border: 1px solid;
        width: 340px;
        padding: 20px 30px 10px 10px;
        border-radius: 5px;
    }
    tr:active {
        color: orange;
    }

Javascript (You Should include JQuery Library)

 $('*[class*="C"]').hover(function(){
     var cls = $(this).attr("class");
     $(this).parents("tr");
     var j = cls.substr(cls.indexOf("C")+1,1);
     for(var i=1;i<=j;i++){
         var Col = ".C"+i;
         $(this).parents("tr").find(Col).css("background-color","#00BD9A");
     }
 },function(){
      var cls = $(this).attr("class");
     $(this).parents("tr");
     var j = cls.substr(cls.indexOf("C")+1,1);
     for(var i=1;i<=j;i++){
         var Col = ".C"+i;
         $(this).parents("tr").find(Col).css("background-color","#fff");
     }                   
 });

Explanation :

Using .hover Jquery function to style each col i use a loop to style starting from first col to the col where the mouse is hovered at also on hover removing i used exact same code but to style background back to white (you may change the background color to inherit or for your own )

Regards

Upvotes: 2

Asons
Asons

Reputation: 87191

You can use a script, or like this, using a pseudo element

.table {
  width: 310px;
  overflow: hidden;                /*  added  */
}

td:nth-child(1) {
  width: 200px;
}

.table-responsive {
  border: 1px solid;
  width: 340px;
  padding: 20px 30px 10px 10px;
  border-radius: 5px;
}

td:nth-child(2),
td:nth-child(3),
td:nth-child(4) {
  width: 30px;
}

tr:active {
  color: orange;
}

td {
  position: relative;              /*  added  */
}

td:hover::before {                 /*  added  */
  content: '';
  position: absolute;
  top: 0;  
  right: 0;
  height: 100%;
  width: 100vw;
  background-color: #00BD9A;
  z-index: -1;
}
<link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet"/>
<div class="table-responsive">
  <table class="table table-condensed">
    <tr>
      <td>Lorem ipsum dolor sit amet,</td>
      <td><i class="fa fa-gift"></i></td>
      <td><i class="fa fa-gift"></i></td>
      <td><i class="fa fa-gift"></i></td>
      <td><i class="fa fa-gift"></i></td>
    </tr>
    <tr>
      <td>Lorem ipsum dolor sit amet,</td>
      <td><i class="fa fa-gift"></i></td>
      <td><i class="fa fa-gift"></i></td>
      <td><i class="fa fa-gift"></i></td>
      <td><i class="fa fa-gift"></i></td>
    </tr>
    <tr>
      <td>Lorem ipsum dolor sit amet,</td>
      <td><i class="fa fa-gift"></i></td>
      <td><i class="fa fa-gift"></i></td>
      <td><i class="fa fa-gift"></i></td>
      <td><i class="fa fa-gift"></i></td>
    </tr>
    <tr>
      <td>Lorem ipsum dolor sit amet,</td>
      <td><i class="fa fa-gift"></i></td>
      <td><i class="fa fa-gift"></i></td>
      <td><i class="fa fa-gift"></i></td>
      <td><i class="fa fa-gift"></i></td>
    </tr>
    <tr>
      <td>Lorem ipsum dolor sit amet,</td>
      <td><i class="fa fa-gift"></i></td>
      <td><i class="fa fa-gift"></i></td>
      <td><i class="fa fa-gift"></i></td>
      <td><i class="fa fa-gift"></i></td>
    </tr>
  </table>
</div>

Upvotes: 1

Ori Drori
Ori Drori

Reputation: 191976

You can insert the cells in a reverse order, and then change the order visually by rotating the table, and rotating each cell. Now you can use the sibling selector ~.

.table {
  width: 310px;
}

td:nth-child(1) {
  width: 200px;
}

.table-responsive {
  border: 1px solid;
  width: 340px;
  padding: 20px 10px 10px 30px;
  border-radius: 5px;
  transform: rotateY(180deg);
}

td:nth-child(1),
td:nth-child(2),
td:nth-child(3),
td:nth-child(4) {
  width: 30px;
}

td {
  transform: rotateY(180deg);
  white-space: nowrap;
}

tr:active {
  color: orange;
}

td:hover, td:hover ~ td {
  background-color: #00BD9A;
}
<link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" />
<div class="table-responsive">
  <table class="table table-condensed">
    <tr>
      <td><i class="fa fa-gift"></i></td>
      <td><i class="fa fa-gift"></i></td>
      <td><i class="fa fa-gift"></i></td>
      <td><i class="fa fa-gift"></i></td>
      <td>Lorem ipsum dolor sit amet,</td>
    </tr>
    <tr>
      <td><i class="fa fa-gift"></i></td>
      <td><i class="fa fa-gift"></i></td>
      <td><i class="fa fa-gift"></i></td>
      <td><i class="fa fa-gift"></i></td>
      <td>Lorem ipsum dolor sit amet,</td>
    </tr>
    <tr>
      <td><i class="fa fa-gift"></i></td>
      <td><i class="fa fa-gift"></i></td>
      <td><i class="fa fa-gift"></i></td>
      <td><i class="fa fa-gift"></i></td>
      <td>Lorem ipsum dolor sit amet,</td>
    </tr>
    <tr>
      <td><i class="fa fa-gift"></i></td>
      <td><i class="fa fa-gift"></i></td>
      <td><i class="fa fa-gift"></i></td>
      <td><i class="fa fa-gift"></i></td>
      <td>Lorem ipsum dolor sit amet,</td>
    </tr>
</div>

Upvotes: 0

Gerard
Gerard

Reputation: 15786

Validate tr:hover and than reverse the color for the td's that follow the hovered one.

.table {
  width: 310px;
}

td:nth-child(1) {
  width: 200px;
}

.table-responsive {
  border: 1px solid;
  width: 340px;
  padding: 20px 30px 10px 10px;
  border-radius: 5px;
}

td:nth-child(2),
td:nth-child(3),
td:nth-child(4) {
  width: 30px;
}

tr:active {
  color: orange;
}

tr:hover {
  background-color: #00BD9A;
}
td:hover ~ td {
background-color: white;
}
<link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet"/>
<div class="table-responsive">
  <table class="table table-condensed">
    <tr>
      <td>Lorem ipsum dolor sit amet,</td>
      <td><i class="fa fa-gift"></i></td>
      <td><i class="fa fa-gift"></i></td>
      <td><i class="fa fa-gift"></i></td>
      <td><i class="fa fa-gift"></i></td>
    </tr>
    <tr>
      <td>Lorem ipsum dolor sit amet,</td>
      <td><i class="fa fa-gift"></i></td>
      <td><i class="fa fa-gift"></i></td>
      <td><i class="fa fa-gift"></i></td>
      <td><i class="fa fa-gift"></i></td>
    </tr>
    <tr>
      <td>Lorem ipsum dolor sit amet,</td>
      <td><i class="fa fa-gift"></i></td>
      <td><i class="fa fa-gift"></i></td>
      <td><i class="fa fa-gift"></i></td>
      <td><i class="fa fa-gift"></i></td>
    </tr>
    <tr>
      <td>Lorem ipsum dolor sit amet,</td>
      <td><i class="fa fa-gift"></i></td>
      <td><i class="fa fa-gift"></i></td>
      <td><i class="fa fa-gift"></i></td>
      <td><i class="fa fa-gift"></i></td>
    </tr>
    <tr>
      <td>Lorem ipsum dolor sit amet,</td>
      <td><i class="fa fa-gift"></i></td>
      <td><i class="fa fa-gift"></i></td>
      <td><i class="fa fa-gift"></i></td>
      <td><i class="fa fa-gift"></i></td>
    </tr>
  </table>
</div>

Upvotes: 2

Related Questions