【问题标题】:How to get child blocks the same size as their parent如何让子块与父块大小相同
【发布时间】:2021-12-08 17:04:36
【问题描述】:

短版显示效果更好:

我想创建一个导航栏,它在悬停时显示块,但无法解决如何让子元素成为其父元素的大小。我希望 Item 1.1, ... 与 Item 1 的宽度相同,依此类推,而在下面显示的示例中,您会发现这不起作用,原因我似乎无法理解。

#menu{
    width: 60%;
    min-width: 500px;
    height: 20px;
    display: flex;
    justify-content: space-between;
    margin: 10px auto 15px auto;
}
#menu li{
    width: calc(100% / 5 - 1%);
    min-width: 100px;
    height: 40px;
    display: block;
}
#menu li a{
    width: 100%;
    height: 20px;
    display: block;
    background-color:#fff;
    font-family: Helvetica Constantia, "Lucida Bright", "DejaVu Serif", Georgia, "serif";
    font-size: 0.7em;
    line-height: 20px;
    color: #6E4712;
    border: 2px solid rgba(127,201,154, 0.5);
    text-align: center;
    text-decoration: none;
}
#menu li a:hover{
    color: rgba(127,201,154, 0.5);
}
#menu .sous-menu{ 
    display: none;
    margin-top: -2px;
}
#menu .sous-menu li{
    width: 100%;
    height: 20px;
    display: block;
}
#menu .sous-menu li a {
    width: 100%;
    height: 20px;
    display: block;
    background-color: #fff;
    font-family: Helvetica Constantia, "Lucida Bright", "DejaVu Serif", Georgia, "serif";
    font-size: 0.7em;
    line-height: 20px;
    color: #6E4712;
    text-align: center;
    text-decoration: none;
}
#menu .sous-menu li a:hover{
    color: rgba(127,201,154, 0.5);
}
#menu li:hover .sous-menu{ 
    display: block;
    position: absolute;
}
        <nav>
            <ul id="menu">
                <li><a href="#">Item 1</a>
                    <ul class="sous-menu">
                        <li><a href="#">Item 1.1</a></li>
                        <li><a href="#">Item 1.2</a></li>
                        <li><a href="#">Item 1.3</a></li>
                        <li><a href="#">Item 1.4</a></li>
                    </ul>
                </li>
            </ul>
        </nav>

很抱歉,代码阅读起来很累,但我倾向于重复自己,因为是新手。

【问题讨论】:

    标签: css hover nav


    【解决方案1】:

    我已将 padding: 0; 添加到 #menu .sous-menu 并删除 position: absolute;#menu li:hover .sous-menu。这应该有效:

    #menu{
        width: 60%;
        min-width: 500px;
        height: 20px;
        display: flex;
        justify-content: space-between;
        margin: 10px auto 15px auto;
    }
    #menu li{
        width: calc(100% / 5 - 1%);
        min-width: 100px;
        height: 40px;
        display: block;
    }
    #menu li a{
        width: 100%;
        height: 20px;
        display: block;
        background-color:#fff;
        font-family: Helvetica Constantia, "Lucida Bright", "DejaVu Serif", Georgia, "serif";
        font-size: 0.7em;
        line-height: 20px;
        color: #6E4712;
        border: 2px solid rgba(127,201,154, 0.5);
        text-align: center;
        text-decoration: none;
    }
    #menu li a:hover{
        color: rgba(127,201,154, 0.5);
    }
    #menu .sous-menu{ 
        display: none;
        margin-top: -2px;
        padding: 0;
    }
    #menu .sous-menu li{
        width: 100%;
        height: 20px;
        display: block;
    }
    #menu .sous-menu li a {
        width: 100%;
        height: 20px;
        display: block;
        background-color: #fff;
        font-family: Helvetica Constantia, "Lucida Bright", "DejaVu Serif", Georgia, "serif";
        font-size: 0.7em;
        line-height: 20px;
        color: #6E4712;
        text-align: center;
        text-decoration: none;
    }
    #menu .sous-menu li a:hover{
        color: rgba(127,201,154, 0.5);
    }
    #menu li:hover .sous-menu{ 
        display: block;
    }
    

    【讨论】:

    • 我确实同意它可以自行工作,但“位置:绝对”的重点是将它置于其他未定位的元素之上。在保持绝对值的同时可以吗?
    • 如果需要“位置:绝对”,则必须指定宽度,例如,#menu li:hover .sous-menu{ display: block; position: absolute; width: calc(61.5% / 5 - 1%); }
    • 哦哦。这在 62% 时完美运行,61.5% 似乎有点偏离。非常感谢!请问你在这里做的数学是什么?这是因为#menu 上的宽度为 60% 吗?
    • 是的。使用“位置:绝对”,包含块会发生变化,因此有点偏离。这是MDN中更多信息的链接。
    • 非常有帮助,再次感谢
    猜你喜欢
    • 1970-01-01
    • 2018-09-04
    • 2017-12-11
    • 2016-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-20
    • 2012-07-12
    相关资源
    最近更新 更多