Welche der beiden Methoden entspricht den W3C-Standards? Verhalten sich beide in allen Browsern wie erwartet?
Rahmen: keiner;
Grenze: 0;
Welche der beiden Methoden entspricht den W3C-Standards? Verhalten sich beide in allen Browsern wie erwartet?
Rahmen: keiner;
Grenze: 0;
Beide sind gültig. Sie haben die Wahl.
Ich bevorzuge border:0
weil er kürzer ist; ich finde das einfacher zu lesen. Sie finden vielleicht none
besser lesbar. Wir leben in einer Welt, in der es sehr leistungsfähige CSS-Postprozessoren gibt, daher empfehle ich Ihnen, das zu verwenden, was Sie bevorzugen, und es dann durch einen "Kompressor" laufen zu lassen. Es gibt keinen heiligen Krieg, der es wert ist, hier zu kämpfen, aber WebpackLESSPostCSSPurgeCSS ist ein guter 2020 Stack.
Wenn Sie Ihr gesamtes Produktions-CSS von Hand schreiben, behaupte ich - trotz des Gezeters in den Kommentaren -, dass Es kann nicht schaden, sich der Bandbreite bewusst zu sein. . Verwendung von border:0
wird eine unbedeutende Menge an Bandbreite einsparen, aber wenn Sie jedes Byte zählen lassen machen Sie Ihre Website schneller.
Die CSS2-Spezifikationen sind hier . Diese werden in CSS3 erweitert, sind aber in keiner Weise relevant für dieses Thema.
'border'
Value: [ <border-width> || <border-style> || <'border-top-color'> ] | inherit
Initial: see individual properties
Applies to: all elements
Inherited: no
Percentages: N/A
Media: visual
Computed value: see individual properties
Sie können jede beliebige Kombination von Breite, Stil und Farbe verwenden.
Hier, 0
legt die Breite fest, none
der Stil. Sie haben das gleiche Ergebnis: Es wird nichts angezeigt.
"Wenn Sie viel Verkehr haben, werden Sie den Unterschied bemerken!" - Das bezweifle ich stark. Selbst bei einer Million Besucher pro Stunde beträgt der Unterschied nur 3 MB. Und das unter der Annahme, dass keiner dieser Besucher das CSS zwischengespeichert hat, und auch unter der Annahme, dass die Komprimierung keinen Nutzen bringt, beides sehr unwahrscheinliche Aussagen. In Wirklichkeit wären es wahrscheinlich nur ein paar hundert KB Unterschied pro Tag, was bei einer großen Website praktisch 0 ist. Nicht dass ich denke border:none
irgendwie besser ist, aber das als Argumentation heranzuziehen, ist fehlerhaft.
@BlueRaja-DannyPflughoeft Es war mehr Sarkasmus als alles andere..... Oder Übertreibung... Oder ein bisschen von beidem. Du hast Recht, das wird wahrscheinlich nie eine Auswirkung auf die Laufzeit haben, es sei denn, du verwendest es jillionenfach und jeder im Internet greift gleichzeitig auf dein CSS zu.
Sie sind gleichwertig in Wirkung , die auf verschiedene Abkürzungen verweisen :
border: 0;
//short for..
border-width: 0;
Und das andere
border: none;
//short for...
border-style: none;
Beides geht, such dir einfach eins aus und nimm es :)
Beachten Sie auch, dass "Nach einer Länge von Null ist die Einheitenkennung fakultativ". also border: 0;
gültig ist.
@ajax333221 - Seien Sie vorsichtig mit einer Schwarz-Weiß-Haltung gegenüber w3schools (oder tout Website). In diesem Fall die Beschreibung ist in Ordnung, auch wenn ich sie im Allgemeinen hasse, ist ihre Erklärung in Bezug auf diese Frage korrekt und ziemlich prägnant. Es steht Ihnen frei, sie im Allgemeinen zu hassen, und das tue ich auch, aber gehen Sie nicht davon aus, dass 0 % des Inhalts dort nützlich ist, einiges davon ist es, sogar einige Dinge auf Yahoo Answers sind bis zu einem gewissen Grad nützlich.
(Hinweis: Diese Antwort wurde am 01.08.2014 aktualisiert, um sie ausführlicher und genauer zu machen und einen Live-Demo )
Selon W3C CSS2.1-Spezifikation ( "Ausgelassene Werte werden auf ihre ursprünglichen Werte gesetzt" ), sind die folgenden Eigenschaften gleichwertig:
border: hidden; border-style: hidden;
border-width: medium;
border-color: <the same as 'color' property>
border: none; border-style: none;
border-width: medium;
border-color: <the same as 'color' property>
border: 0; border-style: none;
border-width: 0;
border-color: <the same as 'color' property>
Wenn diese Regeln die spezifischsten sind, die auf die Ränder eines Elements angewendet werden, dann werden die Ränder nicht angezeigt, entweder wegen der Null-Breite oder wegen der hidden
/ none
Stil. Auf den ersten Blick sehen diese drei Regeln also gleichwertig aus. Sie verhalten sich jedoch unterschiedlich, wenn sie mit anderen Regeln kombiniert werden.
Wenn eine Tabelle mit border-collapse: collapse
dann wird jeder gerenderte Rand von mehreren Elementen gemeinsam genutzt (innere Ränder werden von benachbarten Zellen gemeinsam genutzt; äußere Ränder werden von Zellen und der Tabelle selbst gemeinsam genutzt; aber auch Zeilen, Zeilengruppen, Spalten und Spaltengruppen nutzen gemeinsame Ränder). Die Spezifikation definiert einige Regeln für die Lösung von Grenzkonflikten :
Grenzen mit dem
border-style
dehidden
haben Vorrang vor allen anderen kollidierenden Grenzen. [ ]Bordüren mit einem Stil von
none
haben die niedrigste Priorität. [ ]Wenn keiner der Stile
hidden
und mindestens einer von ihnen ist nichtnone
dann werden schmale Grenzen zugunsten breiterer Grenzen verworfen. [ ]Wenn sich die Rahmenstile nur in der Farbe unterscheiden, [ ]
Also, in einem Tabellenkontext, border: hidden
(oder border-style: hidden
) hat die höchste Priorität und sorgt dafür, dass der gemeinsame Rahmen auf jeden Fall ausgeblendet wird.
Am anderen Ende der Prioritäten, border: none
(oder border-style: none
) haben die niedrigste Priorität, gefolgt vom Rand mit der Breite Null (weil es der schmalste Rand ist). Dies bedeutet, dass ein berechneter Wert de border-style: none
und eine berechneter Wert de border-width: 0
sind im Wesentlichen identisch.
Desde none
y 0
verschiedene Eigenschaften beeinflussen ( border-style
y border-width
), werden sie sich anders verhalten, wenn ein genauere Regelung definiert nur den Stil oder nur die Breite. Siehe Antwort von Chris für ein Beispiel.
Sie möchten alle diese Fälle auf einer einzigen Seite sehen? Öffnen Sie die Live-Demo !
Wie andere bereits gesagt haben, sind beide gültig und werden den Zweck erfüllen. Ich bin allerdings nicht zu 100 % überzeugt, dass sie identisch sind. Wenn Sie einige Stil Kaskadierung gehen, dann könnten sie in der Theorie unterschiedliche Ergebnisse produzieren, da sie effektiv verschiedene Werte überschreiben.
Zum Beispiel. Wenn Sie "border: none;" einstellen und dann später zwei verschiedene Stile haben, die die Breite und den Stil des Rahmens außer Kraft setzen, wird einer etwas tun und der andere nicht.
Im folgenden Beispiel werden sowohl im IE als auch im Firefox die ersten beiden Test-Divs ohne Rahmen angezeigt. Die zweiten beiden sind jedoch anders, wobei das erste Div im zweiten Block einfarbig ist und das zweite Div im zweiten Block einen mittelbreiten gestrichelten Rahmen hat.
Obwohl sie beide gültig sind, müssen Sie Ihre Stile im Auge behalten, wenn sie viel kaskadieren und so, wie ich denke.
<html>
<head>
<style>
div {border: 1px solid black; margin: 1em;}
.zerotest div {border: 0;}
.nonetest div {border: none;}
div.setwidth {border-width: 3px;}
div.setstyle {border-style: dashed;}
</style>
</head>
<body>
<div class="zerotest">
<div class="setwidth">
"Border: 0" and "border-width: 3px"
</div>
<div class="setstyle">
"Border: 0" and "border-style: dashed"
</div>
</div>
<div class="nonetest">
<div class="setwidth">
"Border: none" and "border-width: 3px"
</div>
<div class="setstyle">
"Border: none" and "border-style: dashed"
</div>
</div>
</body>
</html>
Verwendung von
border: none;
funktioniert in einigen Versionen des IE nicht. IE9 ist in Ordnung, aber in früheren Versionen wird der Rahmen angezeigt, auch wenn der Stil "none" ist. Ich habe diese Erfahrung gemacht, als ich ein Druck-Stylesheet verwendet habe, bei dem ich keine Ränder in den Eingabefeldern haben wollte.
border: 0;
scheint in allen Browsern gut zu funktionieren.
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.
93 Stimmen
Ich mag diese Art von übersehenen Fragen.