Ich habe schon oft gesehen, dass die Aussicht auf ein negatives Auffüllen dazu beitragen kann, dass die Entwicklung von CSS für bestimmte Seitenelemente besser und einfacher wird. Es ist jedoch keine negative Auffüllung im W3C-CSS vorgesehen. Was ist der Grund dafür? Gibt es ein Hindernis für das Eigentum, das seine Verwendung als solches verhindert? Danke für deine Antworten.
UPDATE
Wie ich zum Beispiel sehe, wenn Sie eine Schriftart verwenden, die beispielsweise einen vertikalen Abstand von 20 Pixel hat, und einen gestrichelten Rand am unteren Rand der Schriftart anbringen möchten, beispielsweise wenn ein Hyperlink angezeigt wird. In solchen Fällen ist der Stil viel zu schäbig, da der gestrichelte Rand 20 Pixel unter dem angegebenen Wort angezeigt wird. Wenn Sie einen negativen Rand verwenden, funktioniert dies nicht, da der Rand den Bereich außerhalb der Grenzen ändert. Negative Polsterung kann in solchen Situationen hilfreich sein.
<span>
Tag anzuzeigen, und die Art und Weise, wie er analysiert wird, führt zu zusätzlichen Zeilenumbrüchen am Anfang des Codeblocks. Mit negativer Polsterung könnte ich diesen zusätzlichen Platz verschwinden lassen.Antworten:
Ich habe kürzlich eine andere Frage beantwortet, in der ich besprochen habe, warum das Box-Modell so ist, wie es ist.
Für jeden Teil des Boxmodells gibt es bestimmte Gründe. Das Auffüllen soll den Hintergrund über seinen Inhalt hinaus erweitern. Wenn Sie den Hintergrund des Containers verkleinern müssen , sollten Sie den übergeordneten Container auf die richtige Größe einstellen und dem untergeordneten Element einige negative Ränder geben. In diesem Fall wird der Inhalt nicht aufgefüllt , sondern läuft über.
quelle
Das Auffüllen ist per Definition eine positive ganze Zahl (einschließlich 0).
Ein negatives Auffüllen würde dazu führen, dass der Rand in den Inhalt fällt (siehe die Box-Modell- Seite auf w3) - dies würde den Inhaltsbereich kleiner als den Inhalt machen, was keinen Sinn ergibt.
quelle
Ich möchte ein sehr gutes Beispiel dafür beschreiben, warum
negative padding
dies nützlich und großartig wäre.Wie wir alle CSS-Entwickler wissen, ist das vertikale Ausrichten eines Divs mit dynamischer Größe innerhalb eines anderen mühsam und wird größtenteils nur mit CSS als unmöglich angesehen. Die Einbeziehung von
negative padding
könnte dies ändern.Bitte überprüfen Sie den folgenden HTML-Code:
Mit dem folgenden CSS könnten wir den Inhalt des Inneren
div
innerhalb des Äußeren vertikal zentrierendiv
:Gestatten Sie mir zu erklären ...
Wenn Sie die Oberseite des inneren Divs absolut auf 50% positionieren, wird die Oberkante des inneren Divs in der Mitte des äußeren Divs platziert. Ziemlich einfach. Dies liegt daran, dass die prozentuale Positionierung relativ zu den Innenabmessungen des übergeordneten Elements ist .
Prozentuales Polsterung , auf der anderen Seite, wird auf der Basis der Innenabmessungen des Zielelements . Durch Anwenden der Eigenschaft von haben
padding-top: -50%;
wir den Inhalt des inneren Divs um einen Abstand von 50% der Höhe des Inhalts des inneren Divs nach oben verschoben, wodurch der Inhalt des inneren Divs innerhalb des äußeren Divs zentriert wird und dennoch die Höhendimension des innerer div, um dynamisch zu sein!Wenn Sie mich nach OP fragen, ist dies der beste Anwendungsfall, und ich denke, er sollte implementiert werden, damit ich diesen Hack ausführen kann. lol. Oder sie sollten einfach die Funktionalität von korrigieren
vertical-align
und uns eine Version gebenvertical-align
, die für alle Elemente funktioniert.quelle
Dies könnte übrigens helfen:
Die Box-Sizing CSS - Eigenschaft wird verwendet , um das Standard - CSS - Box - Modell zu berechnen Breiten und Höhen der verwendeten Elemente zu verändern.
http://www.w3.org/TR/css3-ui/#box-sizing
https://developer.mozilla.org/En/CSS/Box-sizing
quelle
Du hast gefragt, warum, nicht wie man es betrügt:
Normalerweise wegen der Faulheit der Programmierer bei der anfänglichen Implementierung, weil sie bereits viel mehr Aufwand in andere Funktionen gesteckt haben und seltsamere Nebenwirkungen wie Floats liefern, weil sie damals von Designern mehr nachgefragt wurden und sich dennoch nicht die Zeit genommen haben Um dies zu ermöglichen, können wir die VIER Eigenschaften verwenden, um ein Element gegen seine Nachbarn zu drücken / ziehen (jetzt haben wir nur noch vier zum Drücken und nur zwei zum Ziehen).
Als HTML entworfen wurde, liebten Magazine damals Text, der um Bilder herumfloss, jetzt gehasst, weil wir heute Touch-Trends haben und quadratische Dinge mit viel Platz und nichts zu lesen lieben. Das ist der Grund, warum sie mehr Druck auf Schwimmer ausüben als auf die Zentrierung, oder sie hätten so etwas wie
margin-top: fill;
odermargin: average 0;
entwerfen können, um den Inhalt einfach nach unten auszurichten oder seinen zusätzlichen Platz zu verteilen.In diesem Fall denke ich, dass es aus dem gleichen Grund nicht implementiert wurde, der dazu führt, dass CSS keinen
:parent
Pseudo-Selektor hat: Um Schleifenauswertungen zu verhindern.Ohne Ingenieur zu sein, kann ich sehen, dass CSS derzeit zum einmaligen Malen von Elementen erstellt wird. Denken Sie an einige Eigenschaften für zukünftige zu malende Elemente, aber kehren Sie NIEMALS zu bereits gemalten Elementen zurück.
Aus diesem Grund wird (ich denke) die Polsterung anhand der Breite berechnet, da dies der Wert ist, der zum Zeitpunkt des Beginns des Malens verfügbar war.
Wenn Sie einen negativen Wert für das Auffüllen hätten, würde dies die äußeren Grenzen beeinflussen, die BEREITS definiert wurden, wenn der Rand bereits festgelegt wurde. Ich weiß, es wurde noch nichts gemalt, aber wenn Sie lesen, wie der Malprozess abläuft, der von Genies mit 90er-Technologie erstellt wurde, habe ich das Gefühl, ich stelle dumme Fragen und sage einfach "Danke", hehe.
Eine der Anforderungen von Webseiten besteht darin, dass sie schnell verfügbar sind. Im Gegensatz zu einer App, die ihre Zeit in Anspruch nehmen und die Computerressourcen verbrauchen kann, um alles richtig zu machen, bevor sie angezeigt wird, müssen Webseiten nur geringe Ressourcen verbrauchen (damit sie in jedes Gerät passen möglich) und im Handumdrehen gescrollt werden.
Wenn Sie Anwendungen mit komplexem Reflow und Positionierung wie InDesign sehen, können Sie nicht so schnell scrollen! Sowohl Prozessoren als auch Grafikkarten sind sehr bemüht, um zu den nächsten Seiten zu gelangen!
Malen und rechnen Sie also vorwärts und vergessen Sie ein einmal gezeichnetes Element, denn jetzt scheint es ein MUSS zu sein.
quelle
Das Anbringen eines Iframes in Containern entspricht nicht der Größe des Containers. Es fügt ungefähr 20px Polsterung hinzu. Derzeit gibt es keine einfache Möglichkeit, dies zu beheben. Sie benötigen Javascript ( http://css-tricks.com/snippets/jquery/fit-iframe-to-content/ )
Negative Margen wären eine einfache Lösung.
quelle
Weil die Designer von CSS nicht die Voraussicht hatten, sich die Flexibilität vorzustellen, die dies bringen würde. Es gibt viele Gründe, den Inhaltsbereich einer Box zu erweitern, ohne die Beziehung zu benachbarten Elementen zu beeinträchtigen. Wenn Sie der Meinung sind, dass dies nicht möglich ist, fügen Sie einen langen
nowrap
Text in ein Feld ein, legen Sie eine Breite für das Feld fest und beobachten Sie, wie der übergelaufene Inhalt nichts mit dem Layout zu tun hat.Ja, dies ist für CSS3 im Jahr 2019 immer noch relevant. Ein typisches Beispiel: Flexbox-Layouts. Die Ränder der Flexbox-Elemente fallen nicht zusammen. Um sie gleichmäßig zu platzieren und am visuellen Rand des Containers auszurichten, müssen die Ränder der Elemente von der Polsterung des Containers abgezogen werden. Wenn ein Ergebnis <0 ist, müssen Sie einen negativen Rand für den Container verwenden oder diesen negativen Rand mit dem vorhandenen Rand addieren. Das heißt, der Inhalt des Elements beeinflusst, wie man die Ränder dafür definiert, was rückwärts ist. Das Summieren funktioniert nicht sauber, wenn der Inhalt von Flex-Elementen Ränder in verschiedenen Einheiten definiert hat oder von einer anderen Schriftgröße usw. beeinflusst wird.
Das folgende Beispiel sollte im Idealfall ausgerichtete und gleichmäßig verteilte graue Kästchen haben, aber leider nicht.
Ich bin im Laufe der Jahre auf genug dieser kleinen Probleme gestoßen, bei denen ein wenig negatives Auffüllen einen langen Weg zurückgelegt hätte, aber stattdessen bin ich gezwungen, nicht-semantische Markup-, Verwendungs-
calc()
oder CSS-Präprozessoren hinzuzufügen , die nur funktionieren, wenn die Einheiten gleich sind , etc.quelle