2013-08-23 4 views
5

Ich brauche eine Linie mit wenigen Eingaben zu schaffen und sicherzustellen, dass sie immer füllen Sie das div zu sein, ich habe width:100% zur letzten Eingabe hinzugefügtCSS-Display Eingänge in-line (letzte Eingabebreite: 100%)

<div style="width:300px;background:#eee;height:30px"> 
    <input value="first" style="width:80px" type="button"/> 
    <input value="second" style="width:80px" type="button"/> 
    <input value="last" style="width:100%" type="button"/> 
</div> 

Dieses Beispiel funktioniert nicht gut, da die letzte Eingabebreite identisch mit div ist und in der zweiten Zeile erscheint.

Wie kann ich sie alle in der gleichen Zeile erscheinen lassen?

Jsfiddle

+1

Wenn Sie im Voraus die Containerbreite wissen, warum versuchen Sie die letzte 'div width' zu erraten? – melancia

+2

Warum teilen Sie nicht 100% unter den Kontrollen? –

+0

'width: 100%' wird der letzten Eingabe 100% Breite des Containers geben. Können Sie für alle Eingänge eine feste Breite verwenden? – SlightlyCuban

Antwort

14

Mit ein wenig CSS können Sie dies tun. Wickeln Sie die letzte Eingabe in einer Spanne und fügen Sie diese CSS:

<div style="width:300px;background:#eee;height:30px;"> 
    <input value="first" style="width:80px" type="button"/> 
    <input value="second" style="width:80px" type="button"/> 
    <span id="last"><input value="last" style="width:100%" type="button" /></span> 
</div> 
#last { 
    overflow:auto; 
    display:block; 
} 
input { 
    float:left; 
} 

jsFiddle example

+0

Works, danke – AMD

+1

das ist perfekt. Ich habe mir ein Dutzend ähnlicher Fragen und Antworten angeschaut und alles entweder: 1) ignorierte die Frage und antwortete mit festen Breiten, oder 2) war ungefähr eine Seite fragwürdiges CSS. Das war prägnant und tat genau das, was gebraucht wurde, danke! –

1

Wenn Sie Breite: 100%, das füllt den div die Eingabe enthält. Der beste Weg, um sie alle passen zu lassen, ist die Verteilung der div-Breite gleichmäßig zwischen den Eingaben, und schweben sie, so dass sie alle nebeneinander sitzen.

<div style="width:300px;background:#eee;height:30px"> 
<input value="first" style="width:100px, float: left;" type="button"/> 
<input value="second" style="width:100px" type="button"/> 
<input value="last" style="width:100px, float: right;" type="button"/> 
</div> 

Die Syntax nicht ganz richtig sein könnte, habe ich selten in-line CSS verwenden, viel besser dran, nur die Eingänge und Klasse geben und dann die Klasse mit Attributen in Ihrer CSS-Datei zuweisen.

+0

Eine weitere praktikable Option besteht darin, eine prozentuale Breite zu finden, die ungefähr dem Wert von 80px entspricht, wenn Sie die Containergröße verwenden. Dann rechnen Sie und geben Sie dem letzten Div den verbleibenden Speicherplatz. – Michael

+0

Genau^ Kannst du auch em verwenden, aber ich habe gerade eine Methode demonstriert. – user5623896726

0

Sie können versuchen, für füllen Sie Ihre div von Taste

<div style="width:300px;background:#eee;height:30px"> 
    <input value="first" style="width:80px" type="button"/> 
    <input value="second" style="width:80px" type="button"/> 
    <input value="last" style="width:132px" type="button"/> 
</div> 
0

Wenn Sie N Kinder haben, die Sie möchten Um eine Breite anzupassen, müssen Sie die entsprechenden Breiten auf 100%/N setzen, was für Ihr Beispiel 100%/3 ~ 33.33333% wäre. (Es sei denn, Sie haben box-sizing: border-box/padding-box set) müssen Sie auch Ränder, Ränder und Abstände berücksichtigen. Wenn Ihre Elemente display: inline oder display: inline-block sind, nehmen die Leerräume zwischen ihnen in der Quelle ebenfalls Platz in Anspruch. Sie müssen diese Leerzeichen begegnen, indem sie

  • es
  • Rückgängig machen es mit margin-right: -0.4em oder einen Wert zu entfernen, die
  • float Ihre Elemente (die eigentlich setzt display: block)

ich updated your demo habe funktioniert mit die schnellste Lösung, die Ihnen das gewünschte Ergebnis liefert.