Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Hover overridden by background gradient

Tags:

css

anchor

hover

Here is the code in action:

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

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

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-->
like image 309
Derek Dakan Avatar asked Sep 21 '26 21:09

Derek Dakan


2 Answers

The reason why background-color isn't working on :hover is because it's behind your gradient. From the W3C spec on background-image:

When setting a background image, authors should also specify a background color that will be used when the image is unavailable. When the image is available, it is rendered on top of the background color. (Thus, the color is visible in the transparent parts of the image).

The background-color is like z-index: 0. The background-image always lays on top of the background color. Since you have specified a color for every color stop in your gradient, none of your :hover color is coming through.

Instead you will have to declare a new background gradient on hover. If you want the background color to be a full color, simply state the same color for 0% and 100%.

Also, as a side-note: when using background gradients, use background-image instead of background. The background element is a shorthand property for all other background properties. You're not declaring any of the other properties, so declare only the one you're using.

I've 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-->
like image 74
Hynes Avatar answered Sep 27 '26 00:09

Hynes


How about using background instead of background-color;

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

Even better - if you want to keep the gradients, set new gradients in this div/id with the fuchsia colour 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/

like image 35
Ross Avatar answered Sep 27 '26 02:09

Ross



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!