【问题标题】:Last <li> Not Inline, Messes up the Size of it最后一个 <li> 不是内联,弄乱了它的大小
【发布时间】:2015-10-02 11:29:09
【问题描述】:

所以对于我的网页,我正在从头开始制作一个下拉菜单。所以我有一个包含 5 个列表项和一个徽标的标题。我们将列表项称为 tab1、tab2、tab3、tab4 和 tab5。我的目标是让 tab1、tab2、tab3、tab4 和徽标内联显示,但让 tab5 显示在 tab4 的正下方。为此,我将前 4 个选项卡和徽标设置为具有属性 display: inline-block 和第 5 个选项卡仅显示:块。这解决了在其他选项卡和徽标下显示第五个选项卡的问题,尽管第五个选项卡不保留与其他选项卡相同的宽度,即使它们被归类为同一类 .tab。最终发生的是第五个选项卡变成了正文的宽度。我试图通过手动设置选项卡的左右填充来解决此问题,但这不起作用。有没有办法让第五个选项卡的行为/显示与其他选项卡完全一样(宽度、高度等),而不是内联显示?

这是我的html:

<div class="header">
    <a class="tab" id="tab1"><li>Home</li></a>
    <a class="tab" id="tab2"><li>About</li></a>
    <img src="images/logo.png" id="logo" width="260px" height="95px;"/>
    <a class="tab" id="tab3"><li>Menu</li></a>
    <a class="tab" id="tab4"><li>Order</li></a>
    <a class="tab" id="tab5"><li>Cater</li></a>
</div>

这是我的 CSS:

li {
    list-style-type: none;
}
.header{
    text-align: center;
    background-color: red;
}
.tab, #logo{
    padding-right: 2.4%;
    padding-left: 2.4%;
    display: inline-block;
    vertical-align: middle;
    border: 2px solid black;
}
#tab5{
    margin-top: 10px;
    display: block;
}

这是一个 jsfiddle 演示:https://jsfiddle.net/gobtt6vk/

谢谢!

【问题讨论】:

    标签: html css html-lists


    【解决方案1】:

    试试这个更新的代码...

    CSS:

    li {
        list-style-type: none;
    }
    .header{
        text-align: center;
        background-color: red;
    }
    .tab, #logo{
        padding-right: 2.4%;
        padding-left: 2.4%;
        display: inline-block;
        vertical-align: middle;
        border: 2px solid black;
    }
    #tab5{
        margin-top: 5p;
    }
    

    【讨论】:

    • 我在我的 codepen 上更新了我的答案,对不起,但试试那个 css
    • 这似乎无助于解决他的问题@Anonymous 也没有之前发布的Codepen 示例(这显然是题外话,与这个问题无关),唯一这段代码所做的是将margin-top:5px; 添加到#tab5
    • 我删除了你的 display:block;在你的#tab5
    【解决方案2】:

    #tab5 占据了 bodywidth 的 100%,因为 display:block; 就是这样做的。

    你可以给它一个width来解决这个问题,例如:

    #tab5 {
        display: block;
        width: 30px;
        margin: 10px auto 0 auto; /* this aligns #tab5 to center and also gives margin-top:10px; */
    }
    

    或者你可以通过给它一个display:table;而不是display:block;来解决它,这样你就不需要给它一个固定的width,它会根据文本自行调整。
    另外你的HTML结构应该改进一下,所以我在这里浪费了一点时间,为你重新整理了一下。

    这是一个在线示例:https://jsfiddle.net/wujncnsd/

    <div class="header">
        <ul>
            <li id="tab1" class="tab"><a>Home</a></li>
            <li id="tab2" class="tab"><a>About</a></li>
            <li id="logo">
                <img src="images/logo.png" width="260" height="95"/>
            </li>
            <li id="tab3" class="tab"><a>Menu</a></li>
            <li id="tab4" class="tab"><a>Order</a></li>
            <li id="tab5" class="tab"><a>Cater</a></li>
        </ul>
    </div>
    
    ul {margin: 0; padding: 0;}
    li {list-style-type: none;}
    
    .header{
        text-align: center;
        background-color: red;
    }
    .tab, #logo{
        padding-right: 2.4%;
        padding-left: 2.4%;
        display: inline-block;
        vertical-align: middle;
        border: 2px solid black;
    }
    #tab5{
        margin: 10px auto 0 auto;
        display: table;
    }
    

    【讨论】:

    • 好吧原来我错了,这并不完全符合我的要求。它使选项卡不会显示为具有 100% 的宽度,但它会删除在我的 CSS 的 .tab 部分中定义的所有填充,因为 display: table 会忽略以前给它的任何填充。也给它一个固定的宽度与 text-align: center 混淆。有没有办法保留填充以及 .tab 部分中的所有内容? @春
    • @Robbie:由于您希望按钮具有相同的宽度,因此请使用width 样式而不是依赖padding 来完成这项工作。在@Chun 的CSS 中添加.tab {padding: 0; width: 4em; box-sizing: border-box;} 即可解决问题:jsfiddle.net/8j3rpc5n
    • 好吧,我不知道为什么当我尝试给它一个设定的宽度时(正如他 Chun 在他的回答中所说的那样),文本对齐搞砸了,但现在我又试了一次,它正在工作.唔。不管怎样,谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-28
    • 2013-03-09
    • 2011-12-23
    • 2019-09-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多