Me gustan este tipo de preguntas pasadas por alto.
Christopher Altman
Respuestas:
454
Ambos son validos. Es tu elección.
Prefiero border:0porque es más corto; Me resulta más fácil de leer. Puede encontrar nonemás legible. Vivimos en un mundo de posprocesadores CSS muy capaces, por lo que le recomiendo que use lo que prefiera y luego lo ejecute a través de un "compresor". No hay guerra santa que valga la pena luchar aquí.
Dicho todo esto, si está escribiendo a mano todo su CSS de producción, mantengo, a pesar de las quejas en los comentarios, no está de más ser consciente del ancho de banda. Usando border:0se ahorrará una cantidad infinitesimal de ancho de banda. Por sí solo eso cuenta muy poco, pero si hace que cada byte cuente , hará que su sitio web sea más rápido.
Las especificaciones CSS2 están aquí . Estos se extienden en CSS3 pero no de ninguna manera relevante para esto.
'border'Value:[<border-width>||<border-style>||<'border-top-color'>]| inheritInitial: see individual propertiesApplies to: all elementsInherited:noPercentages: N/AMedia: visualComputedvalue: see individual properties
Puede usar cualquier combinación de ancho, estilo y color.
Aquí, 0establece el ancho, noneel estilo. Tienen el mismo resultado de representación: no se muestra nada.
"¡Si tienes mucho tráfico, notarás la diferencia!" - Lo dudo mucho. Incluso con un millón de visitantes por hora, la diferencia es de solo 3 MB. Y eso supone que ninguno de esos visitantes tiene el CSS en caché, y también supone que la compresión proporciona un beneficio 0, ambas declaraciones muy poco probables. En realidad, probablemente sería una diferencia de unos cientos de KB al día, que es básicamente 0 para un sitio grande. No es que creo que border:nonesea de alguna manera mejor, pero usar esto como razonamiento es defectuoso.
BlueRaja - Danny Pflughoeft
22
@ BlueRaja-DannyPflughoeft Fue más sarcasmo que otra cosa ... ... o una hipérbole ... O un poco de ambas. Tiene razón, esto probablemente nunca tendrá un efecto de tiempo de ejecución en nada a menos que lo use millones de veces y haga que todos en Internet accedan a su CSS a la vez.
Oli
66
¿Quizás valga la pena agregar a la descripción que la declaración fue sarcástica? :)
timofey.com
77
Solo por completo, quería agregar otro aspecto. La transferencia de 1 MB de datos requiere la cantidad de energía contenida en una briqueta de carbón común. Vea esta charla TED de Jay Walkers: player.vimeo.com/video/22399003 .
Zensursula
11
¿Soy el único aquí atrás que aplaude en un nanosegundo extra?
@ ¿En serio ?, ¿te gusta cuando la gente se conecta a w3schools?
ajax333221
29
@ ajax333221 - Tenga cuidado con una actitud en blanco y negro hacia w3schools (o cualquier sitio web). En este caso, la descripción está bien, aunque los odio en general, su explicación en lo que respecta a esta pregunta es correcta y bastante sucinta. Eres libre de odiarlos en general, y lo hago, pero no asumas que el 0% del contenido allí es útil, en parte lo es, incluso algunas cosas en las respuestas de Yahoo son útiles, hasta cierto punto.
Nick Craver
44
¡Incorrecto! Como se describe en mi respuesta y se demostró en la demostración en vivo , border: 0NO es el atajo para border-width: 0. En cambio, la versión corta siempre establece las tres propiedades: border-color, border-styley border-width.
Denilson Sá Maia
3
@ DenilsonSá Dije que tenían el mismo efecto que la primera línea de la respuesta, porque si el borde tiene un ancho de 0, los otros 2 no importan aquí. Sin embargo, aparte de esto, CSS 2.1 que aclaró el comportamiento aquí fue la última llamada 7 meses después de esta respuesta, y se presionó como recomendación más de un año después. Si desea aclarar las respuestas anteriores aquí, ¡hágalo! Se recomienda activamente la edición para actualizaciones.
Nick Craver
42
Como otros han dicho, ambos son válidos y harán el truco. Sin embargo, no estoy 100% convencido de que sean idénticos. Si tiene algún estilo en cascada, en teoría podrían producir resultados diferentes, ya que anulan efectivamente diferentes valores.
Por ejemplo. Si establece "borde: ninguno;" y luego tener dos estilos diferentes que anulan el ancho y el estilo del borde, uno hará algo y el otro no.
En el siguiente ejemplo, tanto en IE como en Firefox, los primeros dos divs de prueba salen sin borde. Sin embargo, los segundos dos son diferentes, ya que el primer div en el segundo bloque es plano y el segundo div en el segundo bloque tiene un borde discontinuo de ancho medio.
Entonces, aunque ambos son válidos, es posible que deba vigilar sus estilos si hacen mucho en cascada y, como creo.
<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><divclass="zerotest"><divclass="setwidth">
"Border: 0" and "border-width: 3px"</div><divclass="setstyle">
"Border: 0" and "border-style: dashed"</div></div><divclass="nonetest"><divclass="setwidth">
"Border: none" and "border-width: 3px"</div><divclass="setstyle">
"Border: none" and "border-style: dashed"</div></div></body></html>
Para eliminar los bordes de datepickers en Sencha Touch 2, tuve que usar en border: nonelugar de border: 0.
Kris Khaira
39
(nota: esta respuesta se actualizó el 2014-08-01 para que sea más detallada, más precisa y para agregar una demostración en vivo )
Expandiendo las propiedades shortand
De acuerdo con la especificación CSS2.1 de W3C ( "Los valores omitidos se establecen en sus valores iniciales" ), las siguientes propiedades son equivalentes:
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>
Si estas reglas son las más específicas aplicadas a los bordes de un elemento, entonces los bordes no se mostrarán, ya sea por ancho cero o por hidden/ noneestilo. Entonces, a primera vista, estas tres reglas parecen equivalentes. Sin embargo, se comportan de diferentes maneras cuando se combinan con otras reglas.
Bordes en un contexto de tabla en un modelo de borde contraído
Cuando se representa una tabla usando border-collapse: collapse, cada borde representado se comparte entre múltiples elementos (los bordes internos se comparten entre celdas vecinas; los bordes exteriores se comparten entre las celdas y la tabla en sí; pero también las filas, los grupos de filas, las columnas y los grupos de columnas comparten bordes ) La especificación define algunas reglas para la resolución de conflictos fronterizos :
Fronteras con la border-styledel hiddenprevalecen sobre todas las demás fronteras conflictivas. [...]
Las fronteras con un estilo de nonetienen la prioridad más baja. [...]
Si ninguno de los estilos es hiddeny al menos uno de ellos no lo es none, los bordes estrechos se descartan en favor de los más anchos. [...]
Si los estilos de borde difieren solo en color, […]
Por lo tanto, en un contexto de tabla, border: hidden(o border-style: hidden) tendrá la máxima prioridad y hará que el borde compartido esté oculto, pase lo que pase.
En el otro extremo de las prioridades, border: none(o border-style: none) tienen la prioridad más baja, seguida del borde de ancho cero (porque es el borde más estrecho). Esto significa que un valor calculado de border-style: noney un valor calculado de border-width: 0son esencialmente los mismos.
Reglas en cascada y herencia
Desde noney 0afectar a diferentes propiedades ( border-styley border-width), que se comportan de manera diferente cuando un regla más específica define sólo el estilo o simplemente la anchura. Vea la respuesta de Chris para un ejemplo.
no funciona en algunas versiones de IE. IE9 está bien, pero en versiones anteriores muestra el borde incluso cuando el estilo es "ninguno". Experimenté esto al usar una hoja de estilo de impresión donde no quería bordes en los cuadros de entrada.
Simplemente puede usar ambos según la especificación amablemente proporcionada por Oli.
Yo siempre uso border:0 none;.
Aunque no hay ningún daño en especificarlos por separado y algunos navegadores analizarán el CSS más rápido si utiliza las llamadas de propiedad CSS1 heredadas.
Aunque border:0;normalmente usará el estilo de borde predeterminado none, sin embargo, he notado que algunos navegadores aplican su estilo de borde predeterminado que puede sobrescribir extrañamente border:0;.
"algunos navegadores analizarán el CSS más rápido" → no hay una diferencia notable en el tiempo de análisis CSS. Y, realmente, el tiempo de análisis CSS no es relevante para el 99.999999999999% de los casos. El tiempo de renderizado CSS es mucho más importante (y tampoco está relacionado con esta pregunta).
Denilson Sá Maia
1
Algunos navegadores? ¿Qué quieres decir? Parece un sueño o algo así.
Bueno, para ver con precisión la diferencia entre border: 0y border: nonepodemos hacer algunos experimentos.
Experimentar:
Vamos a crear tres divs, el primero cuyo borde solo se puede desactivar estableciendo su ancho en cero, el segundo que solo se puede desactivar estableciendo su estilo en ninguno, y un tercero con un borde que solo se puede "desactivar" estableciendo su color a transparente. Entonces intentemos el efecto de:
border: 0;
border: none;
border: transparent
estilo de borde: sólido! importante; color del borde: rojo! importante; ancho de borde: 2px! importante; color del borde: rojo! importante; ancho de borde: 2px! importante; estilo de borde: sólido! importante;
div div {border:2px solid red;margin:2px;font-family: monospace;white-space: nowrap;width:250px;}
div.border-zero div {border:0;}
div.border-none div {border: none;}
div.border-transparent div {border: transparent;}
Si bien los resultados probablemente serán los mismos (sin borde), el 0 y ninguno técnicamente abordan cosas diferentes.
0 aborda el ancho del borde y ninguno aborda el estilo del borde. Obviamente, un borde de 0 ancho no existe, por lo que no tendrá estilo.
Sin embargo, si más adelante en su hoja de estilo tiene la intención de anular esto, naturalmente abordaría específicamente uno u otro. Si ahora quisiera un borde de 3px, eso sería anular directamente el borde: 0 en cuanto al ancho. Si ahora quisiera un borde punteado, sería un borde directamente anulante: ninguno en lo que respecta al estilo.
Según mi opinión y experiencia, sugeriría utilizar Border: 0;
Hay una razón válida y muy buena porque siempre que usamos borde: ninguno, entiendo que funciona, pero piense que estamos usando un borde, 1px, 2px, 3px, etc. Quiero decir que estamos dando el valor de que nuestro borde es ... px / em / rem a la derecha, por lo que debemos usar border: 0; para eliminar el valor del borde porque, como sabemos cuando usamos fondo: ninguno; significa que estamos eliminando el fondo de un fondo que no es un valor que es otra cosa.
Respuestas:
Ambos son validos. Es tu elección.
Prefiero
border:0
porque es más corto; Me resulta más fácil de leer. Puede encontrarnone
más legible. Vivimos en un mundo de posprocesadores CSS muy capaces, por lo que le recomiendo que use lo que prefiera y luego lo ejecute a través de un "compresor". No hay guerra santa que valga la pena luchar aquí.Dicho todo esto, si está escribiendo a mano todo su CSS de producción, mantengo, a pesar de las quejas en los comentarios, no está de más ser consciente del ancho de banda. Usando
border:0
se ahorrará una cantidad infinitesimal de ancho de banda. Por sí solo eso cuenta muy poco, pero si hace que cada byte cuente , hará que su sitio web sea más rápido.Las especificaciones CSS2 están aquí . Estos se extienden en CSS3 pero no de ninguna manera relevante para esto.
Puede usar cualquier combinación de ancho, estilo y color.
Aquí,
0
establece el ancho,none
el estilo. Tienen el mismo resultado de representación: no se muestra nada.fuente
border:none
sea de alguna manera mejor, pero usar esto como razonamiento es defectuoso.Son equivalentes en efecto , apuntando a diferentes atajos :
Y el otro..
Ambos funcionan, solo elige uno y ve con él :)
fuente
border: 0;
es válido.border: 0
NO es el atajo paraborder-width: 0
. En cambio, la versión corta siempre establece las tres propiedades:border-color
,border-style
yborder-width
.Como otros han dicho, ambos son válidos y harán el truco. Sin embargo, no estoy 100% convencido de que sean idénticos. Si tiene algún estilo en cascada, en teoría podrían producir resultados diferentes, ya que anulan efectivamente diferentes valores.
Por ejemplo. Si establece "borde: ninguno;" y luego tener dos estilos diferentes que anulan el ancho y el estilo del borde, uno hará algo y el otro no.
En el siguiente ejemplo, tanto en IE como en Firefox, los primeros dos divs de prueba salen sin borde. Sin embargo, los segundos dos son diferentes, ya que el primer div en el segundo bloque es plano y el segundo div en el segundo bloque tiene un borde discontinuo de ancho medio.
Entonces, aunque ambos son válidos, es posible que deba vigilar sus estilos si hacen mucho en cascada y, como creo.
fuente
border: none
lugar deborder: 0
.(nota: esta respuesta se actualizó el 2014-08-01 para que sea más detallada, más precisa y para agregar una demostración en vivo )
Expandiendo las propiedades shortand
De acuerdo con la especificación CSS2.1 de W3C ( "Los valores omitidos se establecen en sus valores iniciales" ), las siguientes propiedades son equivalentes:
Si estas reglas son las más específicas aplicadas a los bordes de un elemento, entonces los bordes no se mostrarán, ya sea por ancho cero o por
hidden
/none
estilo. Entonces, a primera vista, estas tres reglas parecen equivalentes. Sin embargo, se comportan de diferentes maneras cuando se combinan con otras reglas.Bordes en un contexto de tabla en un modelo de borde contraído
Cuando se representa una tabla usando
border-collapse: collapse
, cada borde representado se comparte entre múltiples elementos (los bordes internos se comparten entre celdas vecinas; los bordes exteriores se comparten entre las celdas y la tabla en sí; pero también las filas, los grupos de filas, las columnas y los grupos de columnas comparten bordes ) La especificación define algunas reglas para la resolución de conflictos fronterizos :Por lo tanto, en un contexto de tabla,
border: hidden
(oborder-style: hidden
) tendrá la máxima prioridad y hará que el borde compartido esté oculto, pase lo que pase.En el otro extremo de las prioridades,
border: none
(oborder-style: none
) tienen la prioridad más baja, seguida del borde de ancho cero (porque es el borde más estrecho). Esto significa que un valor calculado deborder-style: none
y un valor calculado deborder-width: 0
son esencialmente los mismos.Reglas en cascada y herencia
Desde
none
y0
afectar a diferentes propiedades (border-style
yborder-width
), que se comportan de manera diferente cuando un regla más específica define sólo el estilo o simplemente la anchura. Vea la respuesta de Chris para un ejemplo.Demostración en vivo !
¿Quieres ver todos estos casos en una sola página? ¡Abre la demostración en vivo !
fuente
Utilizando
no funciona en algunas versiones de IE. IE9 está bien, pero en versiones anteriores muestra el borde incluso cuando el estilo es "ninguno". Experimenté esto al usar una hoja de estilo de impresión donde no quería bordes en los cuadros de entrada.
parece funcionar bien en todos los navegadores.
fuente
Simplemente puede usar ambos según la especificación amablemente proporcionada por Oli.
Yo siempre uso
border:0 none;
.Aunque no hay ningún daño en especificarlos por separado y algunos navegadores analizarán el CSS más rápido si utiliza las llamadas de propiedad CSS1 heredadas.
Aunque
border:0;
normalmente usará el estilo de borde predeterminadonone
, sin embargo, he notado que algunos navegadores aplican su estilo de borde predeterminado que puede sobrescribir extrañamenteborder:0;
.fuente
Yo suelo:
Desde 8.5.4 en CSS 2.1 :
Entonces, cualquiera de sus métodos se ve bien.
fuente
Bueno, para ver con precisión la diferencia entre
border: 0
yborder: none
podemos hacer algunos experimentos.Experimentar:
Vamos a crear tres divs, el primero cuyo borde solo se puede desactivar estableciendo su ancho en cero, el segundo que solo se puede desactivar estableciendo su estilo en ninguno, y un tercero con un borde que solo se puede "desactivar" estableciendo su color a transparente. Entonces intentemos el efecto de:
border: 0;
border: none;
border: transparent
estilo de borde: sólido! importante; color del borde: rojo! importante; ancho de borde: 2px! importante; color del borde: rojo! importante; ancho de borde: 2px! importante; estilo de borde: sólido! importante;
Mostrar fragmento de código
Mis resultados fueron los mismos en Firefox y Chrome:
border: 0;
Parece establecer el ancho del0
borde y el estilo del bordenone
, pero no cambiar el color del borde;border: none;
Parece que solo cambia el estilo de borde (anone
);border: transparent;
Parece cambiar el color deltransparent
borde a y el estilo del borde anone
;fuente
Si bien los resultados probablemente serán los mismos (sin borde), el 0 y ninguno técnicamente abordan cosas diferentes.
0 aborda el ancho del borde y ninguno aborda el estilo del borde. Obviamente, un borde de 0 ancho no existe, por lo que no tendrá estilo.
Sin embargo, si más adelante en su hoja de estilo tiene la intención de anular esto, naturalmente abordaría específicamente uno u otro. Si ahora quisiera un borde de 3px, eso sería anular directamente el borde: 0 en cuanto al ancho. Si ahora quisiera un borde punteado, sería un borde directamente anulante: ninguno en lo que respecta al estilo.
fuente
La forma más fácil de eliminar el borde con CSS
fuente
DEBEMOS USAR FRONTERA 0
Según mi opinión y experiencia, sugeriría utilizar Border: 0; Hay una razón válida y muy buena porque siempre que usamos borde: ninguno, entiendo que funciona, pero piense que estamos usando un borde, 1px, 2px, 3px, etc. Quiero decir que estamos dando el valor de que nuestro borde es ... px / em / rem a la derecha, por lo que debemos usar border: 0; para eliminar el valor del borde porque, como sabemos cuando usamos fondo: ninguno; significa que estamos eliminando el fondo de un fondo que no es un valor que es otra cosa.
Gracias
fuente
En mi punto
border:none
funciona pero no es válido w3c estándarasí que mejor podemos usar
border:0;
fuente
border: none
.