Wie kann man einem Element mit CSS einen Rahmen geben, ohne die gesamte Breite des Elements mit einer Rahmenbreite zu versehen?
Wie in Photoshop können wir Striche geben - innen, in der Mitte und außen
Ich denke, die Standard-CSS-Rahmeneigenschaften sind Mitte wie Mitte in Photoshop. Stimmt das?
Ich möchte innerhalb der Box einen Rand geben, nicht außerhalb. und möchten die Rahmenbreite nicht in die Feldbreite einbeziehen.
Schauen Sie sich die CSS-Box-Größe an ...
Die CSS3-Eigenschaft mit Boxgröße kann dies tun. Der Randfeldwert (im Gegensatz zum Standardwert für das Inhaltsfeld) legt fest, dass das endgültig gerenderte Feld die deklarierte Breite aufweist und dass alle Rahmen und Polsterungen innerhalb des Felds ausgeschnitten werden. Sie können jetzt sicher deklarieren, dass Ihr Element 100% breit ist, einschließlich pixelbasierter Auffüllung und Rahmen, und Ihr Ziel perfekt erreichen.
Ich würde vorschlagen, ein Mixin zu erstellen, um dies für Sie zu erledigen. Weitere Informationen zur Boxgröße finden Sie unter W3c unter http://www.w3schools.com/cssref/css3_pr_box-sizing.asp
quelle
box-sizing
wird genügen.Abhängig von Ihrer beabsichtigten Browserunterstützung können Sie die
box-shadow
Eigenschaft verwenden.Sie können den Unschärfewert auf 0 und die Streuung auf die gewünschte Dicke einstellen. Das Tolle an Box Shadow ist, dass Sie steuern können, ob es außerhalb (standardmäßig) oder innerhalb (mithilfe der
inset
Eigenschaft) gezeichnet wird .Beispiel:
oder
Ein großer Vorteil der Verwendung von Box-Schatten besteht darin, dass Sie kreativ werden können, indem Sie mehrere Box-Schatten verwenden:
Das einzige, was ich nicht sagen kann, ist, welchen Unterschied dies beim Rendern der Leistung macht. Ich würde annehmen, dass es zu einem Problem werden könnte, wenn Sie Hunderte von Elementen, die diese Technik verwenden, gleichzeitig auf dem Bildschirm haben würden.
quelle
Ich bin auf das gleiche Problem gestoßen.
Mit dieser Antwort können Sie eine einzelne Seite angeben. Und würde in IE8 + funktionieren - im Gegensatz zur Verwendung von Box-Shadow.
Ändern Sie natürlich die Eigenschaften Ihrer Pseudoelemente, wenn Sie eine bestimmte Seite herausgreifen müssen.
* Neu und verbessert *
Dies ermöglicht die Verwendung von Rahmen und das Schlagen mehrerer Seiten einer Box.
quelle
Verwenden Sie diese Option
box-sizing: border-box
, um einen Rahmen IN einem Div zu erstellen, ohne die Div-Breite zu ändern.Verwenden Sie
outline
diese Option , um einen Rahmen AUSSERHALB eines Div zu erstellen, ohne die Div-Breite zu ändern.Hier ein Beispiel: https://jsfiddle.net/4000cae9/1/
Hinweise:
border-box
Derzeit wird es vom IE nicht unterstütztUnterstützung:
http://caniuse.com/#feat=outline
http://caniuse.com/#search=border-box
quelle
Wie abenson sagte, können Sie einen Umriss verwenden, aber ein Problem ist, dass Opera möglicherweise eine "nicht rechteckige Form" zeichnet. Eine andere Option, die zu funktionieren scheint, ist die Verwendung negativer Ränder, wie z. B. dieses CSS:
Mit diesem HTML:
Eine andere weniger saubere Option ist das Hinzufügen eines zusätzlichen Markups zum HTML. Sie legen beispielsweise die Breite eines äußeren Elements fest und fügen dem inneren den Rand hinzu. Das CSS:
Und das HTML:
quelle
Verwenden Sie Polsterung, wenn kein Rand vorhanden ist. Entfernen Sie die Polsterung, wenn ein Rand vorhanden ist.
Ersetzen Sie im Wesentlichen einfach die 2px-Polsterung durch 2px-Ränder. Die Div-Größe bleibt gleich.
quelle
In Ihrem Fall können Sie es fummeln, indem Sie die Hälfte des Randes von der Polsterung abziehen? (-2,5 von der Polsterung Wenn Ihr Rand 5 Pixel breit ist, können Sie keine negative Polsterung haben. Wenn Sie also kleiner werden, verringern Sie die Gesamtbreite der Box.) Sie können dem Rand zusätzliche 2,5 Pixel hinzufügen, um die Gesamtgröße der Box beizubehalten.
Ich mag diesen Vorschlag wirklich nicht, aber ich glaube nicht, dass es einen Weg gibt, damit sauber umzugehen.
quelle
Sie versuchen also, das Gleiche wie den bekannten IE-Box-Modellfehler zu erreichen ? Das ist doch nicht möglich. Oder Sie möchten Clients nur mit IE unter Windows unterstützen und einen Doctype auswählen, der den IE in den Quirksmode zwingt .
quelle
Eine weitere Option, wenn Ihre Hintergrundfarbe fest ist:
quelle
#FFF
transparent ersetzen und müssen dann nicht daran denken, zwei Werte zu ändern. Ihr Vorschlag hat den Vorteil, dass wenn Sie einen gestrichelten Rand benötigen, dies dort funktioniert, wobox-shadow
diesbezüglich ein Mangel besteht.Umriss: 3px festes Schwarz || Rand: 3px festes Schwarz
quelle