CSS标签宽度不起作用


112

我有一个通用表单,我想对它进行样式设置以对齐标签和输入字段。由于某种原因,当我给标签选择器指定宽度时,什么也没发生:

HTML:

<form id="report-upload-form" method="POST" action="" enctype="multipart/form-data">
    <p>
        <label for="id_title">Title:</label> 
        <input id="id_title" type="text" class="input-text" name="title"></p>
    <p>
        <label for="id_description">Description:</label> 
        <textarea id="id_description" rows="10" cols="40" name="description"></textarea></p>
    <p>
        <label for="id_report">Upload Report:</label> 
        <input id="id_report" type="file" class="input-file" name="report">
    </p>
</form>

CSS:

#report-upload-form {
    background-color: #316091;
    color: #ddeff1;
    font-weight:bold;
    margin: 23px auto 0 auto;
    border-radius:10px;
    width: 650px;
    box-shadow:  0 0 2px 2px #d9d9d9;
}

#report-upload-form label {
    padding-left:26px;
    width:125px;
    text-transform: uppercase;
}

#report-upload-form input[type=text], 
#report-upload-form input[type=file],
#report-upload-form textarea {
    width: 305px;
}

输出:

在此处输入图片说明

jsFiddle

我究竟做错了什么?


顺便说一句,将表单部分包装在<p>标签中真的是一个好主意吗?
JGallardo 2014年

Answers:


214

display: inline-block

#report-upload-form label {
    padding-left:26px;
    width:125px;
    text-transform: uppercase;
    display:inline-block
}

http://jsfiddle.net/aqMN4/


1
坚持使用内联块。在IE7,IE8,IE9,FF中进行了测试
戴维斯(Davis)

1
是否存在将每个元素放在<p>中的解决方法?
Colin D

1
@ColinD我建议使用div,而不是<p>标记。
戴维斯

36

display: inline-block;

说明:

label是一个内联元素,这意味着它只是大,因为它必须这样做。

将该display属性设置为inline-blockblock以使该width属性生效。

例:

#report-upload-form {
    background-color: #316091;
    color: #ddeff1;
    font-weight: bold;
    margin: 23px auto 0 auto;
    border-radius: 10px;
    width: 650px;
    box-shadow: 0 0 2px 2px #d9d9d9;

}

#report-upload-form label {
    padding-left: 26px;
    width: 125px;
    text-transform: uppercase;
    display: inline-block;
}

#report-upload-form input[type=text], 
#report-upload-form input[type=file],
#report-upload-form textarea {
    width: 305px;
}
<form id="report-upload-form" method="POST" action="" enctype="multipart/form-data">
    <p><label for="id_title">Title:</label> <input id="id_title" type="text" class="input-text" name="title"></p>
    <p><label for="id_description">Description:</label> <textarea id="id_description" rows="10" cols="40" name="description"></textarea></p>
    <p><label for="id_report">Upload Report:</label> <input id="id_report" type="file" class="input-file" name="report"></p>
</form>


1
谢谢!内联块是我需要的。块使它看起来很奇怪。
TheOne 2012年

2
请注意,在IE8以下的IE中,对inline-block的支持是粗略的-如今这些问题可能不会太多,但要记住一些事情。(源quirksmode.org/css/display.html
n00dle

1
@PandaWood对不起,自您对这篇文章发表评论以来已经快两年了。但是,我要回复您的评论,以免其他读者被本文作者的解释所误导。后者认为该label元素不尊重width属性,因为它是一个内联元素。我想指出input,默认情况下该元素也是一个内联元素。但是与label元素不同,它允许使用width属性更改其宽度。因此,作者的推理是不正确的。
ghd

6

我相信标签是内联的,因此它们不会占用宽度。也许尝试使用“显示:块”并从那里去。


6

首先使其成为一个块,然后向左浮动以停止将下一个块推入新行。

#report-upload-form label {
                           padding-left:26px;
                           width:125px;
                           text-transform: uppercase;
                           display:block;
                           float:left
}


4

label的默认display模式是inline,这意味着它将自动调整其大小以适应其内容。要设置宽度,您需要先进行设置display:block,然后进行一些设置以使其正确定位(可能涉及float

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.