Madamadam
Madamadam

Reputation: 938

How to highlight paragraphs on hover using pseudo element

I built this snippet to highlight paragraphs on hover by using a pseudo element:

.wrapper {
  /* background: #ccc; */
}

p {
  position: relative;
  padding: 0.5em 1em;
  margin: 0em;
}

p:hover::after {
  height: 100%;
  display: block;
  position: absolute;
  top: 0;
  right: 0;
  left: 0;
  width: 100%;
  background: orange;
  content: '';
  z-index: -1;
  border-radius: 7px;
}
<div class="wrapper">
  <p>Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat.</p>
  <p>Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem et ea rebum.</p>
  <p>takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.</p>
</div>

As long as the wrapping div hasn't a background color applied, above code is working fine. But as soon as the wrapper gets a background color, the highlighting pseudo element is hidden. Adjusting z-index doesn't help.

.wrapper {
  background: #ccc;
}

p {
  position: relative;
  padding: 0.5em 1em;
  margin: 0em;
}

p:hover::after {
  height: 100%;
  display: block;
  position: absolute;
  top: 0;
  right: 0;
  left: 0;
  width: 100%;
  background: orange;
  content: '';
  z-index: -1;
  border-radius: 7px;
}
<div class="wrapper">
  <p>Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat.</p>
  <p>Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem et ea rebum.</p>
  <p>takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.</p>
</div>

Upvotes: 0

Views: 89

Answers (1)

MattHamer5
MattHamer5

Reputation: 1491

You need to add a another z-index to one of your classes, see the below for a working solution. Notice how I have added z-index:50; to the actual p tag.

.wrapper {
  background: #ccc;
}

p {
  position: relative;
  padding: 0.5em 1em;
  margin: 0em;
  z-index:50;
}

p:hover::after {
  height: 100%;
  display: block;
  position: absolute;
  top: 0;
  right: 0;
  left: 0;
  width: 100%;
  background: orange;
  content: '';
  z-index: -1;
  border-radius: 7px;
}
<div class="wrapper">
  <p>Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat.</p>
  <p>Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem et ea rebum.</p>
  <p>takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.</p>
</div>

JSFiddle

Upvotes: 4

Related Questions