492 Stimmen

Wie macht man ein Element Breite: 100% minus Padding?

Ich habe eine html-Eingabe.

Die Eingabe hat padding: 5px 10px; Ich möchte, dass es 100 % der übergeordneten div's Breite (die Flüssigkeit ist) sein.

Die Verwendung von width: 100%; bewirkt, dass die Eingabe 100% + 20px Wie kann ich das umgehen?

Beispiel

1 Stimmen

Siehe diese Antwort, die ich vor nicht einmal 15 Minuten gepostet habe: stackoverflow.com/questions/5219030/ Dies sollte für Sie perfekt funktionieren, es sei denn, Sie möchten, dass es im IE7 funktioniert.

0 Stimmen

Wenn Sie meine Methode verwendet haben, sehen Sie die kleine Änderung, die ich gerade an meiner Antwort vorgenommen habe. Sie sorgt in einigen Browsern für eine "gleichmäßige Auffüllung".

0 Stimmen

@Hailwood ich habe eine Lösung, die die Polsterung für input und Unterstützung für IE7

651voto

thirtydot Punkte 218830

box-sizing: border-box ist ein schneller und einfacher Weg, das Problem zu lösen:

Diese funktioniert in allen modernen Browsern und IE8+.

Hier ist eine Demo: http://jsfiddle.net/thirtydot/QkmSk/301/

.content {
    width: 100%;
    box-sizing: border-box;
}

Die im Browser vorangestellten Versionen ( -webkit-box-sizing usw.) werden in modernen Browsern nicht benötigt.

6 Stimmen

Ich glaube nicht, dass dies eine so schlechte Lösung ist. Im Allgemeinen ist das Einschließen von Elementen in ein zusätzliches Div eine gute Möglichkeit, Elemente aufzufüllen, ohne die Gesamtbreite des Elements über den übergeordneten Container hinaus zu erhöhen.

1 Stimmen

Das Auffüllen eines umschließenden Divs führt ebenfalls zu nicht identischen Ergebnissen wie das direkte Hinzufügen von Füllmaterial zur Eingabe.

0 Stimmen

@thirtydot ich habe einige flexiblere und elegantere Lösungen, die die Breite der Eingabe beibehalten

295voto

Mathias Bynens Punkte 136619

Aus diesem Grund haben wir box-sizing in CSS.

Ich habe Ihr Beispiel bearbeitet, und jetzt funktioniert es in Safari, Chrome, Firefox und Opera. Probieren Sie es aus: http://jsfiddle.net/mathias/Bupr3/ Ich habe nur dies hinzugefügt:

input {
  -webkit-box-sizing: border-box;
     -moz-box-sizing: border-box;
          box-sizing: border-box;
}

Leider wird dies von älteren Browsern wie IE7 nicht unterstützt. Wenn Sie nach einer Lösung suchen, die in alten IEs funktioniert, sehen Sie sich die anderen Antworten an.

3 Stimmen

+1, aber caniuse.com/#search=box-sizing IE 8? Auch, github.com/Schepp/box-sizing-polyfill scheint eine Lösung für IE 6-7 zu bieten.

1 Stimmen

+1, das ist großartig, wenn Sie sich nicht um den IE kümmern (wenn Sie zum Beispiel PhoneGap verwenden)

3 Stimmen

Was für eine Art von Zauberei ist das? +1 für die Antwort und +1 für den Kommentar über mir (das ist genau das, was ich brauche es für).

46voto

Alex Punkte 7234

Verwenden Sie auch die prozentuale Auffüllung und ziehen Sie sie von der Breite ab:

padding: 5%;
width: 90%;

19 Stimmen

Zu Ihrer Information: Diese Lösung eignet sich nur für nicht-flexible Layouts.

0 Stimmen

+1, Das Problem dabei wären die Grenzen, denke ich. Normalerweise sehen sie nur bei 1 bis maximal 3 Pixeln "richtig" aus. Die Ergebnisse sind zu unvorhersehbar, wenn man die Unstimmigkeiten des Browsers in Bezug auf die Subpixel-Rundung bedenkt.

29voto

Daan Punkte 1573

Css calc() verwenden

Super einfach und genial.

input {
    width: -moz-calc(100% - 15px);
    width: -webkit-calc(100% - 15px);
    width: calc(100% - 15px);
}

Wie hier zu sehen: Div-Breite 100% minus feste Anzahl von Pixeln
von webvitaly ( https://stackoverflow.com/users/713523/webvitaly )
Ursprüngliche Quelle: http://web-profile.com.ua/css/dev/css-width-100prc-minus-100px/

Ich habe das gerade hierher kopiert, weil ich es in dem anderen Thread fast übersehen hätte.

0 Stimmen

Das müssen Sie allerdings manuell einprogrammieren. Im Idealfall wird es automatisch ermittelt.

29voto

Vladimir Starkov Punkte 18334

Sie können dies tun, ohne box-sizing y unklar Lösungen wie width~=99% .

Demo auf jsFiddle :
enter image description here

  • Behalten Sie die Eingaben padding y border
  • Negative Horizontale zur Eingabe hinzufügen margin = border-width + horizontal padding
  • Zum Wrapper der Eingabe hinzufügen horizontal padding gleich margin aus dem vorherigen Schritt

HTML-Auszeichnung:

<div class="input_wrap">
    <input type="text" />
</div>

CSS:

div {
    padding: 6px 10px; /* equal to negative input's margin for mimic normal `div` box-sizing */
}

input {
    width: 100%; /* force to expand to container's width */ 
    padding: 5px 10px;
    border: none;
    margin: 0 -10px; /* negative margin = border-width + horizontal padding */ 
}

4 Stimmen

Das ist ein guter Trick, um margin für die Eingabe und padding für den Wrapper zu verwenden, um das Padding der Eingabe auszugleichen.

0 Stimmen

Stimme voll zu!!! Ich habe diese Lösung verwendet und sie funktioniert weitgehend ohne schmutzige Tricks! Das sollte die Lösung für jede Art von Antwort sein

0 Stimmen

Ich verstehe nicht ganz, welche Rolle der negative Rand spielt - alles, was ich weiß, ist, dass, wenn der Wert falsch ist, das Feld auf einer Seite endet, aber irgendwie ein symmetrischer Rand behebt dies

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X