Bir html radyo düğmesini etiketine dikey olarak nasıl hizalayabilirim?


97

Etiketleri ile aynı satırda bulunan radyo düğmelerine sahip bir formum var. Ancak radyo düğmeleri, aşağıdaki ekran görüntüsünde gösterildiği gibi etiketleriyle dikey olarak hizalanmamıştır.

Radyo düğmeleri.

Radyo düğmelerini etiketleriyle dikey olarak nasıl hizalayabilirim?

Düzenle:

İşte html kodu:

<input checked="checked" type="radio" name="user_level" id="rd1" value="1"/>
<label for="rd1">radio 1</label><br/>
<input type="radio" name="user_level" id="rd2" value="2"/>
<label for="rd2">radio 2</label><br/>
<input type="radio" name="user_level" id="rd3" value="3"/>
<label for="rd3">radio 3</label><br/>

Ve css kodu:

label{
    padding:5px;
    color:#222;
    font-family:corbel,sans-serif;
    font-size: 14px;
    margin: 10px;
}

1
Kodunuz şu anda nasıl görünüyor?
George

@ninjacoder Sorunuzu kodla güncelleyin.
Muthu Kumaran

Yanıtlar:


152

Bunu dene:

input[type="radio"] {
  margin-top: -1px;
  vertical-align: middle;
}

9
Bu benim için çalıştı, ancak height= 100%;ana öğem açıkça yüksekliği ayarlamadığından bir eklemek zorunda kaldım .
DaKaZ

1
Bu bana Chrome, Firefox veya IE kullanarak Mac, Windows ve Linux arasında en tutarlı yaklaşımı veriyor gibiydi. Ayrıca, etiketime dolgu verirsem ve radyoyu etiketin içine koyarsam, ne kadar dolgu kullandığıma bağlı olarak margin-top'u -1px'den (-3px gibi) daha küçük bir değere ayarlamam gerekebileceğini fark ettim. bu etiket. (Radyo kutusu etiketlerime daha soğuk görünmeleri için bir vurgulu renk ve yuvarlatılmış kenarlık efekti vermeyi
seviyorum

3
Bunun neden tek doğru cevap olduğunu açıklamak için: HTML'deki bazı öğelerin, <p> veya <li> öğeleri veya radyo düğmeleri gibi varsayılan kenar boşluğu veya dolgu değerleri vardır. Geliştirici moduna (F12) geçerseniz ve farenizi etiketin üzerine getirdiğinizde bunu görebilirsiniz. Aslında, bu iyi bir davranış çünkü tarayıcının kendisi, kullanıcının daha sonra sıfırlayabileceği önceden tanımlanmış öğeleri konumlandırmak için CSS kullanıyor. Ancak en başta bir şeyin neden yanlış hizalandığını bilmiyorsanız kafa karıştırıcı olabilir. Bu nedenle, varsayılan olarak tuhaf görünüyorsa, her zaman belirlemediğiniz ayarların üzerine yazmaya çalışın.
StanE

Yazı tipi boyutunu artırdığınızda veya azalttığınızda bu işe yaramıyor gibi görünüyor. Lütfen çalışan bir örnekle yanlış olduğumu kanıtlayın!
Protector one

15
input {
    display: table-cell;
    vertical-align: middle
}

Tüm radyolara sınıf koyun. Bu html sayfasındaki tüm radyo düğmeleri için çalışacaktır.

Vaktini boşa harcamak


Bu, bunun için gördüğüm en iyi çözüm. Radyo Düğmesi Etiket Hizalama, bu zamana kadar yıllarca beni rahatsız etti. Benim için her zaman işe yarar.
G-Man

Etikette birden çok metin satırı olduğunda bunun bozulacağını unutmayın.
Daan

Fiddle örneğiniz aynı zamanda padding: 0; margin: 0girdi öğeleri için de geçerlidir ve doğru hizalamayı elde etmek için gerekli görünmektedir.
Emmanuel Bourg

14

Menuka devinda'nın cevabını seçtiğimi biliyorum ama altındaki yorumlara baktığımda hemfikir oldum ve daha iyi bir çözüm bulmaya çalıştım. Bunu bulmayı başardım ve bence bu çok daha şık bir çözüm:

input[type='radio'], label{   
    vertical-align: baseline;
    padding: 10px;
    margin: 10px;
 }

Cevap veren herkese teşekkürler, cevabınız gözden kaçmadı. Hala başka fikirleriniz varsa, bu soruya kendi cevabınızı eklemekten çekinmeyin.


9

eklemeyi deneyin vertical-align:topcss içine

label{
    padding:5px;
    color:#222;
    font-family:corbel,sans-serif;
    font-size: 14px;
    margin: 10px;
    vertical-align:top;
}​

Test: http://jsfiddle.net/muthkum/heAWP/


1
Yazı tipi boyutunu artırdığınızda veya azalttığınızda bu devam etmez.
Koruyucu bir

@Protectorone Bu eski bir cevap ve OP sorusuna özgü. Aynı şeyi yapmaya çalışıyorsanız, font-sizekullanmayı deneyin display:flex. İşte bir demo, jsfiddle.net/et8z47q5
Muthu Kumaran

8

Cevaplara biraz esneklik katabilir.

.Radio {
  display: inline-flex;
  align-items: center;
}

.Radio--large {
  font-size: 2rem;
}

.Radio-Input {
  margin: 0 0.5rem 0;
}
<div>
  <label class="Radio" for="sex-female">
    <input class="Radio-Input" type="radio" id="sex-female" name="sex" value="female" />
    Female
  </label>

  <label class="Radio" for="sex-male">
    <input class="Radio-Input" type="radio" id="sex-male" name="sex" value="male" />
    Male
  </label>
</div>


<div>
  <label class="Radio Radio--large" for="sex-female2">
    <input class="Radio-Input" type="radio" id="sex-female2" name="sex" value="female" />
    Female
  </label>

  <label class="Radio Radio--large" for="sex-male2">
    <input class="Radio-Input" type="radio" id="sex-male2" name="sex" value="male" />
    Male
  </label>
</div>


7

Bunu beğenebilirsin:

input {
    vertical-align:middle;
}

label{
    color:#222;
    font-family:corbel,sans-serif;
    font-size: 14px;
}

Çok iyi. Etiket yerine düğmeyi hizalamak istedim ve bu hile yapıyor.
posfan12

2

Girişleri etiketlerin içine koymayı seviyorum (ek bonus: artık foretiketin üzerindeki niteliğe ihtiyacınız yok) ve girişi ekleyin vertical-align: middle.

label > input[type=radio] {
    vertical-align: middle;
    margin-top: -2px;
}

#d2 {  
    font-size: 30px;
}
<div>
	<label><input type="radio" name="radio" value="1">Good</label>
	<label><input type="radio" name="radio" value="2">Excellent</label>
<div>
<br>
<div id="d2">
	<label><input type="radio" name="radio2" value="1">Good</label>
	<label><input type="radio" name="radio2" value="2">Excellent</label>
<div>

(Bu -2px margin-topbir zevk meselesidir.)

Gerçekten sevdiğim bir başka seçenek de masa kullanmak. (Atış çatallarınızı tutun! Gerçekten güzel!) Bu, fortüm etiketlerinize ve idgirişlerinize nitelik eklemeniz gerektiği anlamına gelir . Bu seçeneği, çok satırlı uzun metin içeriğine sahip etiketler için tavsiye ettim.

<table><tr><td>
    <input id="radioOption" name="radioOption" type="radio" />
    </td><td>
    <label for="radioOption">                     
        Really good option
    </label>
</td></tr></table>


1

Bunun gibi bir şey çalışmalı

CSS:

input {
    float: left;
    clear: left;
    width: 50px;
    line-height: 20px;
}

label {
    float: left;
    vertical-align: middle;
}

1
label, input {
    vertical-align: middle;
}

Sadece kutuların dikey orta noktasını üst kutunun taban çizgisi artı ebeveynin x yüksekliğinin yarısı (en.wikipedia.org/wiki/X-height) ile hizalıyorum.


1

Bu yanıtların birçoğu vertical-align: middle;, hizalamayı yaklaştıran, ancak benim için hala birkaç pikselle kapalı olduğunu söylüyor. Etiketler ve radyo girişleri arasında gerçek 1'e 1 hizalama elde etmek için kullandığım yöntem şudur vertical-align: top;:

label, label>input{
    font-size: 20px;
    display: inline-block;
    margin: 0;
    line-height: 28px;
    height: 28px;
    vertical-align: top;
}
<h1>How are you?</h1>
<fieldset>
	<legend>Your response:</legend>
	<label for="radChoiceGood">
		<input type="radio" id="radChoiceGood" name="radChoices" value="Good">Good
	</label>
	
	<label for="radChoiceExcellent">
		<input type="radio" id="radChoiceExcellent" name="radChoices" value="Excellent">Excellent
	</label>
	
	<label for="radChoiceOk">
		<input type="radio" id="radChoiceOk" name="radChoices" value="OK">OK
	</label>
</fieldset>


0

Tabloların tasarım düzenleri için kullanılmaması gerektiğine katılıyorum, ancak genel inanışın aksine, geçerliliğini geçerler. yani tablo etiketi kullanımdan kaldırılmamıştır. Radyo düğmelerini hizalamanın en iyi yolu, orta CSS'yi giriş öğelerinde ayarlanmış kenar boşluklarıyla dikey hizalama kullanmaktır.


-1

display:inline-blockEtiketlere eklemek ve vermek padding-topbunu düzeltir sanırım. Ayrıca, sadece line-heightetiketleri ayarlamak da olur.


-2

Birkaç yol var, tercih edeceğim bir tanesi html'de bir tablo kullanmaktır. iki sütun üç sıra tablo ekleyebilir ve radyo düğmelerini ve etiketi yerleştirebilirsiniz.

<table border="0">

<tr>
  <td><input type="radio" name="sex" value="1"></td>
  <td>radio1</td>

</tr>
<tr>
  <td><input type="radio" name="sex" value="2"></td>
  <td>radio2</td>

</tr>
</table>

6
Lütfen tabloları yerleşim amacıyla kullanmayın.
PeeHaa

4
Düzen için -1 tablo kullanılmamalıdır ve bu kod doğrulamayı geçemez ... @ninjacoder, neden bunu "cevap" olarak seçtiniz?
tereško

7
Gerçekten .. cidden .. ne zaman birisi form işaretlemesi için tablo kullanmayı
öğretirse

2
@PeeHaa, tereško, Damien Overeem Sanırım siz muhtemelen haklısınız, aşağıda yayınladığım kendi çözümümü bulabildim. Teşekkürler beyler! Yardımınız ve tavsiyeleriniz çok takdir edilmektedir.
ninjacoder

3
Diğer seçenekleri denedim ve pek iyi değillerdi. Masalar çalışır. .tablecell{dispay:table-cell;} ... <div class="tablecell">daha çok tablo kullandıklarını kabul etmek istemeyenler için sakat bir çözüm gibi görünüyor ...
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.