为什么每个颜色都会在我的菜单栏中填入各自的框?

时间:2015-05-20 23:07:09

标签: html css margin padding

我的最终目标是点击每个框时,会显示背景颜色。当我为此添加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; 
    }

2 个答案:

答案 0 :(得分:4)

您需要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视为创建内部空白。

答案 1 :(得分:0)

我建议您删除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;
}