将父容器设置为悬停的子容器的高度

雅马哈32088

我已经搜索了此问题的答案,但是在所有问题/答案中,我发现它们都无法解决我的问题。

我所拥有的是一个“超级菜单”,左侧具有链接,当其中一个链接用鼠标悬停时,它会向右扩展,显示带有图像的隐藏链接。我想做的是将左侧的“ hableable”链接区域扩展为与包含图像的右侧区域相同的大小。

目前,左侧是固定高度,当我尝试应用clear: both overflow: hidden该问题时,如其他答案所示,它破坏了布局。我希望有一种纯粹的CSS方式来做我需要的事情。我可以用JS编写它,但是如果不需要它,则不想这样做。我包括了一个代码笔,可以显示我目前所拥有的。

https://codepen.io/anon/pen/wGZjpp?editors=1100

<div class="megaMenuWrapper">
  <div class="megaMenuContainer" style="display: block;">
    <ul id="menu-main-menu" class="menu">
      <div class="background"><span class="megamenu-title">SHOP BY CATEGORY</span>
        <li class="category-item" id="menu-item-3"><a href="#">Showers</a>
          <ul class="sub-menu right-side">
            <li class="menu-item">
              <ul class="sub-menu">
                <li id="menu-item-4">
                  <a href="#"><img src="http://placekitten.com/180/180">Shower Stalls</a>
                </li>
                <li id="menu-item-8">
                  <a href="#"><img src="http://placekitten.com/180/180">Shower Bases</a>
                </li>
              </ul>
            </li>
            <li class="menu-item">
              <ul class="sub-menu">
                <li id="menu-item-5">
                  <a href="#"><img src="http://placekitten.com/180/180">Shower Walls</a>
                </li>
              </ul>
            </li>
          </ul>
        </li>
        <li class="category-item" id="menu-item-9"><a href="#">Toilets</a>
          <ul class="sub-menu right-side">
            <li class="menu-item">
              <ul class="sub-menu">
                <li id="menu-item-10">
                  <a href="#"><img src="http://placekitten.com/180/180">Bidets</a>
                </li>
                <li id="menu-item-11">
                  <a href="#"><img src="http://placekitten.com/180/180">Portable Toilets</a>
                </li>
              </ul>
            </li>
            <li class="menu-item">
              <ul class="sub-menu">
                <li id="menu-item-17">
                  <a href="#"><img src="http://placekitten.com/180/180">Bed Pans</a>
                </li>
              </ul>
            </li>
          </ul>
        </li>
        <li class="category-item" id="menu-item-16"><a href="#">Bathtubs</a>
          <ul class="sub-menu right-side">
            <li class="menu-item">
              <ul class="sub-menu">
                <li id="menu-item-18">
                  <a href="#"><img src="http://placekitten.com/180/180">Clawfoot</a>
                </li>
              </ul>
            </li>
            <li class="menu-item">
              <ul class="sub-menu">
                <li id="menu-item-19">
                  <a href="#"><img src="http://placekitten.com/180/180">Copper</a>
                </li>
              </ul>
            </li>
          </ul>
        </li>
        <li class="category-item" id="menu-item-20"><a href="#">Sinks</a>
          <ul class="sub-menu right-side">
            <li class="menu-item">
              <ul class="sub-menu">
                <li id="menu-item-21">
                  <a href="#"><img src="http://placekitten.com/180/180">Modern</a>
                </li>
              </ul>
            </li>
          </ul>
        </li>
        <li class="category-item" id="menu-item-25"><a href="#">Bathroom Accessories</a>
          <ul class="sub-menu right-side">
            <li class="menu-item">
              <ul class="sub-menu">
                <li id="menu-item-22">
                  <a href="#"><img src="http://placekitten.com/180/180">Bathtub Faucets</a>
                </li>
                <li id="menu-item-27">
                  <a href="#"><img src="http://placekitten.com/180/180">Shower Curtains</a>
                </li>
              </ul>
            </li>
            <li class="menu-item">
              <ul class="sub-menu">
                <li id="menu-item-23">
                  <a href="#"><img src="http://placekitten.com/180/180">Toilet Brushes</a>
                </li>
                <li id="menu-item-28">
                  <a href="#"><img src="http://placekitten.com/180/180">Vanities</a>
                </li>
              </ul>
            </li>
            <li class="menu-item">
              <ul class="sub-menu">
                <li id="menu-item-24">
                  <a href="#"><img src="http://placekitten.com/180/180">Toilet Seats</a>
                </li>
              </ul>
            </li>
            <li class="menu-item">
              <ul class="sub-menu">
                <li id="menu-item-26">
                  <a href="#"><img src="http://placekitten.com/180/180">Mirrors</a>
                </li>
              </ul>
            </li>
          </ul>
        </li>
      </div>
    </ul>
  </div>
</div>

CSS:

body{
  background: #ddd;
}

ul#mainnav>li>a:not(.last) {
    border-right: 1px solid #fff;
}

ul#mainnav>li>a {
    padding: 5px 15px;
    margin-top: 20px;
}

.megaMenuWrapper {
    position: relative;
    margin-top:30px;
}

.megaMenuContainer {
    position: absolute;
    width: 100%;
    /* display: none; */
    z-index: 2;
    /* height: auto; */
}

ul#menu-main-menu {
    width: 100%;
    height: 100%;
    position: relative;
    margin:0;
    list-style: none;
}

ul#menu-main-menu .background > li:first-of-type {
    margin-top: 5px;
}

.background {
    width: 20%;
    height: 100%;
    background: rgb(255, 255, 255);
    border-right: 2px solid #000;
}

.column.menu-item {
    padding: 1%;
    width: 23%;
}

ul.sub-menu {
    list-style: none;
    margin: 0;
}

.right-side {
    position: absolute;
    top: 0;
    left: 20%;
    height: auto;
    right: 0;
    width: 80%;
    display: none;
}

.right-side li.menu-item {
    float: left;
    width: 23%;
    padding: 1%;
    height: 100%;
}

.megamenu-title {
    color: #545454;
    margin-top: 20px;
    display: inline-block;
    width: 100%;
    margin-left: 20px;
    font-weight: bold;
}

li.category-item a{
    padding: 5px 0px 5px 20px;
    display: block;
}
li.category-item a:hover {
    background-color: white;
    color: #3C3C3C !important;
    text-decoration: none;
}

li.category-item a:hover + ul,
.right-side:hover
 {
    display: block;
    background: rgb(255, 255, 255);
    border-left: 1px solid #000;
}

ul#menu-main-menu li.menu-item ul.sub-menu li a {
    color: #3c3c3c;
    padding: 0;
    text-align: center;
}

ul#menu-main-menu li.menu-item ul.sub-menu li a:hover {
    background: none;
}

ul#menu-main-menu li.menu-item ul.sub-menu li img {
    display: block;
    margin: 0 auto;
}

ul#menu-main-menu li a {
    color: #4C4C4C;
}

更新:

最终,这就是我最终使用的jQuery。除非有人用纯CSS解决方案回答。

$('.category-item').hover(
    function() {
        var height = $(this).children('.right-side').outerHeight();
        $('.megaMenuContainer').height(height);
    },
    function() {
        $('.megaMenuContainer').css('height', '');
    }
);
雅马哈32088

对于纯CSS来说,这是不可能的,就像我想要的当前结构一样,所以我决定使用下面的jQuery解决方案。

$('.category-item').hover(
    function() {
        var height = $(this).children('.right-side').outerHeight();
        $('.megaMenuContainer').height(height);
    },
    function() {
        $('.megaMenuContainer').css('height', '');
    }
);

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

我们如何将父容器的高度设置为子容器

无法将悬停叠加层的高度设置为容器的100%

将子div的高度限制为父容器的高度

如何在不使用最小高度的情况下将父容器正确调整为子容器的大小

如何将边距或填充设置为父容器的高度百分比?

将父容器设置为特定高度时,iOS 9上的Flexbox项目会缩小

将容器类的高度设置为图像的高度

Swing:如何将组件高度设置为容器的高度?

将容器高度设置为等于Flutter中的宽度

将传单地图设置为高度:容器的100%

将容器设置为固定高度并可以滚动

将容器div设置为与iframe相同的高度

将固定div设置为父容器的100%宽度

如果同级溢出,则使子容器继承父容器的高度

使子容器占据父容器的高度[React Native]

我可以将父容器设置为溢出:隐藏但只有特定的子元素表现得好像父容器是溢出:可见的吗?

将 flex 元素的子元素设置为父元素的高度?

将最小高度设置为100%作为最小高度为100%的容器的子代

如何将SVG的高度设置为其封闭容器的高度?

Swift:使用prepareForSegue将UIView容器的高度设置为嵌入式UITableView的高度

将容器div的最小高度设置为其孙子div的最大高度

CSS将子容器的顶部与父容器的底部对齐

如何自动将嵌入式SVG缩放为父容器的宽度和高度?

当最小高度设置为容器高度时,为什么不继承容器高度?

使可滚动div的父容器高度为100%

我如何将最小高度设置为我的容器,然后在点击按钮后包装内容高度等于文本高度

textarea 高度溢出父容器

React Native:如何将<TextInput />的高度和宽度设置为<View />容器?

将伸缩容器高度设置为两个包含元素中的较小者