Qual é exatamente a diferença entre the inline
e inline-block
values of CSS display
?
Qual é exatamente a diferença entre the inline
e inline-block
values of CSS display
?
Respostas:
Imagine um <span>
elemento dentro de a <div>
. Se você der ao <span>
elemento uma altura de 100px e uma borda vermelha, por exemplo, ele ficará assim com
display: embutido
display: bloco embutido
display: bloco
Código: http://jsfiddle.net/Mta2b/
Elementos com display:inline-block
são como display:inline
elementos, mas eles podem ter uma largura e uma altura . Isso significa que você pode usar um elemento de bloco embutido como um bloco enquanto o flui dentro de texto ou outros elementos.
Diferença de estilos suportados como resumo:
margin-left
, margin-right
, padding-left
,padding-right
margin
, padding
, height
,width
p
, div
obtêm uma linha inteira de largura (força uma quebra de linha), mas respeitam a largura / altura e todos os preenchimentos / margens horizontais / verticais. Elementos inline-bloco têm o mesmo comportamento como bloco, mas sem toda quebra de linha (outros elementos podem ser colocados ao lado deles)
display: inline;
é um modo de exibição para usar em uma frase. Por exemplo, se você possui um parágrafo e deseja destacar uma única palavra, faça:
<p>
Pellentesque habitant morbi <em>tristique</em> senectus
et netus et malesuada fames ac turpis egestas.
</p>
O <em>
elemento tem um display: inline;
por padrão, porque essa tag é sempre usada em uma frase. O <p>
elemento tem um display: block;
por padrão, porque não é nem uma frase nem em uma frase, é um bloco de frases.
Um elemento com display: inline;
não pode ter um height
ou um width
ou um vertical margin
. Um elemento com display: block;
pode ter a width
, height
e margin
.
Se você deseja adicionar um height
ao <em>
elemento, defina esse elemento como display: inline-block;
. Agora você pode adicionar um height
ao elemento e a qualquer outro estilo de bloco (a block
parte de inline-block
), mas ele é colocado em uma frase (a inline
parte de inline-block
).
display
valores.
Uma coisa não mencionada nas respostas é que o elemento inline pode quebrar entre linhas, enquanto o bloco inline não pode (e obviamente bloqueia)! Portanto, os elementos embutidos podem ser úteis para estilizar frases de texto e blocos dentro deles, mas como eles não podem ser preenchidos, você pode usar a altura da linha .
<div style="width: 350px">
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
<div style="display: inline; background: #F00; color: #FFF">
Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
</div>
Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
</div>
<hr/>
<div style="width: 350px">
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
<div style="display: inline-block; background: #F00; color: #FFF">
Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
</div>
Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
</div>
Todas as respostas acima contribuem com informações importantes sobre a pergunta original. No entanto, há uma generalização que parece errada.
É possível definir largura e altura para pelo menos um elemento embutido (que eu possa pensar) - o <img>
elemento.
As duas respostas aceitas aqui e neste duplicado afirmam que isso não é possível, mas isso não parece uma regra geral válida.
Exemplo:
O img
tem display: inline
, mas é width
e height
foi definido com sucesso.
A resposta de splattne provavelmente cobriu quase tudo, para não repetir a mesma coisa, mas: inline
e inline-block
se comportar de maneira diferente com a direction
propriedade CSS.
No próximo trecho que você vê one two
(em ordem) é renderizado, como nos layouts LTR. Eu suspeito que o navegador aqui detectou automaticamente a parte em inglês como texto LTR e a processou da esquerda para a direita.
body {
text-align: right;
direction: rtl;
}
h2 {
display: block; /* just being explicit */
}
span {
display: inline;
}
<h2>
هذا عنوان طويل
<span>one</span>
<span>two</span>
</h2>
No entanto, se eu for em frente e defina display
como inline-block
, o navegador parece respeitar a direction
propriedade e renderizar os elementos da direita para a esquerda, para que two one
seja renderizado.
body {
text-align: right;
direction: rtl;
}
h2 {
display: block; /* just being explicit */
}
span {
display: inline-block;
}
<h2>
هذا عنوان طويل
<span>one</span>
<span>two</span>
</h2>
Eu não sei se existem outras peculiaridades para isso, eu só descobri isso empiricamente no Chrome.