修复 CSS 导航栏按钮浮动和方向

Fixing CSS navbar buttons floating and direction

我在使用此导航栏时遇到问题:https://jsfiddle.net/d6a7b3Ly/1/

1- 栏中有许多 links,悬停效果使 links 下面的另一个移动到两侧,但我不确定是哪个填充效果造成的以及如何解决它。

当将 border-top 更改为 0px 时,它解决了问题,但使子菜单不起作用:

#nav .current a, #nav li:hover > a {
    background: #d1d1d1; /* for non-css3 browsers */
    filter:  progid:DXImageTransform.Microsoft.gradient(startColorstr='#ebebeb', endColorstr='#a1a1a1'); /* for IE */
    background: -webkit-gradient(linear, left top, left bottom, from(#ebebeb), to(#a1a1a1)); /* for webkit browsers */
    background: -moz-linear-gradient(top,  #ebebeb,  #a1a1a1); /* for firefox 3.6+ */

    color: #444;
    border-top: solid 1px #f8f8f8;
    -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, .2);
    -moz-box-shadow: 0 1px 1px rgba(0, 0, 0, .2);
    box-shadow: 0 1px 1px rgba(0, 0, 0, .2);
    text-shadow: 0 1px 0 rgba(255, 255, 255, .8);
}

2- 我正在尝试制作菜单的 right to left 选项。我在 css 中的 #nav li { 下更改了 float: right;,并在 <div dir="RTL"> 中添加了整个 html,但是 2 级子菜单仍然向左打开,他们应该是对的。我测试了 css 中的一些更改,但 none 对此有效。

这里是 link 到 rtl navbar: https://jsfiddle.net/ct8kp6eo/1/

这是CSS中的浮动变化:

#nav li {
    margin: 0 5px;
    padding: 0 0 8px;
    float: right;
    position: relative;
    list-style: none;

}

您将在鼠标悬停时添加一个 1 像素的顶部边框实体。在悬停时将其更改为 0px,它将正常工作。

#nav .current a, #nav li:hover > a {
 background: #d1d1d1; /* for non-css3 browsers */
 filter:  progid:DXImageTransform.Microsoft.gradient(startColorstr='#ebebeb', endColorstr='#a1a1a1'); /* for IE */
 background: -webkit-gradient(linear, left top, left bottom, from(#ebebeb), to(#a1a1a1)); /* for webkit browsers */
 background: -moz-linear-gradient(top,  #ebebeb,  #a1a1a1); /* for firefox 3.6+ */

 color: #444;
 /*border-top: solid 1px #f8f8f8;*/
    border-top: solid 0px #f8f8f8;      
 -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, .2);
 -moz-box-shadow: 0 1px 1px rgba(0, 0, 0, .2);
 box-shadow: 0 1px 1px rgba(0, 0, 0, .2);
 text-shadow: 0 1px 0 rgba(255, 255, 255, .8);
}

在悬停顶部添加 1px 会变得太多,这会使您的项目移动

为了解决问题添加padding-top: 7px调整border-top破坏布局到#nav ul li:hover a, #nav li:hover li a.

您有重叠的 标签 并解决 调整 z-index 属性 的 #nav li:hover > ul 到 1.

body {
 font: normal .8em/1.5em Arial, Helvetica, sans-serif;
 background: #ebebeb;
 width: 900px;
 margin: 100px auto;
 color: #666;
}
a {
 color: #333;
}
#nav {
 margin: 0;
 padding: 7px 6px 0;
 line-height: 100%;
 border-radius: 2em;

 -webkit-border-radius: 2em;
 -moz-border-radius: 2em;
 
 -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, .4);
 -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, .4);

 background: #8b8b8b; /* for non-css3 browsers */
 filter:  progid:DXImageTransform.Microsoft.gradient(startColorstr='#a9a9a9', endColorstr='#7a7a7a'); /* for IE */
 background: -webkit-gradient(linear, left top, left bottom, from(#a9a9a9), to(#7a7a7a)); /* for webkit browsers */
 background: -moz-linear-gradient(top,  #a9a9a9,  #7a7a7a); /* for firefox 3.6+ */

 border: solid 1px #6d6d6d;
}
#nav li {
 margin: 0 5px;
 padding: 0 0 8px;
 float: left;
 position: relative;
 list-style: none;
}
/* main level link */
#nav a {
 font-weight: bold;
 color: #e7e5e5;
 text-decoration: none;
 display: block;
 padding:  8px 20px;
 margin: 0;
 -webkit-border-radius: 1.6em;
 -moz-border-radius: 1.6em;
 text-shadow: 0 1px 1px rgba(0, 0, 0, .3);
}
/* main level link hover */
#nav .current a, #nav li:hover > a {
 background: #d1d1d1; /* for non-css3 browsers */
 filter:  progid:DXImageTransform.Microsoft.gradient(startColorstr='#ebebeb', endColorstr='#a1a1a1'); /* for IE */
 background: -webkit-gradient(linear, left top, left bottom, from(#ebebeb), to(#a1a1a1)); /* for webkit browsers */
 background: -moz-linear-gradient(top,  #ebebeb,  #a1a1a1); /* for firefox 3.6+ */

 color: #444;
 border-top: solid 1px #f8f8f8;
  padding-top: 7px; /* ADDED */
 -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, .2);
 -moz-box-shadow: 0 1px 1px rgba(0, 0, 0, .2);
 box-shadow: 0 1px 1px rgba(0, 0, 0, .2);
 text-shadow: 0 1px 0 rgba(255, 255, 255, .8);
}
/* sub levels link hover */
#nav ul li:hover a, #nav li:hover li a {
 background: none;
 border: none;
 color: #666;
 -webkit-box-shadow: none;
 -moz-box-shadow: none;
}
#nav ul a:hover {
 background: #0399d4 !important; /* for non-css3 browsers */
 filter:  progid:DXImageTransform.Microsoft.gradient(startColorstr='#04acec', endColorstr='#0186ba'); /* for IE */
 background: -webkit-gradient(linear, left top, left bottom, from(#04acec), to(#0186ba)) !important; /* for webkit browsers */
 background: -moz-linear-gradient(top,  #04acec,  #0186ba) !important; /* for firefox 3.6+ */

 color: #fff !important;
 -webkit-border-radius: 0;
 -moz-border-radius: 0;
 text-shadow: 0 1px 1px rgba(0, 0, 0, .1);
}
/* level 2 list */
#nav ul {
 background: #ddd; /* for non-css3 browsers */
 filter:  progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#cfcfcf'); /* for IE */
 background: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#cfcfcf)); /* for webkit browsers */
 background: -moz-linear-gradient(top,  #fff,  #cfcfcf); /* for firefox 3.6+ */

 display: none;
 margin: 0;
 padding: 0;
 width: 185px;
 position: absolute;
 top: 35px;
 left: 0;
 border: solid 1px #b4b4b4;
 -webkit-border-radius: 10px;
 -moz-border-radius: 10px;
 border-radius: 10px;
 -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, .3);
 -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, .3);
 box-shadow: 0 1px 3px rgba(0, 0, 0, .3);
}
/* dropdown */
#nav li:hover > ul {
 display: block;
  z-index: 1; /* ADDED */
}
#nav ul li {
 float: none;
 margin: 0;
 padding: 0;
}
#nav ul a {
 font-weight: normal;
 text-shadow: 0 1px 1px rgba(255, 255, 255, .9);
}
/* level 3+ list */
#nav ul ul {
 left: 181px;
 top: -3px;
}
/* rounded corners for first and last child */
#nav ul li:first-child > a {
 -webkit-border-top-left-radius: 9px;
 -moz-border-radius-topleft: 9px;
 -webkit-border-top-right-radius: 9px;
 -moz-border-radius-topright: 9px;
}
#nav ul li:last-child > a {
 -webkit-border-bottom-left-radius: 9px;
 -moz-border-radius-bottomleft: 9px;
 -webkit-border-bottom-right-radius: 9px;
 -moz-border-radius-bottomright: 9px;
}
/* clearfix */
#nav:after {
 content: ".";
 display: block;
 clear: both;
 visibility: hidden;
 line-height: 0;
 height: 0;
}
#nav {
 display: inline-block;
}
html[xmlns] #nav {
 display: block;
}
* html #nav {
 height: 1%;
}
<ul id="nav">
 <li class="current"><a href="#">Home</a></li>
 <li><a href="#">My Projects</a>
  <ul>
   <li><a href="#">N.Design Studio</a>
    <ul>
     <li><a href="#">Portfolio</a></li>
     <li><a href="#">WordPress Themes</a></li>
     <li><a href="#">Wallpapers</a></li>
     <li><a href="#">Illustrator Tutorials</a></li>
    </ul>
   </li>
   <li><a href="#">Web Designer Wall</a>
    <ul>
     <li><a href="#">Design Job Wall</a></li>
    </ul>
   </li>
   <li><a href="#">IconDock</a></li>
   <li><a href="#">Best Web Gallery</a></li>
  </ul>
 </li>
 <li><a href="#">Multi-Levels</a>
  <ul>
   <li><a href="#">Team</a>
    <ul>
     <li><a href="#">Sub-Level Item</a></li>
     <li><a href="#">Sub-Level Item</a>
      <ul>
       <li><a href="#">Sub-Level Item</a></li>
       <li><a href="#">Sub-Level Item</a></li>
       <li><a href="#">Sub-Level Item</a></li>
      </ul>
     </li>
     <li><a href="#">Sub-Level Item</a></li>
    </ul>
   </li>
   <li><a href="#">Sales</a></li>
   <li><a href="#">Another Link</a></li>
   <li><a href="#">Department</a>
    <ul>
     <li><a href="#">Sub-Level Item</a></li>
     <li><a href="#">Sub-Level Item</a></li>
     <li><a href="#">Sub-Level Item</a></li>
    </ul>
   </li>
  </ul>
 </li>
 <li><a href="#">About</a></li>
 <li><a href="#">Contact Us</a></li>
 <li><a href="#">Contact Us</a></li>
 <li><a href="#">Contact Us</a></li>
 <li><a href="#">Contact Us</a></li>
 <li><a href="#">Contact Us</a></li>
 <li><a href="#">Contact Us</a></li>
 <li><a href="#">Contact Us</a></li>
 <li><a href="#">Contact Us</a></li>
</ul>

要解决第二个问题,请将 transform: translateX(-100%); 添加到 #nav ul ul 规则而不是 left 值 - 请参见下面的演示:

body {
 font: normal .8em/1.5em Arial, Helvetica, sans-serif;
 background: #ebebeb;
 margin: 100px auto;
 color: #666;
}
a {
 color: #333;
}
#nav {
 margin: 0;
 padding: 7px 6px 0;
 line-height: 100%;
 border-radius: 2em;

 -webkit-border-radius: 2em;
 -moz-border-radius: 2em;
 
 -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, .4);
 -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, .4);

 background: #8b8b8b; /* for non-css3 browsers */
 filter:  progid:DXImageTransform.Microsoft.gradient(startColorstr='#a9a9a9', endColorstr='#7a7a7a'); /* for IE */
 background: -webkit-gradient(linear, left top, left bottom, from(#a9a9a9), to(#7a7a7a)); /* for webkit browsers */
 background: -moz-linear-gradient(top,  #a9a9a9,  #7a7a7a); /* for firefox 3.6+ */

 border: solid 1px #6d6d6d;
}
#nav li {
 margin: 0 5px;
 padding: 0 0 8px;
 float: right;
 position: relative;
 list-style: none;
  
}
/* main level link */
#nav a {
 font-weight: bold;
 color: #e7e5e5;
 text-decoration: none;
 display: block;
 padding:  8px 4px;
 margin: 0;
 -webkit-border-radius: 1.6em;
 -moz-border-radius: 1.6em;
 text-shadow: 0 1px 1px rgba(0, 0, 0, .3);
}
/* main level link hover */
#nav .current a, #nav li:hover > a {
 background: #d1d1d1; /* for non-css3 browsers */
 filter:  progid:DXImageTransform.Microsoft.gradient(startColorstr='#ebebeb', endColorstr='#a1a1a1'); /* for IE */
 background: -webkit-gradient(linear, left top, left bottom, from(#ebebeb), to(#a1a1a1)); /* for webkit browsers */
 background: -moz-linear-gradient(top,  #ebebeb,  #a1a1a1); /* for firefox 3.6+ */

 color: #444;
 border-top: solid 1px #f8f8f8;
 -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, .2);
 -moz-box-shadow: 0 1px 1px rgba(0, 0, 0, .2);
 box-shadow: 0 1px 1px rgba(0, 0, 0, .2);
 text-shadow: 0 1px 0 rgba(255, 255, 255, .8);
}
/* sub levels link hover */
#nav ul li:hover a, #nav li:hover li a {
 background: none;
 border: none;
 color: #666;
  
 -webkit-box-shadow: none;
 -moz-box-shadow: none;
}
#nav ul a:hover {
 background: #0399d4 !important; /* for non-css3 browsers */
 filter:  progid:DXImageTransform.Microsoft.gradient(startColorstr='#04acec', endColorstr='#0186ba'); /* for IE */
 background: -webkit-gradient(linear, left top, left bottom, from(#04acec), to(#0186ba)) !important; /* for webkit browsers */
 background: -moz-linear-gradient(top,  #04acec,  #0186ba) !important; /* for firefox 3.6+ */

 color: #fff !important;
 -webkit-border-radius: 0;
 -moz-border-radius: 0;
 text-shadow: 0 1px 1px rgba(0, 0, 0, .1);
}
/* level 2 list */
#nav ul {
 background: #ddd; /* for non-css3 browsers */
 filter:  progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#cfcfcf'); /* for IE */
 background: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#cfcfcf)); /* for webkit browsers */
 background: -moz-linear-gradient(top,  #fff,  #cfcfcf); /* for firefox 3.6+ */

 display: none;
 margin: 0;
 padding: 0;
 width: 185px;
 position: absolute;
 top: 35px;
 left: 10px
 border: solid 1px #b4b4b4;
 -webkit-border-radius: 10px;
 -moz-border-radius: 10px;
 border-radius: 10px;
 -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, .3);
 -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, .3);
 box-shadow: 0 1px 3px rgba(0, 0, 0, .3);
}
/* dropdown */
#nav li:hover > ul {
 display: block;
}
#nav ul li {
 float: none;
 margin: 0;
 padding: 0;
}
#nav ul a {
 font-weight: normal;
 text-shadow: 0 1px 1px rgba(255, 255, 255, .9);
}
/* level 3+ list */
#nav ul ul {
 /*left: 181px;*/
 top: -3px;
  transform: translateX(-100%);
}
/* rounded corners for first and last child */
#nav ul li:first-child > a {
 -webkit-border-top-left-radius: 9px;
 -moz-border-radius-topleft: 9px;
 -webkit-border-top-right-radius: 9px;
 -moz-border-radius-topright: 9px;
}
#nav ul li:last-child > a {
 -webkit-border-bottom-left-radius: 9px;
 -moz-border-radius-bottomleft: 9px;
 -webkit-border-bottom-right-radius: 9px;
 -moz-border-radius-bottomright: 9px;
}
/* clearfix */
#nav:after {
 content: ".";
 display: block;
 clear: both;
 visibility: hidden;
 line-height: 0;
 height: 0;
}
#nav {
 display: inline-block;
}
html[xmlns] #nav {
 display: block;
}
* html #nav {
 height: 1%;
}
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "#">
 
<body>      
  <div dir="RTL">     
  
<ul id="nav" >     
 <li class="current" ><a href="#">Home</a></li>
 <li><a href="#">test </a>  
  <ul>
   <li><a href="#">test  ></a>  
    <ul>
     <li><a href="#">test  2</a></li>
     <li><a href="#">test   3</a></li>
     <li><a href="#">test test test test test  4</a></li>
     <li><a href="#">test  555 Tutorials</a></li>
    </ul> 
   <li><a href="#">test  </a>
    <ul>
     <li><a href="#">Design Job Wall</a></li>
    </ul>
   </li>
   <li><a href="#">IconDock</a></li>
   <li><a href="#">Best Web Gallery</a></li>
  </ul>
 </li>
 <li><a href="#">Multi-Levels</a>
  <ul>
   <li><a href="#">Team</a>
    <ul>
     <li><a href="#">Sub-Level Item</a></li>
     <li><a href="#">Sub-Level Item</a>
      <ul>
       <li><a href="#">Sub-Level Item</a></li>
       <li><a href="#">Sub-Level Item</a></li>
       <li><a href="#">Sub-Level Item</a></li>
      </ul>
     </li>
     <li><a href="#">Sub-Level Item</a></li>
    </ul>
   </li>
   <li><a href="#">Sales</a></li>
   <li><a href="#">Another Link</a></li>
   <li><a href="#">Department</a>
    <ul>
     <li><a href="#">Sub-Level Item</a></li>
     <li><a href="#">Sub-Level Item</a></li>
     <li><a href="#">Sub-Level Item</a></li>
    </ul>
   </li>
  </ul>
 </li>
 <li><a href="#">About</a></li>
 <li><a href="#">Contact Us</a></li>

</ul>
</div>