CSS和HTML水平弹出菜单 - 右侧弹出窗口

时间:2012-08-03 09:10:47

标签: html css

我正在尝试使用CSS和HTML创建弹出菜单。基本上我想显示一个按钮,在悬停时显示它下面的列表。弹出列表应与按钮右侧对齐。 e.g。

           ////////////
           // BUTTON //
           ////////////
///////////////////////
//  FLYOUT OPTION    //
///////////////////////

我已经按照一些例子制作了以下jsFiddle - http://jsfiddle.net/JT5gs/

但是,我无法找到一种方法,使用.filtersnav ul规则的边距值将弹出菜单分开。 E.g。

.filtersnav ul {
    margin:0px 0px 0px -165px;

当我知道显示弹出按钮的主按钮的宽度时,这是有效的,但是我需要在我的网站上添加本地化,​​因此按钮可以是任意长度,因为它内部的文本可能会改变。

为了澄清我的问题,当按钮的宽度不确定时,是否可以将弹出菜单放在按钮的右侧? JsFiddle显示一个弹出菜单,其中菜单右侧正确对齐,但第二个弹出按钮(带有包含较长文本值的按钮)无法正确对齐。

1 个答案:

答案 0 :(得分:1)

position: relative放在li代码上,并在right: 0代码上设置ul而不是边距:

.filtersnav {
  background:#eeeeee;
  font-size:12px;
  font-family:verdana,sans-serif;
  font-weight:bold;
  z-index:1000;
  padding:0;
}
.filtersnav, .filtersnav ul {
  float:right;
  list-style:none;
  margin:0px;
  border: 1px solid #CCCCCC;
  min-width: 75px;
  padding:0;
  background-color: #EEEEEE;
  font-weight:bold;
  z-index:1000;
}
.filtersnav span {
  display:block;
  color:#000000;
  text-decoration:none;
  padding:3px 10px;
  cursor:pointer;
}
.filtersnav li {
  position: relative;
  float:left;
  padding:0;
  background:#eeeeee url('../images/Down.png') no-repeat 97% center;
}
.filtersnav ul {
  position:absolute;
  left:-999em;
  height:auto;
  width:280px;
  font-weight:normal;
  right: 0;
  line-height:1;
  border:0;
  border-top:1px solid #CCCCCC;
  padding:0;
}
.filtersnav li li {
  width:280px;
  border-bottom:1px solid #CCCCCC;
  border-left:1px solid #CCCCCC;
  border-right:1px solid #CCCCCC;
  font-weight:bold;
  font-family:verdana,sans-serif;
  background:#eeeeee;
}
.filtersnav li li span {
  padding:10px 10px;
  width:260px;
  font-size:12px;
  color:#000000;
}
.filtersnav li ul ul {
  margin:-33px 0 0 -281px;
  padding:0px;
  max-height:262px;
  overflow-x: hidden;
  overflow-y: auto;
}

.filtersnav li li:hover{
  background:#145197;
}
.filtersnav li ul li:hover span, .filtersnav li ul li li:hover span, .filtersnav li ul li li li:hover span, .filtersnav li ul li li li:hover span {
  color:#ffffff;
}
.filtersnav li:hover span, .filtersnav li.sfhover span {
  color:#ffffff;
}
.filtersnav li:hover li span, .filtersnav li li:hover li span, .filtersnav li li li:hover li span, .filtersnav li li li li:hover li span {
  color:#000000;
}
.filtersnav li:hover ul ul, .filtersnav li:hover ul ul ul, .filtersnav li:hover ul ul ul ul, .filtersnav li.sfhover ul ul, .filtersnav li.sfhover ul ul ul, .filtersnav li.sfhover ul ul ul ul {
  left:-999em;
}
.filtersnav li:hover ul, .filtersnav li li:hover ul, .filtersnav li li li:hover ul, .filtersnav li li li li:hover ul, .filtersnav li.sfhover ul, .filtersnav li li.sfhover ul, .filtersnav li li li.sfhover ul, .filtersnav li li li li.sfhover ul {
  left:auto;
  background:#eeeeee;
}
.filtersnav li:hover, .filtersnav li.sfhover {
  background:#145197 url('../images/DownSel.png') no-repeat 97% center;
}
.filtersnav li li:hover img {
  filter:Invert;
}    
.filtersnavSelected {
  background-color:#FCBF44
}
<ul class="filtersnav">
  <li>
    <span>Another Flyout Menu &nbsp; &nbsp;</span>
    <ul>
      <li>
        <span>Option</span>
        <ul>
          <li><span>Sub Option</span></li>
        </ul>
      </li>
    </ul>
  </li>
</ul> 

<ul class="filtersnav" style="margin-right:25px;">
  <li>
    <span>Flyout Menu &nbsp; &nbsp;</span>
    <ul>
      <li>
        <span>Option</span>
        <ul>
          <li><span>Sub Option</span></li>
        </ul>
      </li>
    </ul>
  </li>
</ul>