Ich habe ein <div>
Element und möchte es begrenzen. Ich weiß, dass ich schreiben kann style="border: 1px solid black"
, aber dies fügt 2px zu beiden Seiten des Div hinzu, was nicht das ist, was ich will.
Ich hätte lieber diesen Rand -1px vom Rand des Div entfernt. Das div selbst ist 100px x 100px groß. Wenn ich einen Rahmen hinzufüge, muss ich etwas Mathematik ausführen, damit der Rand angezeigt wird.
Gibt es eine Möglichkeit, den Rahmen anzuzeigen und sicherzustellen, dass das Feld weiterhin 100 Pixel groß ist (einschließlich des Rahmens)?
Antworten:
Setzen Sie die
box-sizing
Eigenschaft aufborder-box
:Es funktioniert auf IE8 und höher .
quelle
outline
.box-sizing
caniuse.com/#search=box-sizingSie können auch Box-Shadow wie folgt verwenden:
Beispiel hier: http://jsfiddle.net/nVyXS/ ( Bewegen Sie den Mauszeiger, um den Rand anzuzeigen)
Dies funktioniert nur in modernen Browsern. Zum Beispiel: Keine IE 8-Unterstützung. Weitere Informationen finden Sie unter caniuse.com (Box-Shadow-Funktion) .
quelle
Wahrscheinlich ist es eine verspätete Antwort, aber ich möchte mit meinen Erkenntnissen teilen. Ich habe 2 neue Ansätze für dieses Problem gefunden, die ich hier in den Antworten nicht gefunden habe:
Innere Grenze durch
box-shadow
CSS-EigenschaftJa, Box-Shadow wird verwendet, um den Elementen Box-Shadows hinzuzufügen. Sie können jedoch einen
inset
Schatten angeben , der eher wie ein innerer Rand als wie ein Schatten aussieht. Sie müssen nur horizontale und vertikale Schatten auf0px
und diespread
Eigenschaft " " vonbox-shadow
auf die Breite des gewünschten Rahmens setzen. Für den 'inneren' Rand von 10px würden Sie also Folgendes schreiben:Hier ist ein jsFiddle- Beispiel, das den Unterschied zwischen
box-shadow
Rand und 'normalem' Rand veranschaulicht . Auf diese Weise betragen Ihr Rand und die Feldbreite einschließlich des Rahmens insgesamt 100 Pixel.Mehr über Box-Shadow: hier
Rahmen durch Umriss CSS-Eigenschaft
Hier ist ein anderer Ansatz, aber auf diese Weise würde der Rand außerhalb des Rahmens liegen. Hier ist ein Beispiel . Wie aus dem Beispiel hervorgeht, können Sie die CSS-
outline
Eigenschaft verwenden, um den Rahmen festzulegen , der die Breite und Höhe des Elements nicht beeinflusst. Auf diese Weise wird die Rahmenbreite nicht zur Breite eines Elements hinzugefügt.Mehr zur Gliederung: hier
quelle
Yahoo! Das ist wirklich möglich. Ich habe es gefunden.
Für den unteren Rand:
Für die obere Grenze:
quelle
Verwenden Sie ein Pseudoelement :
Mit
::after
Sie gestalten Sie das virtuelle letzte untergeordnete Element des ausgewählten Elements.content
Eigenschaft erstellt ein anonymes ersetztes Element .Wir enthalten das Pseudoelement unter Verwendung der absoluten Position relativ zum übergeordneten Element. Dann haben Sie die Freiheit, jeden benutzerdefinierten Hintergrund und / oder Rand im Hintergrund Ihres Hauptelements zu haben.
Dieser Ansatz wirkt sich nicht auf die Platzierung des Inhalts des Hauptelements aus, was sich von der Verwendung unterscheidet
box-sizing: border-box;
.Betrachten Sie dieses Beispiel:
Hier wird die
.button
Breite mithilfe des übergeordneten Elements eingeschränkt. Durch Einstellen von wird dieborder-left-width
Größe des Inhaltsfelds und damit die Position des Texts angepasst.Die Verwendung des Pseudoelement-Ansatzes hat keinen Einfluss auf die Größe des Inhaltsfelds.
Abhängig von der Anwendung kann die Verwendung eines Pseudoelements ein wünschenswertes Verhalten sein oder auch nicht.
quelle
:Before
.Obwohl diese Frage bereits mit Lösungen unter Verwendung der Eigenschaften
box-shadow
und angemessen beantwortet wurdeoutline
, möchte ich dies für alle, die hier gelandet sind (wie ich), die nach einer Lösung für eine innere Grenze mit Versatz suchen, etwas erweiternNehmen wir also an, Sie haben ein schwarzes 100px x 100px
div
und müssen es mit einem weißen Rand einfügen - der einen inneren Versatz von 5px hat (sagen wir) - dies kann immer noch mit den obigen Eigenschaften durchgeführt werden.Box Schatten
Der Trick dabei ist zu wissen, dass mehrere Box-Schatten zulässig sind, wobei der erste Schatten oben liegt und nachfolgende Schatten eine niedrigere Z-Reihenfolge haben.
Mit diesem Wissen lautet die Box-Shadow-Deklaration:
Code-Snippet anzeigen
Grundsätzlich heißt es in dieser Erklärung: Rendern Sie zuerst den letzten (10 Pixel weißen) Schatten und dann den vorherigen 5 Pixel großen schwarzen Schatten darüber.
Umriss mit Umrissversatz
Für den gleichen Effekt wie oben wären die Gliederungserklärungen:
Code-Snippet anzeigen
NB: Wird
outline-offset
vom IE nicht unterstützt, wenn dies für Sie wichtig ist.Codepen-Demo
quelle
Sie können die Eigenschaften verwenden
outline
undoutline-offset
mit einem negativen Wert anstelle eines regulären Wertsborder
funktioniert für mich:quelle
Ich weiß, dass dies etwas älter ist, aber da mich die Schlüsselwörter "border inside" direkt hier gelandet haben, möchte ich einige Ergebnisse mitteilen, die hier erwähnenswert sein könnten. Als ich dem Schwebezustand einen Rand hinzufügte, bekam ich die Effekte, von denen OP spricht. Der Rand zeigt Pixel in der Größe des Felds an, wodurch es nervös wurde. Es gibt zwei weitere Möglichkeiten, wie man damit umgehen kann, die auch für IE7 funktionieren.
1) Hängen Sie bereits einen Rand an das Element und ändern Sie einfach die Farbe. Auf diese Weise ist die Mathematik bereits enthalten.
2) Kompensieren Sie Ihren Rand mit einem negativen Rand. Dadurch werden immer noch die zusätzlichen Pixel hinzugefügt, aber die Positionierung des Elements ist nicht sprunghaft
quelle
Fügen Sie für ein konsistentes Rendern zwischen neuen und älteren Browsern einen doppelten Container hinzu, den äußeren mit der Breite und den inneren mit dem Rand.
Dies ist natürlich nur dann der Fall, wenn Ihre genaue Breite wichtiger ist als ein zusätzliches Markup!
quelle
quelle
Die beste browserübergreifende Lösung (hauptsächlich für die IE-Unterstützung), wie @Steve sagte, besteht darin, ein div 98px in Breite und Höhe zu erstellen, als einen Rand 1px um ihn herum hinzuzufügen, oder Sie könnten ein Hintergrundbild für div 100x100 px erstellen und einen Rand darauf zeichnen.
quelle
Sie können Umrisse mit Versatz betrachten, dies erfordert jedoch eine gewisse Auffüllung, um auf Ihrem Div vorhanden zu sein. Oder Sie können einen Border Div absolut darin positionieren, so etwas wie
Möglicherweise müssen Sie mit den Rändern an den gefälschten Rändern herumspielen, um sie nach Ihren Wünschen anzupassen.
quelle
Eine modernere Lösung könnte die Verwendung von CSS
variables
und seincalc
.calc
wird weitgehend unterstützt,variables
ist jedoch noch nicht in IE11 (Polyfills verfügbar).Obwohl dies einige Berechnungen verwendet, die mit den ursprünglichen Fragen vermieden werden sollten. Ich denke, dies ist ein guter Zeitpunkt, um Berechnungen zu verwenden, da diese vom CSS selbst gesteuert werden. Es ist auch nicht erforderlich, zusätzliche Markups zu erstellen oder andere CSS-Eigenschaften zu missbrauchen, die später möglicherweise benötigt werden.
Diese Lösung ist nur dann wirklich nützlich, wenn keine feste Höhe benötigt wird .
quelle
Eine Lösung, die ich oben nicht gesehen habe, ist der Fall, in dem Ihre Eingabe aufgefüllt ist, was ich in 99% der Fälle mache. Sie können etwas in der Art von ...
Was mir daran gefällt, ist, dass ich für jede Seite das vollständige Menü mit Rahmen + Auffüllen + Übergangseigenschaften habe.
quelle