Úselo paddingen las <a>etiquetas cuando desee aumentar el área enfocable .
Josh Habdas
Respuestas:
1586
TL; DR: Por defecto, uso el margen en todas partes, excepto cuando tengo un borde o fondo y quiero aumentar el espacio dentro de ese cuadro visible.
Para mí, la mayor diferencia entre el relleno y el margen es que los márgenes verticales se contraen automáticamente y el relleno no.
Considere dos elementos uno encima del otro, cada uno con relleno de 1em. Este relleno se considera parte del elemento y siempre se conserva.
Por lo tanto, terminará con el contenido del primer elemento, seguido del relleno del primer elemento, seguido del relleno del segundo, seguido del contenido del segundo elemento.
Así, el contenido de los dos elementos terminará siendo 2emseparado.
Ahora reemplace ese relleno con un margen de 1em. Los márgenes se consideran fuera del elemento, y los márgenes de los elementos adyacentes se superpondrán.
Entonces, en este ejemplo, terminará con el contenido del primer elemento seguido 1emde un margen combinado seguido del contenido del segundo elemento. Entonces el contenido de los dos elementos es solo 1emaparte.
Esto puede ser realmente útil cuando sabes que quieres decir 1emsobre el espacio alrededor de un elemento, independientemente de qué elemento esté al lado.
Las otras dos grandes diferencias son que el relleno se incluye en la región de clic y el color / imagen de fondo, pero no en el margen.
div.box > div {height:50px;width:50px;border:1px solid black;text-align: center;}
div.padding > div {padding-top:20px;}
div.margin > div {margin-top:20px;}
+1 Al diseñar la tipografía y las secuencias abritarias de párrafos, encabezados y listas, casi siempre es mejor espaciar los elementos con márgenes debido al comportamiento de colapso del margen adyacente.
Pete B
17
¿Por qué los márgenes verticales colapsan y los horizontales no? Eso podría confundir a mucha gente
Marcos Pereira
16
Los márgenes verticales solo se contraen para los elementos de bloque. Para los elementos de bloque en línea, los márgenes se agregan tanto vertical como horizontalmente. Por lo tanto, no estoy seguro de que sea un problema que los márgenes horizontales no colapsen en los elementos de bloque, ya que de todos modos llenan su contenedor.
Mike
2
"¿Por qué colapsan los márgenes verticales y no los horizontales?" no existe un mecanismo para tener elementos de bloque uno al lado del otro sin usar flotadores, cuyos márgenes nunca colapsan de todos modos (incluso vertical) o posicionamiento absoluto, donde obviamente no hay colapso o bloqueo en línea, que utiliza un modelo diferente donde se considera en línea y contenido (espacios, texto) es significativo, u otras cosas como tablas, flexbox, columnas donde el espacio entre columnas tiene un comportamiento especial. En resumen, no hay lugar donde se pueda usar el colapso del margen horizontal, incluso si es posible
thomasrutter
55
También debe tener en cuenta que el relleno se incluye en el ancho / alto total del elemento, cuando se usa con él, box-sizing: border-box;si tiene width: 100px; padding-left: 20px;el ancho total, seguirá siendo de 100 píxeles, pero el área para el contenido se reduce en 20 píxeles, a diferencia de box-sizing: content-box;donde el relleno está separado al calcular el ancho del contenido lo que hace que su ancho total sea de 120 px en el cuadro de contenido;
Jomar Sevillejo
1494
El margen está en el exterior de los elementos del bloque mientras que el relleno está en el interior.
Use el margen para separar el bloque de las cosas fuera de él.
Use relleno para alejar el contenido de los bordes del bloque.
Sin embargo, la respuesta correcta es @pavon a continuación. los márgenes de elementos adyacentes se superponen, mientras que el relleno no se superpone. es decir, la separación total espadding(A) + padding(B) + max(margin(A), margin(B))
nigromante
99
Esta es una buena práctica: use un borde rojo sólido para verificar el relleno y el margen. A veces, podríamos estropear cosas como <a>, que contiene algo de texto, rodeado de relleno y margen. Use este truco para verificar cuánto espacio podemos hacer clic.
p3nchan
589
Lo mejor que he visto explicando esto con ejemplos, diagramas e incluso una vista de "pruébalo tú mismo" está aquí .
Creo que el siguiente diagrama ofrece una comprensión visual instantánea de la diferencia.
Una cosa a tener en cuenta es que los navegadores que cumplen con los estándares (las peculiaridades de IE son una excepción ) representan solo la porción de contenido al ancho dado, así que haga un seguimiento de esto en los cálculos de diseño. También tenga en cuenta que el cuadro de borde está volviendo a aparecer con Bootstrap 3 apoyándolo.
Hay más explicaciones técnicas para su pregunta, pero si está buscando una manera de pensar margen y el relleno que lo ayudará a elegir cuándo y cómo usarlos, esto podría ayudar.
Compare elementos de bloque con imágenes colgadas en una pared:
La ventana del navegador es igual que la pared.
El contenido es como una fotografía.
El margen es como el espacio de la pared entre imágenes enmarcadas.
El relleno es como el tapete alrededor de una foto.
El borde es como el borde de un marco.
Al decidir entre margen y relleno, es una buena regla general usar el margen cuando está espaciando un elemento en relación con otras cosas en la pared, y el relleno cuando está ajustando la apariencia del elemento en sí. El margen no cambiará el tamaño del elemento, pero el relleno generalmente hará que el elemento sea más grande 1 .
1 Este modelo de caja por defecto puede ser alterado con el box-sizingatributo .
En realidad no estoy de acuerdo en box-sizing: border-boxhacer "más pequeño el espacio para el contenido". Aquí hay un violín con 2 cuadros donde, si seguí rellenando el mismo y agregué "Activo", luego "Desactivar" al pasar el mouse, no importaba si lo usaba box-sizing. Todavía expandiría la caja. Tuve que maximizar el relleno al máximo para que el cuadro se expandiera, luego usar prueba y error para encontrar una combinación coincidente para las otras palabras que entran en el cuadro que mantendría el mismo ancho para cada palabra: jsfiddle.net / navyjax2 / ngzqqjah
vapcguy
3
Hola vapcguy, gracias por tu aporte. Mi declaración es generalmente cierta, cuando se declara el ancho o la altura de un elemento, mientras que un elemento con dimensiones no declaradas no se ve realmente afectado por border-box(ver: jsfiddle.net/8yravLmL/1 ). Haré que mi respuesta sea más matizada para evitar confusiones.
stvnrynlds
86
MARGEN vs PADDING :
El margen se usa en un elemento para crear distancia entre ese elemento y otros elementos de la página. Donde el relleno se usa para crear distancia entre el contenido y el borde de un elemento.
El margen no es parte de un elemento donde el relleno es parte del elemento.
Haciendo referencia al borde, en lugar del vago 'El margen está en el exterior de los elementos del bloque mientras que el relleno está en el interior'. fuera / dentro de qué? Y afuera / adentro sugiere una posición estática, no que afecte el tamaño del elemento contenedor. Esta respuesta me lo aclaró.
Aquí hay algunos HTML que demuestran cómo paddingy marginafectan la capacidad de hacer clic y el relleno de fondo. Un objeto recibe clics en su relleno, pero los clics en un área marginada de objetos van a su padre.
Lo que pasa con los márgenes es que no necesita preocuparse por el ancho del elemento.
Al igual que cuando das algo {padding: 10px;}, tendrás que reducir el ancho del elemento en 20px para mantener el ' ajuste ' y no molestar a otros elementos a su alrededor.
Así que generalmente empiezo usando rellenos para obtener todo ' packed' y luego uso márgenes para pequeños ajustes.
Otra cosa a tener en cuenta es que los rellenos son más consistentes en diferentes navegadores e IE no trata muy bien los márgenes negativos.
El margen borra un área alrededor de un elemento (fuera del borde), pero el relleno borra un área alrededor del contenido (dentro del borde) de un elemento.
significa que su elemento no sabe acerca de sus márgenes externos, por lo que si está desarrollando controles web dinámicos, le recomiendo que use relleno o margen si puede.
Tenga en cuenta que algunas veces tiene que usar margen.
Una cosa a tener en cuenta es que cuando los márgenes de contracción automática lo molestan (y no está utilizando colores de fondo en sus elementos), algo que es más fácil de usar relleno.
Es inapropiado usar paddingpara espaciar el contenido en un elemento; se debe utilizar marginen el elemento hijo en su lugar. Los navegadores más antiguos, como Internet Explorer, malinterpretaron el modelo de la caja, excepto cuando se trataba de usar, marginque funciona perfectamente en Internet Explorer 4 .
Hay dos excepciones cuando usar paddinges apropiado:
Se aplica a un elemento en línea que no puede contener elementos secundarios, como un elemento de entrada.
Está compensando un error de navegador muy variado que un proveedor * tos * Mozilla * tos * se niega a corregir y está seguro (en la medida en que mantiene intercambios regulares con los editores W3C y WHATWG) de que debe tener una solución que funcione y esta solución no afectará el estilo de otra cosa que no sea el error que está compensando.
Cuando tienes un elemento de 100% de ancho padding: 50px;, efectivamente obtienes width: calc(100% + 100px);. Dado marginque no se agrega al width, no causará problemas de diseño inesperados cuando se usa marginen child elementslugar de paddingdirectamente en el elemento.
Así que si estás no haciendo una de esas dos cosas no sin agregar relleno al elemento, pero a ella es / hijos elemento (s) hijo directo para asegurarse de que va a conseguir el esperado comportamiento en todos los navegadores.
Primero veamos cuáles son las diferencias y cuál es cada responsabilidad:
1) Margen
Las propiedades de margen CSS se utilizan para generar espacio alrededor de los elementos.
Las propiedades de margen establecen el tamaño del espacio en blanco fuera del borde. Con CSS, tienes control total sobre los márgenes. Hay propiedades CSS para configurar el margen para cada lado de un elemento (arriba, derecha, abajo e izquierda).
2) Relleno
Las propiedades de relleno CSS se utilizan para generar espacio alrededor del contenido.
El relleno borra un área alrededor del contenido (dentro del borde) de un elemento. Con CSS, tienes control total sobre el relleno. Hay propiedades CSS para configurar el relleno para cada lado de un elemento (arriba, derecha, abajo e izquierda).
Entonces, simplemente los márgenes son espacios alrededor de los elementos, mientras que los rellenos son espacios alrededor del contenido que son parte del elemento.
Esta imagen de codemancers muestra cómo se unen el margen y los bordes y cómo el cuadro de borde y el cuadro de contenido lo hacen diferente.
También definen cada sección de la siguiente manera:
Contenido : define el área de contenido del cuadro donde reside el contenido real, como texto, imágenes u otros elementos.
Relleno : esto borra el contenido principal de su caja de contenido.
Borde : rodea tanto el contenido como el relleno.
Margen : esta área define un espacio transparente que lo separa de otros elementos.
El margen generalmente se usa para crear un espacio entre el elemento en sí y su entorno.
por ejemplo, lo uso cuando estoy construyendo una barra de navegación para que se adhiera a los bordes de la pantalla y sin espacios en blanco.
Relleno
Usualmente uso cuando tengo un elemento dentro de un borde, <div> o algo similar, y quiero disminuir su tamaño, pero en ese momento quiero mantener la distancia o el margen entre los otros elementos a su alrededor.
Brevemente, es situacional; Depende de lo que estés tratando de hacer.
padding
en las<a>
etiquetas cuando desee aumentar el área enfocable .Respuestas:
TL; DR: Por defecto, uso el margen en todas partes, excepto cuando tengo un borde o fondo y quiero aumentar el espacio dentro de ese cuadro visible.
Para mí, la mayor diferencia entre el relleno y el margen es que los márgenes verticales se contraen automáticamente y el relleno no.
Considere dos elementos uno encima del otro, cada uno con relleno de
1em
. Este relleno se considera parte del elemento y siempre se conserva.Por lo tanto, terminará con el contenido del primer elemento, seguido del relleno del primer elemento, seguido del relleno del segundo, seguido del contenido del segundo elemento.
Así, el contenido de los dos elementos terminará siendo
2em
separado.Ahora reemplace ese relleno con un margen de 1em. Los márgenes se consideran fuera del elemento, y los márgenes de los elementos adyacentes se superpondrán.
Entonces, en este ejemplo, terminará con el contenido del primer elemento seguido
1em
de un margen combinado seguido del contenido del segundo elemento. Entonces el contenido de los dos elementos es solo1em
aparte.Esto puede ser realmente útil cuando sabes que quieres decir
1em
sobre el espacio alrededor de un elemento, independientemente de qué elemento esté al lado.Las otras dos grandes diferencias son que el relleno se incluye en la región de clic y el color / imagen de fondo, pero no en el margen.
fuente
box-sizing: border-box;
si tienewidth: 100px; padding-left: 20px;
el ancho total, seguirá siendo de 100 píxeles, pero el área para el contenido se reduce en 20 píxeles, a diferencia debox-sizing: content-box;
donde el relleno está separado al calcular el ancho del contenido lo que hace que su ancho total sea de 120 px en el cuadro de contenido;El margen está en el exterior de los elementos del bloque mientras que el relleno está en el interior.
fuente
padding(A) + padding(B) + max(margin(A), margin(B))
<a>
, que contiene algo de texto, rodeado de relleno y margen. Use este truco para verificar cuánto espacio podemos hacer clic.Lo mejor que he visto explicando esto con ejemplos, diagramas e incluso una vista de "pruébalo tú mismo" está aquí .
Creo que el siguiente diagrama ofrece una comprensión visual instantánea de la diferencia.
Una cosa a tener en cuenta es que los navegadores que cumplen con los estándares (las peculiaridades de IE son una excepción ) representan solo la porción de contenido al ancho dado, así que haga un seguimiento de esto en los cálculos de diseño. También tenga en cuenta que el cuadro de borde está volviendo a aparecer con Bootstrap 3 apoyándolo.
fuente
Hay más explicaciones técnicas para su pregunta, pero si está buscando una manera de pensar margen y el relleno que lo ayudará a elegir cuándo y cómo usarlos, esto podría ayudar.
Compare elementos de bloque con imágenes colgadas en una pared:
Al decidir entre margen y relleno, es una buena regla general usar el margen cuando está espaciando un elemento en relación con otras cosas en la pared, y el relleno cuando está ajustando la apariencia del elemento en sí. El margen no cambiará el tamaño del elemento, pero el relleno generalmente hará que el elemento sea más grande 1 .
1 Este modelo de caja por defecto puede ser alterado con el
box-sizing
atributo .fuente
box-sizing: border-box
hacer "más pequeño el espacio para el contenido". Aquí hay un violín con 2 cuadros donde, si seguí rellenando el mismo y agregué "Activo", luego "Desactivar" al pasar el mouse, no importaba si lo usababox-sizing
. Todavía expandiría la caja. Tuve que maximizar el relleno al máximo para que el cuadro se expandiera, luego usar prueba y error para encontrar una combinación coincidente para las otras palabras que entran en el cuadro que mantendría el mismo ancho para cada palabra: jsfiddle.net / navyjax2 / ngzqqjahborder-box
(ver: jsfiddle.net/8yravLmL/1 ). Haré que mi respuesta sea más matizada para evitar confusiones.MARGEN vs PADDING :
El margen se usa en un elemento para crear distancia entre ese elemento y otros elementos de la página. Donde el relleno se usa para crear distancia entre el contenido y el borde de un elemento.
El margen no es parte de un elemento donde el relleno es parte del elemento.
Consulte a continuación la imagen extraída de Margin Vs Padding - Propiedades de CSS
fuente
Desde https://www.w3schools.com/css/css_boxmodel.asp
Ejemplo en vivo (juegue cambiando los valores): https://www.w3schools.com/css/tryit.asp?filename=trycss_boxmodel
fuente
Aquí hay algunos HTML que demuestran cómo
padding
ymargin
afectan la capacidad de hacer clic y el relleno de fondo. Un objeto recibe clics en su relleno, pero los clics en un área marginada de objetos van a su padre.fuente
Lo que pasa con los márgenes es que no necesita preocuparse por el ancho del elemento.
Al igual que cuando das algo
{padding: 10px;}
, tendrás que reducir el ancho del elemento en 20px para mantener el ' ajuste ' y no molestar a otros elementos a su alrededor.Así que generalmente empiezo usando rellenos para obtener todo '
packed
' y luego uso márgenes para pequeños ajustes.Otra cosa a tener en cuenta es que los rellenos son más consistentes en diferentes navegadores e IE no trata muy bien los márgenes negativos.
fuente
El margen borra un área alrededor de un elemento (fuera del borde), pero el relleno borra un área alrededor del contenido (dentro del borde) de un elemento.
significa que su elemento no sabe acerca de sus márgenes externos, por lo que si está desarrollando controles web dinámicos, le recomiendo que use relleno o margen si puede.
Tenga en cuenta que algunas veces tiene que usar margen.
fuente
Es bueno saber las diferencias entre
margin
ypadding
. Aquí hay algunas diferencias:El margen es el espacio exterior de un elemento, mientras que el relleno es el espacio interior de un elemento.
El margen es el espacio fuera del borde de un elemento, mientras que el relleno es el espacio dentro del borde del mismo.
Margen acepta el valor de auto:
margin: auto
pero no puede configurar el relleno en auto.El margen se puede establecer en cualquier número, pero el relleno no debe ser negativo.
Cuando diseña un elemento, el relleno también se verá afectado (por ejemplo, el color de fondo), pero no el margen.
fuente
Una cosa a tener en cuenta es que cuando los márgenes de contracción automática lo molestan (y no está utilizando colores de fondo en sus elementos), algo que es más fácil de usar relleno.
fuente
Margen avanzado versus relleno explicado
Es inapropiado usar
padding
para espaciar el contenido en un elemento; se debe utilizarmargin
en el elemento hijo en su lugar. Los navegadores más antiguos, como Internet Explorer, malinterpretaron el modelo de la caja, excepto cuando se trataba de usar,margin
que funciona perfectamente en Internet Explorer 4 .Hay dos excepciones cuando usar
padding
es apropiado:Se aplica a un elemento en línea que no puede contener elementos secundarios, como un elemento de entrada.
Está compensando un error de navegador muy variado que un proveedor * tos * Mozilla * tos * se niega a corregir y está seguro (en la medida en que mantiene intercambios regulares con los editores W3C y WHATWG) de que debe tener una solución que funcione y esta solución no afectará el estilo de otra cosa que no sea el error que está compensando.
Cuando tienes un elemento de 100% de ancho
padding: 50px;
, efectivamente obtieneswidth: calc(100% + 100px);
. Dadomargin
que no se agrega alwidth
, no causará problemas de diseño inesperados cuando se usamargin
enchild elements
lugar depadding
directamente en el elemento.Así que si estás no haciendo una de esas dos cosas no sin agregar relleno al elemento, pero a ella es / hijos elemento (s) hijo directo para asegurarse de que va a conseguir el esperado comportamiento en todos los navegadores.
fuente
Primero veamos cuáles son las diferencias y cuál es cada responsabilidad:
Entonces, simplemente los márgenes son espacios alrededor de los elementos, mientras que los rellenos son espacios alrededor del contenido que son parte del elemento.
Esta imagen de codemancers muestra cómo se unen el margen y los bordes y cómo el cuadro de borde y el cuadro de contenido lo hacen diferente.
También definen cada sección de la siguiente manera:
fuente
Siempre uso este principio:
Este es el modelo de caja de la función de elemento de inspección en Firefox. Funciona como una cebolla:
Por lo tanto, los márgenes más grandes harán más espacio alrededor del cuadro que contiene su contenido.
Un relleno más grande aumentará el espacio entre su contenido y la caja en la que se encuentra.
Ninguno de ellos aumentará o disminuirá el tamaño del cuadro si se establece en un valor específico.
fuente
Margen
El margen generalmente se usa para crear un espacio entre el elemento en sí y su entorno.
por ejemplo, lo uso cuando estoy construyendo una barra de navegación para que se adhiera a los bordes de la pantalla y sin espacios en blanco.
Relleno
Usualmente uso cuando tengo un elemento dentro de un borde,
<div>
o algo similar, y quiero disminuir su tamaño, pero en ese momento quiero mantener la distancia o el margen entre los otros elementos a su alrededor.Brevemente, es situacional; Depende de lo que estés tratando de hacer.
fuente
El margen está fuera de la caja y el relleno está dentro de la caja.
fuente