Wie richte ich ein HTML-Radio-Button vertikal an seinem Label aus?

Lesezeit: 6 Minuten

Benutzer-Avatar
Ninjacoder

Ich habe ein Formular mit Optionsfeldern, die sich in derselben Zeile wie ihre Beschriftungen befinden. Die Optionsfelder sind jedoch nicht vertikal an ihren Beschriftungen ausgerichtet, wie im folgenden Screenshot gezeigt.

Die Radiobuttons.

Wie kann ich die Optionsfelder vertikal an ihren Beschriftungen ausrichten?

Bearbeiten:

Hier ist der HTML-Code:

<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/>

Und der CSS-Code:

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

  • Wie sieht dein Code im Moment aus?

    – George

    22. November 2012 um 9:52 Uhr

  • @ninjacoder Aktualisieren Sie Ihre Frage mit dem Code.

    – Muthu Kumaran

    22. November 2012 um 9:54 Uhr

Versuche dies:

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

  • Dies funktionierte für mich, aber ich musste a hinzufügen height= 100%; da mein übergeordnetes Element die Höhe nicht explizit festgelegt hat.

    – DaKaZ

    5. Dezember 2014 um 17:11 Uhr

  • Dies schien mir der konsistenteste Ansatz zwischen Mac, Windows und Linux mit Chrome, Firefox oder IE zu sein. Außerdem ist mir aufgefallen, dass ich, wenn ich mein Etikett auffülle und das Radio in das Etikett platziere, den Wert margin-top möglicherweise auf einen Wert von weniger als -1px (z. B. -3px) setzen muss, je nachdem, wie viel Auffüllung ich verwendet habe auf dieses Etikett. (Ich gebe meinen Radiobox-Etiketten gerne eine Hover-Farbe und einen abgerundeten Randeffekt, damit sie cooler aussehen.)

    – Wolomike

    9. Mai 2016 um 0:26 Uhr

  • Um zu erklären, warum dies die einzig richtige Antwort ist: Einige Elemente in HTML haben standardmäßige Rand- oder Auffüllwerte, wie die Elemente

    oder

  • oder Optionsfelder. Sie können dies sehen, wenn Sie in den Entwicklermodus (F12) gehen und mit der Maus über das Tag fahren. Eigentlich ein gutes Verhalten, da der Browser selbst CSS verwendet, um vordefinierte Elemente zu positionieren, die der Benutzer dann zurücksetzen kann. Aber es kann verwirrend sein, wenn Sie nicht wissen, warum etwas falsch ausgerichtet ist. Versuchen Sie also immer, Einstellungen zu überschreiben, die Sie nicht vorgenommen haben, wenn es standardmäßig seltsam aussieht.

    – StanE

    9. Oktober 2016 um 19:52 Uhr


  • Dies scheint nicht zu funktionieren, wenn Sie die Schriftgröße erhöhen oder verringern. Bitte beweisen Sie mir das Gegenteil mit einem funktionierenden Beispiel!

    – Beschützer eins

    19. Juni 2017 um 12:34 Uhr

  • Ich weiß, dass ich die Antwort von menuka devinda ausgewählt hatte, aber als ich mir die Kommentare darunter ansah, stimmte ich zu und versuchte, eine bessere Lösung zu finden. Ich habe es geschafft, darauf zu kommen und meiner Meinung nach ist es eine viel elegantere Lösung:

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

    Vielen Dank an alle, die eine Antwort angeboten haben, Ihre Antwort blieb nicht unbemerkt. Wenn Sie noch weitere Ideen haben, können Sie dieser Frage gerne Ihre eigene Antwort hinzufügen.

    Benutzer-Avatar
    vusan

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

    Setzen Sie Klasse für alle Radio. Dies funktioniert für alle Optionsfelder auf der HTML-Seite.

    Geige

    • Dies ist bei weitem die beste Lösung, die ich dafür gesehen habe. Radio Button Label Alignment hat mich bis dahin jahrelang geplagt. Funktioniert bei mir jedesmal.

      – G-Man

      10. August 2018 um 16:22 Uhr

    • Beachten Sie, dass dies unterbrochen wird, wenn das Etikett mehrere Textzeilen enthält.

      – Dan

      11. August 2020 um 14:55 Uhr

    • Ihr Fiddle-Beispiel trifft ebenfalls zu padding: 0; margin: 0 zu den Eingabeelementen, und es scheint erforderlich zu sein, die richtige Ausrichtung zu erhalten.

      – Emmanuel Burg

      1. September 2020 um 23:51 Uhr

    Benutzer-Avatar
    Dominik

    Könnte den Antworten auch ein bisschen Flex hinzufügen.

    .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>

    versuchen Sie es hinzuzufügen vertical-align:top ins CSS

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

    Prüfen: http://jsfiddle.net/muthkum/heAWP/

    • Dies gilt nicht, wenn Sie die Schriftgröße erhöhen oder verringern.

      – Beschützer eins

      19. Juni 2017 um 12:35 Uhr

    • @Protectorone Das ist eine alte Antwort und spezifisch für die OP-Frage. Wenn Sie versuchen, dasselbe mit zu tun font-size dann versuchen Sie es mit display:flex. Hier ist eine Demo, jsfiddle.net/et8z47q5

      – Muthu Kumaran

      19. Juni 2017 um 16:45 Uhr

    Benutzer-Avatar
    dallin

    Sie können folgendermaßen vorgehen:

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

    • Dies gilt nicht, wenn Sie die Schriftgröße erhöhen oder verringern.

      – Beschützer eins

      19. Juni 2017 um 12:35 Uhr

    • @Protectorone Das ist eine alte Antwort und spezifisch für die OP-Frage. Wenn Sie versuchen, dasselbe mit zu tun font-size dann versuchen Sie es mit display:flex. Hier ist eine Demo, jsfiddle.net/et8z47q5

      – Muthu Kumaran

      19. Juni 2017 um 16:45 Uhr

    Ich füge die Eingaben gerne in die Etiketten ein (zusätzlicher Bonus: Jetzt brauchen Sie die for Attribut auf dem Etikett) und setzen vertical-align: middle am Eingang.

    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>

    (Das -2px margin-top ist geschmackssache.)

    Eine andere Option, die ich sehr mag, ist die Verwendung einer Tabelle. (Halten Sie Ihre Pitch Forks! Es ist wirklich schön!) Es bedeutet, dass Sie die hinzufügen müssen for Attribut für alle Ihre Labels und ids zu Ihren Eingaben. Ich habe diese Option für Labels mit langem Textinhalt über mehrere Zeilen empfohlen.

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

    1326130cookie-checkWie richte ich ein HTML-Radio-Button vertikal an seinem Label aus?

    This website is using cookies to improve the user-friendliness. You agree by using the website further.

    Privacy policy