为什么每种颜色都不会填充我的菜单栏中的相应框?

Why won't each color fill its respective box in my menu bar?

我的最终目标是在单击每个框时显示背景色。当我为此添加 Javascript 时,很明显背景颜色实际上并没有填满整个框。当没有颜色时,这并不明显。我该如何解决这个问题?

http://jsfiddle.net/k7rm33h7/

HTML:

    <div id="logo">Codeplayer</div>

    <ul class="toggle">

        <li id="htmlLi">HTML</li>
        <li id="cssLi">CSS</li>
        <li id="jsLi">JS</li>
        <li id="resultLi">Result</li>

    </ul>

        <button>Run</button>


</div>

CSS:

/* ----------- UNIVERSAL -----------*/

    a, body, html, ul, li, div, button {

        margin: 0;
        padding: 0;
        list-style: none; 
        font-family: helvetica; 
    }

    #logo, .toggle {
        line-height: 50px; 
    }



/* ----------- MENU BAR -----------*/

    #menu {
        background-color: #EDEBED; 
        width: 100%;
        height: 50px; 
        box-shadow: 1px 1px 1px #000000;
        position: absolute;


    }

/* ----------- LOGO -----------*/

    #logo {
        float: left;
        font-weight: bold; 
        margin-left: 15px; 
        font-size: 20px; 
        height: 20px;
        text-shadow: 1px 2px #000000; 
        color: #9d9d9a;
    }


/* ----------- TOGGLE BAR -----------*/

    .toggle li {
        list-style: none;
        float: left; 
        margin-left: 20px; 
        border-right: 1px solid black;  
        padding-right: 17px; 
        font-weight: bold; 
    }

    .toggle {
        margin: 0 auto;
        width: 300px; 
        height: 30px;
        line-height: 30px; 
        margin-top: 10px; 
        border: 1px solid black;
        box-shadow: 1px 1px 1px #000000;
        border-radius: 4px; 


    }

/* ----------- TOGGLE LIST ITEMS -----------*/

    #resultLi {
        border-right: none;
    }


/* ----------- BUTTON -----------*/

    button {
        float: right;
        margin-right: 15px; 
        height: 30px; 
        width: 50px; 
        position: relative;
        top: -30px;
        border-radius: 4px; 

    }

/* ----------- TEST -----------*/



    #htmlLi {
        background-color: red; 
    }

    #cssLi {
        background-color: green; 
    }

    #jsLi {
        background-color: yellow; 
    }

    #resultLi {
        background-color: blue; 
    }

你想要 padding-left 在你的 li 上,而不是 margin-left

.toggle li {
    list-style: none;
    float: left;
    padding-left: 20px; /* <-- padding-left */
    border-right: 1px solid black;
    padding-right: 17px;
    font-weight: bold;
}

这是因为元素的 background-color 没有延伸 到包含框的 之外。将 margin 视为创建 外部 空白,将 padding 视为创建 内部 空白。

我建议只删除 marginpadding,然后设置固定宽度并将内容居中。在我看来,管理起来要容易得多,而且会很好地工作,因为你的容器是固定的@ 300px。我还添加了 CSS 以从 last-child 中删除边框,因为它不需要。

JSFiddle

.toggle li {
    list-style: none;
    float: left;
    width: 74.2px; //fixed width allows you to center text exactly
    border-right: 1px solid black;   
    font-weight: bold; 
    text-align: center; //easy as pie
}
.toggle li:last-child {
    border: none;
}