如何使用js使下拉子菜单宽度等于父div

时间:2015-09-02 15:55:38

标签: javascript jquery html css

我有一个CSS和HTML下拉菜单,我想保持子菜单的宽度等于它们的父级。我试过几种方法,但没有什么对我有用。如果它可以用CSS或者JS来做,这对我来说很好,这是我的代码

HTML

<nav>
    <ul class="navi_main">
        <li><a href="#">Home</a></li>
        <li><a href="#">About</a>
            <ul class="sub_navi_main">
                <li><a href="#">Page 1</a></li>
                <li><a href="#">Page 2</a></li>
            </ul>
        </li>
        <li><a href="#">Products</a>
            <ul class="sub_navi_main">
                <li><a href="#">Prod 1</a></li>
                <li><a href="#">Prod 2</a></li>
            </ul>                        
                        </li>
        <li><a href="#">About Us</a></li>
        <li><a href="#">Contact Us</a></li>
    </ul>
</nav>

CSS

.navi_main{
    display:block;
}

.navi_main li{
    display: table-cell;
    z-index: 100;
}

.navi_main li:first-child{
margin-left:0;
}

.navi_main li a {
    text-decoration: none;
    display: block;
    font-size: 16px;
    color: #8098b1;
    padding: 0 14px;
    height: 64px;
    line-height: 64px;
    border-right: 1px solid #e6e6e6;
    transition: all 0.3s;
    -moz-transition: all 0.3s;
    -webkit-transition: all 0.3s;
    text-shadow: 0 1px 1px rgba(255,255,255,.64);
    text-transform: uppercase;
    position: relative;
}

.navi_main li a:hover, .navi_main li:hover > a{
    color:#ffffff;
    background:#9CA3DA;
}


.navi_main ul {
    display: none;
    margin: 0;
    padding: 0;
    width: 100%;
    position:relative;
    background: #ffffff;
    z-index:999999;
}

.navi_main ul li {
    display:block;
    float: none;
    background:none;
    margin:0;
    padding:0;
}
.navi_main ul li a {
    font-size: 14px;
    font-weight: normal;
    display: block;
    color: #797979;
    border-left: 3px solid #ffffff;
    background: #ffffff;
    height:40px;
    line-height:40px;
}

.navi_main ul li a:hover, .navi_main ul li:hover > a{
    background:#f0f0f0;
    border-left:3px solid #9CA3DA;
    color:#797979;
}

.navi_main li > ul.visible{
    display: block;
    position:absolute;
}
.navi_main ul ul {
    left: 149px;
    top: 0px;
}

1 个答案:

答案 0 :(得分:0)

好的......我已经简化了CSS,因为你有一些简化规则,并使CSS选择器更加特定,我认为这就是你要找的。 / p>

注意:如果您需要多行文字,则实际上无法将line-height设置为等于height。我取了所有高度语句,让链接大小(用填充)确定实际的高度。

我已将其中一个子菜单显示出来,因此您无需悬停即可查看。

* {
  box-sizing: border-box;
}

ul {
  list-style-type: none;
  margin: 0;
  padding: 0;
}

a {
  text-decoration: none;
}

.navi_main {
  /* display: block;*/
  /* not required */
}

.navi_main > li {
  display: table-cell;
  position: relative;
  /* positioning context */
}

.navi_main > li > a {
  text-decoration: none;
  display: block;
  font-size: 16px;
  color: #8098b1;
  padding: 16px;
  border-right: 1px solid #e6e6e6;
  transition: all 0.3s;
  -moz-transition: all 0.3s;
  -webkit-transition: all 0.3s;
  text-shadow: 0 1px 1px rgba(255, 255, 255, .64);
  text-transform: uppercase;
}

.navi_main li a:hover,
.navi_main li:hover > a {
  color: #ffffff;
  background: #9CA3DA;
}

.navi_main li > ul {
  position: absolute;
  top: 100%;
  left: 0;
  display: none;
  width: 100%;
  background: #ff0000;
}

.navi_main li:hover > ul {
   display:block;
}

.navi_main ul > li {
  display: block;
  background: #bada55;
}


.navi_main  ul > li > a {
  font-size: 14px;
  font-weight: normal;
  display: block;
  color: #797979;
  background: #ffffff;
  padding:8px 16px;
  border-left:2px solid white;
}

.navi_main ul li a:hover {
  background: #f0f0f0;
  color: #797979;
  border-left:2px solid #9CA3DA;
}

.navi_main li > ul.visible {
  display: block;
}
<nav>
    <ul class="navi_main">
        <li><a href="#">Home</a></li>
        <li><a href="#">About</a>
            <ul class="sub_navi_main">
                <li><a href="#">Page 1</a></li>
                <li><a href="#">Page 2</a></li>
            </ul>
        </li>
        <li><a href="#">Products</a>
            <ul class="sub_navi_main visible">
                <li><a href="#">Lorem ipsum dolor sit amet.</a></li>
                <li><a href="#">Prod 2</a></li>
            </ul>                        
                        </li>
        <li><a href="#">About Us</a></li>
        <li><a href="#">Contact Us</a></li>
    </ul>
</nav>

Codepen Demo