Wie dehnt man das Eingabefeld auf volle Breite?

Lesezeit: 4 Minuten

Ich habe ein einfaches HTML-Formular. Ich möchte, dass die richtigen Widgets in der zweiten Spalte (Textfeld, Combox usw.) die gesamte Spalte strecken und ausfüllen.

Mein HTML sieht so aus:

<table class="formTable">
  <tr>
    <td class="col1">Report Number</td>
    <td class="col2"><input type="text"/></td>
  </tr>
  <tr>
    <td class="col1">Report Type</td>
    <td class="col2"><select></select></td>
  </tr>
</table>

Mein CSS sieht so aus:

.formTable {
  border-color: black;
}

.formTable td {
  padding: 10px;
}

.formTable .col1 {
  text-align: right;
}

.formTable .col2 {
  width: 100%;
}

Irgendwelche Ideen?

  • Vergessen Sie nicht das Schließen-Tag der zweiten Zelle in der ersten Spalte. 🙂

    – YMMT

    28. März 2012 um 15:32 Uhr

  • Ich denke, jeder hatte die Antwort.

    – tahdhaze09

    28. März 2012 um 15:43 Uhr

Sie können angeben, dass alle untergeordneten Elemente der Klasse “col2” eine Breite von 100 % haben, indem Sie Folgendes hinzufügen:

.col2 * { width:100%;}

Siehe mein Dabblet-Beispiel: http://dabblet.com/gist/2227353

Benutzer-Avatar
Matthew Darell

Beginnen Sie mit semantischem Markup, da es sich nicht um tabellarische Daten handelt. Außerdem benötigen wir mit hinzugefügten Labels keine zusätzlichen Wrapper-DIVs, was sauberer ist.

<ul class="formList">
    <li>
        <label for="input_1">
            Report Number
        </label>
        <input id="input_1" name="input_1" type="text" />
    </li>
    <li>
        <label for="input_2">
            Report Type
        </label>
        <select id="input_2" name="input_2"></select>
    </li>
</ul>

Fügen Sie dann das CSS hinzu:

.formList {
    border:1px solid #000;
    padding:10px;
    margin:10px;
}
label {
    width:200px;
    margin-left:-200px;
    float:left;
}
input, select {
    width:100%;
}
li {
    padding-left:200px;
}

Beispiel für JS-Geige: http://jsfiddle.net/6EyGK/

  • Es handelt sich um eine Reihe von Feld/Wert-Paaren ohne Überschriften und hinzugefügte Benutzereingaben. Das ist nicht tabellarisch.

    – Matthew Darell

    28. März 2012 um 16:00 Uhr

  • In dieser WhatWG-Spezifikation (whatwg.org/specs/web-apps/current-work/multipage/…) es sagt: The table element represents data with more than one dimension, in the form of a table. Schlüssel/Wert-Paare sind zweidimensional, daher ist die Tabelle für mich in Ordnung.

    – Yunzen

    28. März 2012 um 16:02 Uhr

  • Auf derselben Seite steht: „Tabellen dürfen nicht als Layout-Hilfsmittel verwendet werden.“ Würde die Verwendung von Tabellen zum Ausrichten eines Etiketts neben einer Eingabe nicht als steuerndes Seitenlayout anstelle eines ordnungsgemäß semantischen Codes dienen?

    – Matthew Darell

    28. März 2012 um 16:10 Uhr


  • Ich denke, Layout ist als “Seitenlayout” gemeint, was das Layout der bedeutet ganz Seite und nicht nur das Anordnen von Daten in einem Abschnitt der Seite.

    – Yunzen

    28. März 2012 um 16:12 Uhr

  • Das funktioniert gut, bis auf eine Sache: Sie verlieren die vertikale Grundlinienausrichtung zwischen Beschriftung und Eingabe. Gibt es eine Lösung, die in diese Richtung funktioniert, aber auch diese grundlegende Ausrichtung beibehält?

    – Kjell Rilbe

    27. August 2015 um 14:45 Uhr


Sie können Folgendes verwenden:

.col2 * {
    width: 100%;
}

Passend zu jedem .col2 Nachfahre. wie du sehen kannst hier. Oder:

.col2 > * {
    width: 100%;
}

Um nur die unmittelbaren Kinder abzugleichen.

wenn Sie Twitter verwenden Bootstrap: und die Eingabe befindet sich in einer Spalte

einfach ergänzen <input> das class="container-fluid"

Benutzer-Avatar
yunzen

Notiz

Dies ist keine Antwort, sondern ein Kommentar, der zu viel Code enthält, um in den Kommentarbereich zu gehen. Also unterlassen Sie es bitte, mich abzuwerten, ja? 🙂

Anderes semantisches Markup zusätzlich zu Matthew Darnells Antwort:

Wenn Sie die Beschriftungen um die Eingaben und Auswahlen wickeln, können Sie die Verwendung von vermeiden forund id Attribute.

<ul class="formList">
    <li>
        <label>
            Report Number
        <input name="input_1" type="text" />
        </label>
    </li>
    <li>
        <label>
            Report Type
        <select name="input_2"></select>
        </label>
    </li>
</ul>

Oder verwenden Sie eine Definitionsliste, die Ihnen zusätzliche Kontrolle gibt

<dl class="formList">
    <dt>
        <label for="input_1">
            Report Number
        </label>
    </dt>
    <dd>
        <input id="input_1" name="input_1" type="text" />
    </dd>
    <dt>
        <label for="input_2">
            Report Type
        </label>
    </dt>
    <dd>
        <select id="input_2" name="input_2"></select>
    </dt>
</dl>

  • Wer hier nicht gestimmt hat, könnte zumindest einen begründeten Kommentar hinterlassen

    – Yunzen

    28. März 2012 um 16:21 Uhr

  • Ich bin mir nicht sicher, wer abgelehnt hat, aber Ihre Antwort beantwortet die Frage in keiner Weise.

    – Matthew Darell

    28. März 2012 um 21:28 Uhr

  • Wer hier nicht gestimmt hat, könnte zumindest einen begründeten Kommentar hinterlassen

    – Yunzen

    28. März 2012 um 16:21 Uhr

  • Ich bin mir nicht sicher, wer abgelehnt hat, aber Ihre Antwort beantwortet die Frage in keiner Weise.

    – Matthew Darell

    28. März 2012 um 21:28 Uhr

1031000cookie-checkWie dehnt man das Eingabefeld auf volle Breite?

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

Privacy policy