¿Cuál de los dos métodos cumple con los estándares W3C? ¿Ambos se comportan como se espera en los navegadores?
borde: ninguno;
borde: 0;
¿Cuál de los dos métodos cumple con los estándares W3C? ¿Ambos se comportan como se espera en los navegadores?
borde: ninguno;
borde: 0;
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 encontrar none
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.
'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
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.
border:none
sea de alguna manera mejor, pero usar esto como razonamiento es defectuoso.
Son equivalentes en efecto , apuntando a diferentes atajos :
border: 0;
//short for..
border-width: 0;
Y el otro..
border: none;
//short for...
border-style: none;
Ambos funcionan, solo elige uno y ve con él :)
border: 0;
es válido.
border: 0
NO es el atajo para border-width: 0
. En cambio, la versión corta siempre establece las tres propiedades: border-color
, border-style
y border-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.
<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>
border: none
lugar de border: 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 )
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
/ none
estilo. Entonces, a primera vista, estas tres reglas parecen equivalentes. Sin embargo, se comportan de diferentes maneras cuando se combinan con otras reglas.
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-style
delhidden
prevalecen sobre todas las demás fronteras conflictivas. [...]Las fronteras con un estilo de
none
tienen la prioridad más baja. [...]Si ninguno de los estilos es
hidden
y al menos uno de ellos no lo esnone
, 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: none
y un valor calculado de border-width: 0
son esencialmente los mismos.
Desde none
y 0
afectar a diferentes propiedades ( border-style
y 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.
¿Quieres ver todos estos casos en una sola página? ¡Abre la demostración en vivo !
Utilizando
border: none;
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.
border: 0;
parece funcionar bien en todos los navegadores.
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;
.
Yo suelo:
border: 0;
Desde 8.5.4 en CSS 2.1 :
'frontera'
Valor: [<ancho de borde> || <estilo de borde> || <'border-top-color'>] | heredar
Entonces, cualquiera de sus métodos se ve bien.
Bueno, para ver con precisión la diferencia entre border: 0
y border: none
podemos hacer algunos experimentos.
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;
Mis resultados fueron los mismos en Firefox y Chrome:
border: 0;
Parece establecer el ancho del 0
borde y el estilo del borde none
, pero no cambiar el color del borde;
border: none;
Parece que solo cambia el estilo de borde (a none
);
border: transparent;
Parece cambiar el color del transparent
borde a y el estilo del borde a none
;
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.
La forma más fácil de eliminar el borde con CSS
border: 0;
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