Wenn Sie einen Rand nur an drei Seiten eines Elements anbringen müssen, gibt es dafür eine Reihe von Möglichkeiten.
Sie können den Rand gezielt nur für drei Seiten deklarieren
div {
border-top: 1px solid red;
border-right: 1px solid red;
border-bottom: 1px solid red;
}
Ausführlich, aber leicht verständlich.
Oder Sie können einfach `border` deklarieren, was alle vier Seiten abdeckt, und dann diejenige entfernen, die Sie nicht möchten.
div {
border: 1px solid red;
border-left: 0;
}
Viel kürzer, aber es setzt voraus, dass Sie verstehen und beibehalten, dass die zur Entfernung des Randes dienende Überschreibung nach der Randdeklaration beibehalten wird.
Oder Sie deklarieren Farbe und Stil und verwenden nur die Kurzform `border-width`, um die drei Seiten gezielt anzugeben.
div {
border-color: red;
border-style: solid;
border-width: 1px 1px 1px 0;
}
Kürzer als das erste Beispiel, aber weniger repetitiv. Man muss nur bedenken, dass der linke Rand bereits rot und durchgezogen wäre, wenn er eine Breite hätte.
Und dann ist da noch die Tatsache, dass Ränder die Größe des Elements im regulären Boxmodell beeinflussen. Wenn Sie Ränder hinzufügen möchten, ohne die Größe des Elements zu verändern, müssen Sie sich auf CSS3 verlassen. Hier ist eine Möglichkeit, dies mit inneren Schatten zu tun
div {
-webkit-box-shadow:
inset -1px 0 0 red,
inset 0 -1px 0 red,
inset 0 1px 0 red;
-moz-box-shadow:
inset -1px 0 0 red,
inset 0 -1px 0 red,
inset 0 1px 0 red;
box-shadow:
inset -1px 0 0 red,
inset 0 -1px 0 red,
inset 0 1px 0 red;
}
Aber innere Box-Schatten haben eine weitaus geringere Browserunterstützung als Ränder. Zum Beispiel funktioniert der obige Code nur in Internet Explorer Version 9+. Wenn Sie lieber Ränder verwenden möchten, ohne die Größe des Elements zu beeinträchtigen, könnten Sie mit box-sizing experimentieren, das bis IE 8 unterstützt wird.
Oh, die Wahlmöglichkeiten! Das ist eine so kleine Sache, aber ich denke, es ist ein gutes Beispiel dafür, wie es so oft viele verschiedene Wege gibt, um dasselbe in CSS zu erreichen. Wenn Sie gerade erst mit CSS anfangen, ist diese Art von Sache verwirrend oder ziemlich unkompliziert?
Was ist mit Outline? Es ist wie ein Rand, aber kein Teil des Boxmodells, fügt also keine Breite hinzu.
Soweit ich weiß, ist es nicht möglich, nur drei Seiten mit Outline zu erhalten.
Ah, Entschuldigung – es scheint keinen Weg zu geben, anzugeben, welche Seiten umrandet werden können. Frage mich, warum nicht!?
Ich halte das für einen nutzlosen Beitrag, um ihn weiter zu diskutieren.
Wie wäre es damit
div { border: 1px 1px 1px 0 solid red; }
Ich glaube nicht, dass das funktioniert? Es sei denn, ich bin verrückt.
Ich habe es als Beispiel 5 hier angegeben: http://jsbin.com/three-sided-border/14/edit
Das funktioniert nicht, wäre aber nicht schlecht zu haben. Ich bevorzuge übrigens die zweite Methode.
Die zweite Option ist die, die ich immer wähle – einfach alle Ränder angeben und den unerwünschten entfernen. Einfach, sehr wenig Code und browserübergreifend kompatibel.
Maurice's Code ist auch eine wirklich nette, einfache Option, obwohl ich die Möglichkeit mag, schnell zu sehen, dass ich eine Kante entferne, nur eine persönliche Präferenz – es hält mich ein wenig mehr über die Entfernung informiert.
Das ist auch meine bevorzugte Methode.
Es sind nur zwei Zeilen und Sie haben die Farbe nur einmal deklariert.
Ich schaue, welche für mich am wartungsfreundlichsten ist, wenn ich teste.
Mit Nr. 2 müssen Sie nur ein Wort ändern, um entweder die Farbe, die Seite oder die Breite zu ändern.
Nr. 3 ist auch ziemlich nah dran, aber es sind drei Zeilen und um eine Seite zu ändern, sind es zwei Änderungen in einer Zeile. Glücklicherweise ist die Änderung der Breite mit einer schnellen Suche einfach.
Maurice. So habe ich es immer gemacht. Hinterlässt einen kleineren Fußabdruck als alle anderen gezeigten Beispiele.
In welchem Browser funktioniert das bei euch?
Als ich zum ersten Mal Ränder verwendete, habe ich eine Zeit lang das erste Beispiel benutzt, nachdem ich mehr CSS gelernt hatte, begann ich, das zweite Beispiel zu verwenden, bis vor kurzem (vor etwa 3 oder 4 Monaten) das letzte Beispiel.
So sehr ich es auch ungern zugebe, ich würde wahrscheinlich aus Bequemlichkeit das erste Beispiel verwenden :)
Manchmal setze ich eine Randfarbe auf transparent, wenn ich sie ausschalten möchte, besonders wenn sie ihre Breite beibehalten soll (z. B. wenn ein Rand beim Hover ein- oder ausgeschaltet wird).
Das mache ich normalerweise
border: solid red;border-width: 1px 1px 1px 0;
Es ist wie das dritte Beispiel, nur kürzer. :3
Das gefällt mir :)
Das würde definitiv funktionieren. Ich benutze normalerweise Beispiel Nr. 2, aber ich denke, ich werde das hier ausprobieren. Wie Chris sagte,
„so oft viele verschiedene Wege, um dasselbe in CSS zu erreichen“
Wir müssen nur den auswählen, der langfristig am wenigsten Kopfschmerzen bereitet.
Ich kannte die `border-width`-Kurzform nicht. Das ist ein Problem, mit dem ich mich ständig beschäftige, also freue ich mich, eine bessere Lösung gefunden zu haben.
Ja, ich stimme zu
es ist einfacher
Ich habe die erste Option ein paar Mal verwendet, wenn ich einen dreiseitigen Rand benötigte.
Es hat für mich immer gut funktioniert. Guter Beitrag, Chris.
Ich benutze den zweiten Weg, alle anderen sind unnötigerweise repetitiv.
Ich sehe nicht warum. Mehrere `box-shadows` oder das Schlüsselwort `inset` werden von allen neuesten Versionen der Rendering-Engines unterstützt.
Übrigens könnten Sie nur einen Schatten mit dem `spread`-Parameter verwenden, aber der vertikale "Rand" wird doppelt so groß wie die horizontalen :( http://jsfiddle.net/leaverou/Eed3V/
`box-shadows` sind noch nützlicher, um mehrere "Ränder" zu emulieren, wie David DeSandro kürzlich gezeigt hat: http://jsfiddle.net/desandro/KQsL2/
Mit "Internet Explorer Version 9+" meinte ich, was den Internet Explorer betrifft, nur Version 9 und höher.
Ah, okay.
Das zweite Beispiel ist für mich das Beste
Ich benutze die dritte Methode, wenn ich diese Situation jemals habe, weil sie wartungsfreundlicher ist. Da jede Randseite wie im ersten Beispiel getrennt ist, müssen Sie bei jeder Änderung der Farbe oder des Stils diese mehrmals ändern. Eine ziemliche Qual, wenn man ein Perfektionist ist wie ich und versucht, die perfekte Farbe für einen bestimmten Rand zu finden...
Das zweite Beispiel funktioniert in dieser Situation auch, aber etwas daran fühlt sich... falsch an. Ich kann es nicht erklären.
Ich bevorzuge normalerweise Methode Nr. 1, habe aber mit Methode Nr. 2 begonnen.
Als ich ursprünglich CSS lernte, wusste ich nicht über die Magie der Kombination mehrerer Stile wie dieser Bescheid (wie `background`, `margin`, `padding` usw.), bis ich CSSEdit verwendete, was dies automatisch für Sie tut. Dieses Programm ist wirklich magisch zeiteffizient, ich wünschte nur, sie würden CSS3 implementieren.
Kleinigkeit: Sie schreiben "repeative" statt "repetitive" direkt unter dem dritten Beispiel.
(Oh, und nur um die Diskussion zu ergänzen: Ich bevorzuge die zweite Option, `border-direction:0` zu verwenden. Ich bin verrückt nach CSS-Kürze.)
„Der obige Code funktioniert nur in Internet Explorer Version 9+“
Ich hätte nie gedacht, das zu lesen
Ich mag das zweite Beispiel...
Das ist ein Thema, das wirklich nicht diskutiert werden muss, bis es eine Kurzform gibt, die lauten würde
{ border: #red 1px 1px 1px 0px solid; }
Es ist frustrierend, dass das nicht funktioniert!
Wie kann ich meinem Blogbeitrag Avatare hinzufügen?
Holen Sie sich einen Gravatar unter gravatar.com
Gravatar-unterstützende Websites verwenden dann Ihren Gravatar, wann immer Sie auf einem Blog mit einer E-Mail-Adresse posten, die Sie bei gravatar.com registriert haben. Sie können Ihrem Konto mehrere E-Mail-Adressen hinzufügen und verschiedene Bilder verwalten.
Dan,
Entschuldigung, ich erkundigte mich nach dem Hinzufügen von Kommentator-Avataren zu meinem Blog. Im Moment baue ich mein eigenes WordPress-Theme und benötige einen kleinen Code-Schnipsel, damit Kommentatoren ihre eigenen Avatare/Gravatare hinzufügen können.
Danke.
Ich habe das verwendet, aber das ist nicht kompatibel in IE7
div {
border: 1px solid red;
border-left: 0;
}
aber das dritte ist hilfreich für mich... danke...
Es funktioniert :-) die zweite Option ist besser...