Use paddinga <a>tag quando você quiser aumentar a área focusable .
Josh Habdas
Respostas:
1586
TL; DR: Por padrão, uso margem em todos os lugares, exceto quando tenho uma borda ou plano de fundo e quero aumentar o espaço dentro dessa caixa visível.
Para mim, a maior diferença entre preenchimento e margem é que as margens verticais colapsam automaticamente e o preenchimento não.
Considere dois elementos um acima do outro, cada um com preenchimento de 1em. Esse preenchimento é considerado parte do elemento e é sempre preservado.
Portanto, você terminará com o conteúdo do primeiro elemento, seguido pelo preenchimento do primeiro elemento, seguido pelo preenchimento do segundo elemento, seguido pelo conteúdo do segundo elemento.
Assim, o conteúdo dos dois elementos acabará sendo 2emseparado.
Agora substitua esse preenchimento pela margem 1em. As margens são consideradas fora do elemento e as margens dos itens adjacentes se sobrepõem.
Portanto, neste exemplo, você terminará com o conteúdo do primeiro elemento seguido pela 1emmargem combinada seguida pelo conteúdo do segundo elemento. Portanto, o conteúdo dos dois elementos é apenas 1emseparado.
Isso pode ser realmente útil quando você sabe que deseja dizer o 1emespaçamento ao redor de um elemento, independentemente de qual elemento ele está próximo.
As outras duas grandes diferenças são que o preenchimento está incluído na região do clique e na cor / imagem do plano de fundo, mas não na margem.
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 Ao estilizar tipografia e seqüências abreviadas de parágrafos, títulos e listas, quase sempre é melhor espaçar os elementos com margens devido ao comportamento de colapso da margem adjacente.
Pete B
17
Por que as margens verticais colapsam enquanto as horizontais não? Isso poderia confundir muita gente
Marcos Pereira
16
As margens verticais são recolhidas apenas para elementos de bloco. Para elementos de bloco embutido, as margens são adicionadas vertical e horizontalmente. Portanto, não tenho certeza de que seja um problema que as margens horizontais não entrem em colapso nos elementos do bloco, pois eles enchem seus contêineres de qualquer maneira.
1655 Mike
2
"Por que as margens verticais colapsam enquanto as horizontais não?" não há mecanismo para ter elementos de bloco lado a lado sem o uso de flutuadores - cujas margens nunca caem de qualquer maneira (mesmo na vertical) ou posicionamento absoluto, onde obviamente não há colapso ou bloco embutido, que usa um modelo diferente em que é considerado inline e conteúdo (espaços, texto) é significativo ou outras coisas, como tabelas, caixas flexíveis, colunas em que a diferença entre colunas tem um comportamento especial. Então, em suma, não há lugar que a margem horizontal colapso poderia ser usado mesmo se possível
thomasrutter
5
Além disso, você deve observar que o preenchimento está incluído na largura / altura total do elemento, quando usado com box-sizing: border-box;isso, se você tiver width: 100px; padding-left: 20px;a largura total ainda será 100px, mas a área de conteúdo será reduzida em 20px, ao contrário de box-sizing: content-box;onde o preenchimento é separado no cálculo da largura do conteúdo o que torna a largura total de 120 pixels na caixa de conteúdo;
Jomar Sevillejo
1494
A margem fica do lado de fora dos elementos do bloco, enquanto o preenchimento está do lado de dentro.
Use a margem para separar o bloco das coisas fora dele
Use estofamento para afastar o conteúdo das bordas do bloco.
ainda, a resposta correta é por @pavon abaixo. as margens dos elementos adjacentes se sobrepõem, enquanto o preenchimento não se sobrepõe. isto é, a separação total épadding(A) + padding(B) + max(margin(A), margin(B))
necromante
9
Aqui está uma boa prática: use borda vermelha sólida para verificar o preenchimento e a margem. Às vezes, podemos atrapalhar coisas como <a>, que contém algum texto, cercado por preenchimento e margem. Use este truque para verificar quanto espaço podemos clicar.
P3nchan
589
O melhor que eu já vi explicando isso com exemplos, diagramas e até uma visão do tipo 'tente você mesmo' está aqui .
Acho que o diagrama abaixo fornece uma compreensão visual instantânea da diferença.
Uma coisa a ter em mente é que os navegadores compatíveis com os padrões (as peculiaridades do IE são uma exceção ) processam apenas a parte do conteúdo na largura especificada, portanto, acompanhe isso nos cálculos de layout. Observe também que a caixa de borda está tendo um retorno com o Bootstrap 3 suportando-a.
Há mais explicações técnicas para sua pergunta, mas se você estiver procurando uma maneira de pensar em margem e preenchimento que o ajudará a escolher quando e como usá-los, isso pode ajudar.
Compare os elementos do bloco com as imagens penduradas na parede:
A janela do navegador é exatamente como a parede.
O conteúdo é como uma fotografia.
A margem é exatamente como o espaço da parede entre as fotos emolduradas.
O preenchimento é exatamente como o tapete em torno de uma foto.
A borda é exatamente como a borda de um quadro.
Ao decidir entre margem e preenchimento, é uma boa regra usar margem quando você está espaçando um elemento em relação a outras coisas na parede e preenchimento quando você está ajustando a aparência do próprio elemento. A margem não altera o tamanho do elemento, mas o preenchimento geralmente aumenta o elemento 1 .
1 Este modelo de caixa padrão pode ser alterado com o box-sizingatributo .
Na verdade, eu não concordo em box-sizing: border-boxtornar "o espaço para o conteúdo menor". Aqui está um violino com 2 caixas onde, se eu mantivesse o mesmo preenchimento e adicionasse "Ativo", "Desativar" ao passar o mouse, não importava se eu usasse box-sizing. Ainda expandiria a caixa. Eu tive que maximizar o preenchimento o máximo que a caixa expandir, e usar tentativa e erro para criar uma combinação correspondente para as outras palavras inseridas na caixa que manteriam a mesma largura para cada palavra: jsfiddle.net / navyjax2 / ngzqqjah
vapcguy
3
Ei vapcguy, obrigado pela sua contribuição. Minha declaração geralmente é verdadeira, quando a largura ou a altura são declaradas para um elemento, enquanto um elemento com dimensões não declaradas não é realmente afetado por border-box(consulte: jsfiddle.net/8yravLmL/1 ). Vou tornar minha resposta mais sutil para evitar confusão.
Stvnrynlds
86
MARGIN vs PADDING :
Margem é usada em um elemento para criar distância entre esse elemento e outros elementos da página. Onde o preenchimento é usado para criar distância entre o conteúdo e a borda de um elemento.
A margem não faz parte de um elemento em que o preenchimento faz parte do elemento.
Fazendo referência à borda, em vez da vaga 'Margem, é do lado de fora dos elementos do bloco, enquanto o preenchimento é do lado de dentro'. fora / dentro de quê? E fora / dentro sugere uma posição estática, não que afete o tamanho do elemento que a contém. Esta resposta esclareceu para mim.
Aqui está um HTML que demonstra como paddinge marginafeta a clicabilidade e o preenchimento em segundo plano. Um objeto recebe cliques no preenchimento, mas os cliques na área da margem dos objetos vão para o pai.
O problema das margens é que você não precisa se preocupar com a largura do elemento.
Como quando você dá algo {padding: 10px;}, você terá que reduzir a largura do elemento em 20px para manter o ' ajuste ' e não perturbar outros elementos ao seu redor.
Então, geralmente começo usando almofadas para obter tudo ' packed' e depois uso as margens para pequenos ajustes.
Outra coisa a ter em atenção é que os preenchimentos são mais consistentes em diferentes navegadores e o IE não trata muito bem as margens negativas.
A margem limpa uma área ao redor de um elemento (fora da borda), mas o preenchimento limpa uma área ao redor do conteúdo (dentro da borda) de um elemento.
significa que seu elemento não conhece suas margens externas; portanto, se você estiver desenvolvendo controles dinâmicos da web, recomendo que você use padding vs margin, se puder.
Uma coisa a observar é que quando as margens de recolhimento automático o incomodam (e você não está usando cores de plano de fundo em seus elementos), algo é apenas mais fácil de usar o preenchimento.
É inapropriado usar paddingpara espaçar o conteúdo em um elemento; você deve utilizar margino elemento filho . Navegadores mais antigos, como o Internet Explorer, interpretaram mal o modelo da caixa, exceto quando se tratava de usar o marginque funciona perfeitamente no Internet Explorer 4 .
Existem duas exceções quando o uso paddingé apropriado:
É aplicado a um elemento embutido que não pode conter nenhum elemento filho, como um elemento de entrada.
Você está compensando um bug no navegador altamente variado que um fornecedor * tosse * Mozilla * tosse * se recusa a corrigir e tem certeza (na medida em que realiza trocas regulares com os editores W3C e WHATWG) de que você deve ter uma solução funcional e esta solução não afetará o estilo de nada além do bug que você está compensando.
Quando você tem um elemento de largura de 100%, padding: 50px;efetivamente obtém width: calc(100% + 100px);. Como nãomargin é adicionado ao item, não causará problemas inesperados de layout quando você o usar, em vez de diretamente no elemento.widthmarginchild elementspadding
Portanto, se você não estiver fazendo uma dessas duas coisas, não adicione preenchimento ao elemento, mas sim ao (s) elemento (s) filho (s) direto (s) para garantir que você obtenha o comportamento esperado em todos os navegadores.
Primeiro, vamos ver quais são as diferenças e qual é a responsabilidade:
1) Margem
As propriedades da margem CSS são usadas para gerar espaço em torno dos elementos.
As propriedades da margem definem o tamanho do espaço em branco fora da borda. Com CSS, você tem controle total sobre as margens. Existem propriedades CSS para definir a margem para cada lado de um elemento (superior, direito, inferior e esquerdo).
2) Preenchimento
As propriedades de preenchimento CSS são usadas para gerar espaço em torno do conteúdo.
O preenchimento limpa uma área ao redor do conteúdo (dentro da borda) de um elemento. Com CSS, você tem controle total sobre o preenchimento. Existem propriedades CSS para definir o preenchimento para cada lado de um elemento (superior, direito, inferior e esquerdo).
Então, simplesmente Margens são espaço ao redor de elementos, enquanto Padding é espaço ao redor de conteúdo que faz parte do elemento.
Esta imagem do codemancers mostra como a margem e as bordas ficam mais juntas e como a caixa de borda e a caixa de conteúdo a diferenciam.
Também eles definem cada seção como abaixo:
Conteúdo - define a área de conteúdo da caixa em que residem o conteúdo real, como texto, imagens ou talvez outros elementos.
Preenchimento - limpa o conteúdo principal da caixa que o contém.
Borda - envolve tanto o conteúdo quanto o preenchimento.
Margem - esta área define um espaço transparente que o separa de outros elementos.
Margem é geralmente usada para criar um espaço entre o próprio elemento e seu entorno.
por exemplo, uso-o quando estou construindo uma barra de navegação para que ela fique grudada nas bordas da tela e sem espaços brancos.
Preenchimento
Eu costumo usar quando tenho um elemento dentro de uma borda, <div>ou algo semelhante, e quero diminuir seu tamanho, mas no momento quero manter a distância ou a margem entre os outros elementos ao seu redor.
Então, brevemente, é situacional; depende do que você está tentando fazer.
padding
a<a>
tag quando você quiser aumentar a área focusable .Respostas:
TL; DR: Por padrão, uso margem em todos os lugares, exceto quando tenho uma borda ou plano de fundo e quero aumentar o espaço dentro dessa caixa visível.
Para mim, a maior diferença entre preenchimento e margem é que as margens verticais colapsam automaticamente e o preenchimento não.
Considere dois elementos um acima do outro, cada um com preenchimento de
1em
. Esse preenchimento é considerado parte do elemento e é sempre preservado.Portanto, você terminará com o conteúdo do primeiro elemento, seguido pelo preenchimento do primeiro elemento, seguido pelo preenchimento do segundo elemento, seguido pelo conteúdo do segundo elemento.
Assim, o conteúdo dos dois elementos acabará sendo
2em
separado.Agora substitua esse preenchimento pela margem 1em. As margens são consideradas fora do elemento e as margens dos itens adjacentes se sobrepõem.
Portanto, neste exemplo, você terminará com o conteúdo do primeiro elemento seguido pela
1em
margem combinada seguida pelo conteúdo do segundo elemento. Portanto, o conteúdo dos dois elementos é apenas1em
separado.Isso pode ser realmente útil quando você sabe que deseja dizer o
1em
espaçamento ao redor de um elemento, independentemente de qual elemento ele está próximo.As outras duas grandes diferenças são que o preenchimento está incluído na região do clique e na cor / imagem do plano de fundo, mas não na margem.
fonte
box-sizing: border-box;
isso, se você tiverwidth: 100px; padding-left: 20px;
a largura total ainda será 100px, mas a área de conteúdo será reduzida em 20px, ao contrário debox-sizing: content-box;
onde o preenchimento é separado no cálculo da largura do conteúdo o que torna a largura total de 120 pixels na caixa de conteúdo;A margem fica do lado de fora dos elementos do bloco, enquanto o preenchimento está do lado de dentro.
fonte
padding(A) + padding(B) + max(margin(A), margin(B))
<a>
, que contém algum texto, cercado por preenchimento e margem. Use este truque para verificar quanto espaço podemos clicar.O melhor que eu já vi explicando isso com exemplos, diagramas e até uma visão do tipo 'tente você mesmo' está aqui .
Acho que o diagrama abaixo fornece uma compreensão visual instantânea da diferença.
Uma coisa a ter em mente é que os navegadores compatíveis com os padrões (as peculiaridades do IE são uma exceção ) processam apenas a parte do conteúdo na largura especificada, portanto, acompanhe isso nos cálculos de layout. Observe também que a caixa de borda está tendo um retorno com o Bootstrap 3 suportando-a.
fonte
Há mais explicações técnicas para sua pergunta, mas se você estiver procurando uma maneira de pensar em margem e preenchimento que o ajudará a escolher quando e como usá-los, isso pode ajudar.
Compare os elementos do bloco com as imagens penduradas na parede:
Ao decidir entre margem e preenchimento, é uma boa regra usar margem quando você está espaçando um elemento em relação a outras coisas na parede e preenchimento quando você está ajustando a aparência do próprio elemento. A margem não altera o tamanho do elemento, mas o preenchimento geralmente aumenta o elemento 1 .
1 Este modelo de caixa padrão pode ser alterado com o
box-sizing
atributo .fonte
box-sizing: border-box
tornar "o espaço para o conteúdo menor". Aqui está um violino com 2 caixas onde, se eu mantivesse o mesmo preenchimento e adicionasse "Ativo", "Desativar" ao passar o mouse, não importava se eu usassebox-sizing
. Ainda expandiria a caixa. Eu tive que maximizar o preenchimento o máximo que a caixa expandir, e usar tentativa e erro para criar uma combinação correspondente para as outras palavras inseridas na caixa que manteriam a mesma largura para cada palavra: jsfiddle.net / navyjax2 / ngzqqjahborder-box
(consulte: jsfiddle.net/8yravLmL/1 ). Vou tornar minha resposta mais sutil para evitar confusão.MARGIN vs PADDING :
Margem é usada em um elemento para criar distância entre esse elemento e outros elementos da página. Onde o preenchimento é usado para criar distância entre o conteúdo e a borda de um elemento.
A margem não faz parte de um elemento em que o preenchimento faz parte do elemento.
Consulte a imagem abaixo extraída de Margin Vs Padding - CSS Properties
fonte
De https://www.w3schools.com/css/css_boxmodel.asp
Exemplo ao vivo (altere os valores): https://www.w3schools.com/css/tryit.asp?filename=trycss_boxmodel
fonte
Aqui está um HTML que demonstra como
padding
emargin
afeta a clicabilidade e o preenchimento em segundo plano. Um objeto recebe cliques no preenchimento, mas os cliques na área da margem dos objetos vão para o pai.fonte
O problema das margens é que você não precisa se preocupar com a largura do elemento.
Como quando você dá algo
{padding: 10px;}
, você terá que reduzir a largura do elemento em 20px para manter o ' ajuste ' e não perturbar outros elementos ao seu redor.Então, geralmente começo usando almofadas para obter tudo '
packed
' e depois uso as margens para pequenos ajustes.Outra coisa a ter em atenção é que os preenchimentos são mais consistentes em diferentes navegadores e o IE não trata muito bem as margens negativas.
fonte
A margem limpa uma área ao redor de um elemento (fora da borda), mas o preenchimento limpa uma área ao redor do conteúdo (dentro da borda) de um elemento.
significa que seu elemento não conhece suas margens externas; portanto, se você estiver desenvolvendo controles dinâmicos da web, recomendo que você use padding vs margin, se puder.
note que algumas vezes você precisa usar margem.
fonte
É bom saber as diferenças entre
margin
epadding
. Aqui estão algumas diferenças:Margem é o espaço externo de um elemento, enquanto o preenchimento é o espaço interno de um elemento.
Margem é o espaço fora da borda de um elemento, enquanto preenchimento é o espaço dentro da borda dele.
A margem aceita o valor de auto:,
margin: auto
mas você não pode definir o preenchimento como automático.A margem pode ser definida como qualquer número, mas o preenchimento deve ser não negativo.
Quando você estiliza um elemento, o preenchimento também será afetado (por exemplo, cor de fundo), mas não margem.
fonte
Uma coisa a observar é que quando as margens de recolhimento automático o incomodam (e você não está usando cores de plano de fundo em seus elementos), algo é apenas mais fácil de usar o preenchimento.
fonte
Margem avançada versus preenchimento explicado
É inapropriado usar
padding
para espaçar o conteúdo em um elemento; você deve utilizarmargin
o elemento filho . Navegadores mais antigos, como o Internet Explorer, interpretaram mal o modelo da caixa, exceto quando se tratava de usar omargin
que funciona perfeitamente no Internet Explorer 4 .Existem duas exceções quando o uso
padding
é apropriado:É aplicado a um elemento embutido que não pode conter nenhum elemento filho, como um elemento de entrada.
Você está compensando um bug no navegador altamente variado que um fornecedor * tosse * Mozilla * tosse * se recusa a corrigir e tem certeza (na medida em que realiza trocas regulares com os editores W3C e WHATWG) de que você deve ter uma solução funcional e esta solução não afetará o estilo de nada além do bug que você está compensando.
Quando você tem um elemento de largura de 100%,
padding: 50px;
efetivamente obtémwidth: calc(100% + 100px);
. Como nãomargin
é adicionado ao item, não causará problemas inesperados de layout quando você o usar, em vez de diretamente no elemento.width
margin
child elements
padding
Portanto, se você não estiver fazendo uma dessas duas coisas, não adicione preenchimento ao elemento, mas sim ao (s) elemento (s) filho (s) direto (s) para garantir que você obtenha o comportamento esperado em todos os navegadores.
fonte
Primeiro, vamos ver quais são as diferenças e qual é a responsabilidade:
Então, simplesmente Margens são espaço ao redor de elementos, enquanto Padding é espaço ao redor de conteúdo que faz parte do elemento.
Esta imagem do codemancers mostra como a margem e as bordas ficam mais juntas e como a caixa de borda e a caixa de conteúdo a diferenciam.
Também eles definem cada seção como abaixo:
fonte
Eu sempre uso este princípio:
Este é o modelo de caixa do recurso de elemento de inspeção no Firefox. Funciona como uma cebola:
Margens maiores criarão mais espaço ao redor da caixa que contém seu conteúdo.
O preenchimento maior aumentará o espaço entre o conteúdo e a caixa em que ele está dentro.
Nenhum deles aumentará ou diminuirá o tamanho da caixa se estiver definida com um valor específico.
fonte
Margem
Margem é geralmente usada para criar um espaço entre o próprio elemento e seu entorno.
por exemplo, uso-o quando estou construindo uma barra de navegação para que ela fique grudada nas bordas da tela e sem espaços brancos.
Preenchimento
Eu costumo usar quando tenho um elemento dentro de uma borda,
<div>
ou algo semelhante, e quero diminuir seu tamanho, mas no momento quero manter a distância ou a margem entre os outros elementos ao seu redor.Então, brevemente, é situacional; depende do que você está tentando fazer.
fonte
A margem está fora da caixa e o estofamento está dentro da caixa
fonte