代码之家  ›  专栏  ›  技术社区  ›  b. e. hollenbeck

奇怪的CSS边距问题

  •  1
  • b. e. hollenbeck  · 技术社区  · 15 年前

    我正在设计一个由客户设计的具有以下结构的表单:

    <div class="formRow">
        <div class="fieldName">
            Email
        </div>
        <div class="fieldInput">
            <input .../>
        </div>
    </div>
    

    表单的宽度为500px,但是fieldname div和fieldinput div堆栈相互重叠,而不是并排放置。这是因为(至少在chrome和firefox中),fieldname div得到了340px的计算右边距,占据了表单的整个宽度。

    我也不能无视这种行为。输入10px的页边距权限没有任何作用。而将DIV的宽度设置为一个硬数字或百分比只会更改内部宽度,而不会更改奇怪的右边距。

    我遇到什么CSS头痛,这里?

    顺便说一句,这是CSS:

    .formRow{
        padding: 3px 0 3px 0;
        position: relative;
        height: auto;
        width: 100%;
    }
    
    .fieldName{
            font-size: 12px;
            margin-left: 10px;
            margin-right: 10px;
            width: 100px;
    
    }
    
    .fieldInput{
            width: 200px;
    }
    
    3 回复  |  直到 15 年前
        1
  •  2
  •   Nick    15 年前

    在示例代码中需要注意的一点是,您过度使用了div。相同的代码可以这样编写:

    <div class="formRow">
        <label class="fieldName">Email</label>
        <input class="fieldInput" .../>
    </div>
    

    或者,更好的是:

    <style type="text/css">
        UL, UL LI
        {
            margin: 0px;
            padding: 0px;
         }
    
        UL LI
        {
            list-style: none;
        }
    
    .fieldName{
            font-size: 12px;
            margin-left: 10px;
            margin-right: 10px;
            width: 100px;
    
    }
    
    .fieldInput{
            width: 200px;
    }
    </style>
    
    <ul>
        <li><label class="fieldName">Email</label>
            <input class="fieldInput" .../></li>
         ...
    </ul>
    

    通过对两个部分使用DIV标记,您违反了标记的语义含义,即“页面的这一部分与其他部分不同”。您真正要做的是设置表单的样式。 label 不同于你的 Input 我们已经有了标签来描述这些。

        2
  •  0
  •   Nir Levy    15 年前

    尝试添加

    .fieldName {display: inline}
    

    .fieldInput {display: inline}
    

    或两者

        3
  •  0
  •   Andy Mikula Eric Mickelsen    15 年前

    如果添加 display: inline; 对于每个元素,这将允许它们并排放置。因为它们被渲染为 block 默认情况下,浏览器会将元素放在自己的行上。

    .fieldName{
        font-size: 12px;
        margin-left: 10px;
        margin-right: 10px;
        width: 100px;
        display: inline;    
    }
    
    .fieldInput{
        width: 200px;
        display: inline;
    }