Hover overridden by gradient background

Here's the code in action:

http://jsfiddle.net/uop7dz7L/5/

This is the menu. I used a gradient background. When I remove the gradients then a: hover works. But somehow the background: the gradient overrides it and turns it off.

Any ideas?

#headwrap {
  border-top: 2px solid #F5FBFD;
  border-radius: 4px;
 } 
#inheader {
  padding-top: 30px;
  width: 973px;
  margin: 0px auto;
}
#inheader ul {
    font-size: 0;
    padding: 0 0 0 0px;
    list-style-type: none;
}
#inheader a {
    text-decoration: none;
    text-align: center;
    background: #ffffff;
    background: -moz-linear-gradient(top, #ffffff 0%, #ffffff 50%, #ededed 51%, #f7f7f7 100%);
    background: -webkit-gradient(left top, left bottom, color-stop(0%, #ffffff), color-stop(50%, #ffffff), color-stop(51%, #ededed), color-stop(100%, #f7f7f7));
    background: -webkit-linear-gradient(top, #ffffff 0%, #ffffff 50%, #ededed 51%, #f7f7f7 100%);
    background: -o-linear-gradient(top, #ffffff 0%, #ffffff 50%, #ededed 51%, #f7f7f7 100%);
    background: -ms-linear-gradient(top, #ffffff 0%, #ffffff 50%, #ededed 51%, #f7f7f7 100%);
    background: linear-gradient(to bottom, #ffffff 0%, #ffffff 50%, #ededed 51%, #f7f7f7 100%);
    filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#ffffff', endColorstr='#f7f7f7', GradientType=0 );
    background: linear-gradient(to bottom, #ffffff 0%, #ffffff 50%, #ededed 51%, #f7f7f7 100%);
    display: inline-block;
    font-family: 'open sans', sans-serif;
    font-size: 14px;
    height: 38px;
    line-height: 38px;
    color: #0088CB;
    transition: color 0.4s ease 0s;
    -webkit-transition: color 0.4s ease 0s;
    padding: 0px 23px 0px 22px;
    border-right: 1px solid #0088CB;
}
a#contactus {
    padding: 0px 23px 0px 22px;
    border-right: 0px;
}
div#inheader a:hover {
    background-color: fuchsia;
}
#inheader li {
    display: inline;
}
#nesmenu1 { 
/*width: 972px;*/
border-bottom: 1px solid #E3E8EB;
border-left: 1px solid #E3E8EB;
border-radius: 4px;
}
#nesmenu2 { 
border-top: 1px solid #ECF2F4;
border-right: 1px solid #ECF2F4;
border-bottom: 1px solid #CDD1D4;
border-left: 1px solid #CDD1D4;
border-radius: 4px;
}
#nesmenu3 { 
border-top: 1px solid #DCE0E3;
border-right: 1px solid #DCE0E3;
border-bottom: 1px solid #B1B4B6;
border-left: 1px solid #B1B4B6;
border-radius: 4px;
}
#nesmenu4 {
border-bottom: 1px solid #F8F8F8;
border-radius: 4px;
}
      

<div id="headwrap">
  <div id="header">
    <div id="inheader">
      <div id="nesmenu1">
        <div id="nesmenu2">
          <div id="nesmenu3">
            <div id="nesmenu4">
              <ul>
                <li><a href="#">HOME</a></li>
                <li><a href="#">PRODUCTS</a></li>
                <li><a href="#">SONIC TOOTHBRUSH</a></li>
                <li><a href="#">SONIC TRAVEL</a></li>
                <li><a href="#">SONIC PLUS</a></li>
                <li><a href="#">ACCESSORIES</a></li>
                <li><a id="contactus" href="#">CONTACT US</a></li>
              </ul>
            </div><!--nesmenu4-->
          </div><!--nesmenu3-->
        </div><!--nesmenu2-->
      </div><!--nesmenu1-->
    </div><!--inheader-->
  </div><!--header-->
</div><!--headwrap-->
      

Run codeHide result


+3


source to share


3 answers


How to use background

instead of background-color

;

div#inheader a:hover {
    background: fuchsia;
}

      

Better yet - if you want to keep the gradients, set new gradients in this div / id with fuchsia color like:



background: linear-gradient(to bottom, fuchsia 0%, #ffffff 50%, #ededed 51%, #f7f7f7 100%);

      

Change it depending on how you want to shade it.

http://jsfiddle.net/u5nt9h18/

+2


source


The reason background-color

not working on :hover

is because it is behind your gradient. From the W3C spec on background-image

:

When setting up a background image, authors must also specify a background color to use when the image is not available. When an image is available, it is displayed over the background color. (Thus, the color is displayed in the transparent parts of the image).

background-color

similar to z-index: 0

. background-image

always lies on top of the background color. Since you specified a color for each color stop in your gradient, none of your colors :hover

pass.

Instead, you will have to declare a new background gradient on hover. If you want the background color to be completely colored, just specify the same color for 0%

and 100%

.



Also, as a side note: when using background gradients, use background-image

instead background

. Element background

is a shorthand property for all other background properties. You are not declaring any other properties, so only declare the one you are using.

I cleaned up your example with the correct CSS below.

#headwrap {
  border-top: 2px solid #F5FBFD;
  border-radius: 4px;
}
#inheader {
  padding-top: 30px;
  width: 973px;
  margin: 0px auto;
}
#inheader ul {
  font-size: 0;
  padding: 0 0 0 0px;
  list-style-type: none;
}
#inheader a {
  text-decoration: none;
  text-align: center;
  background-color: #ffffff;
  background-image: -moz-linear-gradient(top, #ffffff 0%, #ffffff 50%, #ededed 51%, #f7f7f7 100%);
  background-image: -webkit-gradient(left top, left bottom, color-stop(0%, #ffffff), color-stop(50%, #ffffff), color-stop(51%, #ededed), color-stop(100%, #f7f7f7));
  background-image: -webkit-linear-gradient(top, #ffffff 0%, #ffffff 50%, #ededed 51%, #f7f7f7 100%);
  background-image: -o-linear-gradient(top, #ffffff 0%, #ffffff 50%, #ededed 51%, #f7f7f7 100%);
  background-image: -ms-linear-gradient(top, #ffffff 0%, #ffffff 50%, #ededed 51%, #f7f7f7 100%);
  background-image: linear-gradient(to bottom, #ffffff 0%, #ffffff 50%, #ededed 51%, #f7f7f7 100%);
  filter: progid: DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#f7f7f7', GradientType=0);
  background-image: linear-gradient(to bottom, #ffffff 0%, #ffffff 50%, #ededed 51%, #f7f7f7 100%);
  display: inline-block;
  font-family: 'open sans', sans-serif;
  font-size: 14px;
  height: 38px;
  line-height: 38px;
  color: #0088CB;
  -webkit-transition: color 0.4s ease 0s, background 0.1s ease-in;
  transition: color 0.4s ease, background 0.1s ease-in;
  padding: 0px 23px 0px 22px;
  border-right: 1px solid #0088CB;
}
a#contactus {
  padding: 0px 23px 0px 22px;
  border-right: 0px;
}
div#inheader a:hover {
  background-image: -moz-linear-gradient(top, fuchsia 0%, fuchsia 100%);
  background-image: -webkit-gradient(left top, left bottom, color-stop(0%, fuchsia), color-stop(100%, fuchsia));
  background-image: -webkit-linear-gradient(top, fuchsia 0%, fuchsia 100%);
  background-image: -o-linear-gradient(top, fuchsia 0%, fuchsia 100%);
  background-image: -ms-linear-gradient(top, fuchsia 0%, fuchsia 100%);
  background-image: linear-gradient(to bottom, fuchsia 0%, fuchsia 100%);
  filter: progid: DXImageTransform.Microsoft.gradient(startColorstr='fuchsia', endColorstr='fuchsia', GradientType=0);
  background-image: linear-gradient(to bottom, fuchsia 0%, fuchsia 100%);
}
#inheader li {
  display: inline;
}
#nesmenu1 {
  /*width: 972px;*/
  border-bottom: 1px solid #E3E8EB;
  border-left: 1px solid #E3E8EB;
  border-radius: 4px;
}
#nesmenu2 {
  border-top: 1px solid #ECF2F4;
  border-right: 1px solid #ECF2F4;
  border-bottom: 1px solid #CDD1D4;
  border-left: 1px solid #CDD1D4;
  border-radius: 4px;
}
#nesmenu3 {
  border-top: 1px solid #DCE0E3;
  border-right: 1px solid #DCE0E3;
  border-bottom: 1px solid #B1B4B6;
  border-left: 1px solid #B1B4B6;
  border-radius: 4px;
}
#nesmenu4 {
  border-bottom: 1px solid #F8F8F8;
  border-radius: 4px;
}
      

<div id="headwrap">
  <div id="header">
    <div id="inheader">
      <div id="nesmenu1">
        <div id="nesmenu2">
          <div id="nesmenu3">
            <div id="nesmenu4">
              <ul>
                <li><a href="#">HOME</a>
                </li>
                <li><a href="#">PRODUCTS</a>
                </li>
                <li><a href="#">SONIC TOOTHBRUSH</a>
                </li>
                <li><a href="#">SONIC TRAVEL</a>
                </li>
                <li><a href="#">SONIC PLUS</a>
                </li>
                <li><a href="#">ACCESSORIES</a>
                </li>
                <li><a id="contactus" href="#">CONTACT US</a>
                </li>
              </ul>
            </div>
            <!--nesmenu4-->
          </div>
          <!--nesmenu3-->
        </div>
        <!--nesmenu2-->
      </div>
      <!--nesmenu1-->
    </div>
    <!--inheader-->
  </div>
  <!--header-->
</div>
<!--headwrap-->
      

Run codeHide result


+2


source


When you use background-color

, you only change this property of the property background

. Since gradients do not use color and just show the gradient over the background color, the change background-color

does not affect them.

To fix this, just change everything background

instead background-color

:

div#inheader a:hover {
    background: fuchsia;
}

      

http://jsfiddle.net/zswr71Lc/

+1


source







All Articles