css etiket genişliği etkili olmuyor


112

Etiketleri ve giriş alanlarını hizalamak için stil vermek istediğim genel bir formum var. Bazı nedenlerden dolayı etiket seçiciye bir genişlik verdiğimde hiçbir şey olmuyor:

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

Çıktı:

görüntü açıklamasını buraya girin

jsFiddle

Neyi yanlış yapıyorum?


Bu arada, form bölümlerini <p>etiketlere sarmak gerçekten iyi bir fikir mi?
JGallardo

Yanıtlar:


215

Yapın display: inline-block:

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

http://jsfiddle.net/aqMN4/


1
Satır içi blokla yapıştırın. IE7, IE8, IE9, FF'de test edildi
Davis

1
Her öğeyi <p> ​​içine yerleştirmenin bir çözümü var mı?
Colin D

1
@ColinD <p> etiketlerini değil div'leri kullanmanızı öneririm.
Davis

37

kullanım display: inline-block;

Açıklama:

labelOlması gerekenden gibi sadece büyük gibidir, yani bir satır içi unsurdur.

displayÖzelliğin yürürlüğe girmesi için özelliği ya inline-blockveya blockolarak ayarlayın width.

Misal:

#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
Teşekkürler! satır içi blok ihtiyacım olan şeydi. Block, tuhaf görünmesini sağlıyor.
TheOne

2
Satır içi blok desteğinin IE8'in altındaki IE'de kabataslak olduğunu unutmayın - muhtemelen bu günlerde çok fazla sorun değil, ancak akılda tutulması gereken bir şey. (kaynak quirksmode.org/css/display.html )
n00dle

1
@PandaWood Üzgünüm, bu yazıya yorum yapalı neredeyse 2 yıl oldu. Ancak, diğer okuyucuların bu yazının yazarının verdiği açıklama ile yanlış yönlendirilmemesi için yorumunuza cevap veriyorum. İkincisi, labelöğenin widthbir satır içi öğe olduğu için özelliğe saygı duymadığını düşündü. inputÖğenin aynı zamanda varsayılan olarak bir satır içi öğe olduğunu belirtmek isterim . Ancak genişliğinin, labelöğeden farklı olarak width özelliği kullanılarak değiştirilmesine izin verir . Dolayısıyla yazarın mantığı doğru değil.
ghd

6

Etiketlerin satır içi olduğuna inanıyorum ve bu yüzden bir genişlik almıyorlar. Belki "display: block" kullanmayı ve oradan gitmeyi deneyin.


6

Önce bir blok yapın, ardından bir sonraki bloğu yeni bir satıra itmeyi durdurmak için sola süzün.

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


4

labelvarsayılan displaymodu inline, yani kendisini içeriğine göre otomatik olarak boyutlandırıyor. Bir genişliği ayarlamak için ayarlamanız display:blockve ardından doğru konumlandırmak için biraz kafa karıştırmanız gerekir (muhtemelen dahil float)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.