ความกว้างของฉลาก 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

คำตอบ:


215

ทำ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> แท็ก
Davis

37

ใช้ display: inline-block;

คำอธิบาย:

labelเป็นองค์ประกอบแบบอินไลน์ซึ่งหมายความว่ามันเป็นเพียงเป็นใหญ่เป็นที่จะต้องมี

ตั้งค่าdisplayคุณสมบัติเป็นอย่างใดอย่างหนึ่งinline-blockหรือblockเพื่อให้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

2
โปรดทราบว่าการสนับสนุนของอินไลน์บล็อกนั้นไม่สมบูรณ์ใน IE ที่ต่ำกว่า IE8 ซึ่งอาจจะไม่ใช่ปัญหามากนักในทุกวันนี้ แต่มีบางอย่างที่ควรคำนึงถึง (ที่มาquirksmode.org/css/display.html )
n00dle

1
@PandaWood ขออภัยเป็นเวลาเกือบ 2 ปีแล้วที่คุณแสดงความคิดเห็นในโพสต์นี้ แต่ฉันกำลังตอบกลับความคิดเห็นของคุณเพื่อไม่ให้ผู้อ่านคนอื่นเข้าใจผิดจากคำอธิบายของผู้เขียนโพสต์นี้ หลังได้ให้เหตุผลว่าlabelองค์ประกอบนั้นไม่เคารพwidthคุณสมบัติเนื่องจากเป็นองค์ประกอบแบบอินไลน์ ฉันอยากจะชี้ให้เห็นว่าinputองค์ประกอบนั้นเป็นองค์ประกอบแบบอินไลน์โดยค่าเริ่มต้น แต่อนุญาตให้เปลี่ยนความกว้างได้โดยใช้คุณสมบัติความกว้างซึ่งแตกต่างจากlabelองค์ประกอบ ดังนั้นการให้เหตุผลของผู้เขียนจึงไม่ถูกต้อง
ghd

6

ฉันเชื่อว่าป้ายกำกับอยู่ในบรรทัดดังนั้นจึงไม่ใช้ความกว้าง อาจลองใช้ "display: block" แล้วไปจากที่นั่น


6

ทำให้เป็นบล็อกก่อนจากนั้นลอยไปทางซ้ายเพื่อหยุดการดันบล็อกถัดไปไปยังบรรทัดใหม่

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


4

labeldisplayโหมดเริ่มต้นคือinlineซึ่งหมายความว่ามันจะปรับขนาดให้เข้ากับเนื้อหาโดยอัตโนมัติ ในการตั้งค่าความกว้างคุณจะต้องตั้งค่าdisplay:blockแล้วทำการ faff เพื่อให้อยู่ในตำแหน่งที่ถูกต้อง (อาจเกี่ยวข้องกับfloat)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.