chiều rộng nhãn css không có hiệu lực


112

Tôi có một biểu mẫu chung, tôi muốn tạo kiểu để căn chỉnh các nhãn và các trường đầu vào. Vì một số lý do khi tôi cung cấp chiều rộng cho bộ chọn nhãn, không có gì xảy ra:

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;
}

Đầu ra:

nhập mô tả hình ảnh ở đây

jsFiddle

Tôi đang làm gì sai?


Nhân tiện, gói các phần biểu mẫu trong <p>thẻ có thực sự là một ý tưởng hay không?
JGallardo

Câu trả lời:


215

Làm display: inline-block:

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

http://jsfiddle.net/aqMN4/


1
Gắn bó với Inline-block. Đã kiểm tra nó trong IE7, IE8, IE9, FF
Davis

1
Có cách giải quyết nào để đặt mỗi phần tử trong một <p> không?
Colin D

1
@ColinD Tôi khuyên bạn nên sử dụng thẻ div, không phải thẻ <p>.
Davis

37

Sử dụng display: inline-block;

Giải trình:

labelmột phần tử nội tuyến, có nghĩa là nó chỉ lớn đến mức cần thiết.

Đặt thuộc displaytính thành một trong hai inline-blockhoặc blockđể thuộc widthtính có hiệu lực.

Thí dụ:

#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
Cảm ơn! khối nội tuyến là những gì tôi cần. Khối làm cho nó trông kỳ lạ.
TheOne

2
Cần biết rằng sự hỗ trợ của khối nội tuyến còn sơ sài trong IE bên dưới IE8 - có lẽ không phải là vấn đề quá lớn hiện nay, nhưng cần lưu ý một số điều. (nguồn quirksmode.org/css/display.html )
n00dle

1
@PandaWood Xin lỗi, đã gần 2 năm kể từ khi bạn nhận xét về bài đăng này. Tuy nhiên, tôi đang trả lời bình luận của bạn để những độc giả khác không bị hiểu nhầm bởi lời giải thích của tác giả bài đăng này. Sau đó đã lý luận rằng labelphần tử không tôn trọng thuộc widthtính bởi vì nó là một phần tử nội tuyến. Tôi muốn chỉ ra rằng inputphần tử cũng là một phần tử nội tuyến theo mặc định. Nhưng nó cho phép thay đổi chiều rộng của nó bằng cách sử dụng thuộc tính width không giống như labelphần tử. Do đó lập luận của tác giả là không đúng.
ghd

6

Tôi tin rằng các nhãn nằm trong dòng và vì vậy chúng không có chiều rộng. Có thể thử sử dụng "display: block" và bắt đầu từ đó.


6

Đặt nó thành một khối trước, sau đó thả trôi sang trái để dừng đẩy khối tiếp theo sang một dòng mới.

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


4

labeldisplayChế độ mặc định của nó là inline, có nghĩa là nó tự động định cỡ cho nội dung của nó. Để đặt chiều rộng, bạn sẽ cần đặt display:blockvà sau đó thực hiện một số thao tác để đặt nó đúng vị trí (có thể liên quan đến float)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.