Anteriormente, minha suposição width: autoera de que a largura é definida como a do conteúdo. Agora vejo que ocupa toda a largura do pai.
Alguém pode descrever as diferenças entre eles?
Anteriormente, minha suposição width: autoera de que a largura é definida como a do conteúdo. Agora vejo que ocupa toda a largura do pai.
Alguém pode descrever as diferenças entre eles?
Respostas:
Largura automática
A largura inicial de um elemento de nível de bloco como div ou p é automática. Isso faz com que ele se expanda para ocupar todo o espaço horizontal disponível dentro do bloco que o contém. Se houver qualquer preenchimento ou borda horizontal, as larguras deles não são adicionadas à largura total do elemento.
Largura 100%
Por outro lado, se você especificar largura: 100%, a largura total do elemento será 100% do bloco que o contém mais qualquer margem horizontal, preenchimento e borda (a menos que você tenha usado tamanho de caixa: caixa de borda, nesse caso apenas as margens são adicionadas aos 100% para alterar como sua largura total é calculada). Isso pode ser o que você deseja, mas provavelmente não é.
Para visualizar a diferença veja esta imagem:

width: autoque se comporta dessa maneira: stackoverflow.com/questions/28353625/…
autofaz o mesmo quefill-available
width: auto; tentará o máximo possível manter um elemento com a mesma largura de seu contêiner pai quando espaço adicional for adicionado a partir das margens, preenchimento ou bordas.
width: 100%;tornará o elemento tão largo quanto o contêiner pai. Espaçamento extra será adicionado ao tamanho do elemento, independentemente do pai. Isso geralmente causa problemas.

Contanto que o valor da largura seja automático, o elemento pode ter margem horizontal, preenchimento e borda sem se tornar mais largo que seu contêiner (a menos, é claro, a soma de margem esquerda + borda esquerda largura + preenchimento esquerdo + preenchimento direito + border-right-width + margin-right é maior que o contêiner). A largura de sua caixa de conteúdo será o que restar quando a margem, o preenchimento e a borda forem subtraídos da largura do contêiner.
Por outro lado, se você especificar largura: 100%, a largura total do elemento será 100% do bloco que o contém mais qualquer margem horizontal, preenchimento e borda (a menos que você tenha usado tamanho de caixa: caixa de borda, nesse caso apenas as margens são adicionadas aos 100% para alterar como sua largura total é calculada). Isso pode ser o que você deseja, mas provavelmente não é.
Fonte:
http://www.456bereastreet.com/archive/201112/the_difference_between_widthauto_and_width100/
A largura inicial de um elemento de nível de bloco como div ou p é automática.
Use width: auto para desfazer larguras explicitamente especificadas.
se você especificar largura: 100%, a largura total do elemento será 100% do bloco que o contém mais qualquer margem horizontal, preenchimento e borda.
Então, da próxima vez que você definir a largura de um elemento de nível de bloco para 100% para fazê-lo ocupar toda a largura disponível, considere se o que você realmente deseja é defini-lo como automático.
Largura 100%: fará o conteúdo com 100%. margem, borda, preenchimento serão adicionados a essa largura e o elemento irá estourar se algum desses for adicionado.
Largura automática: Vai caber o elemento no espaço disponível, incluindo margem, borda e preenchimento. o espaço restante após o ajuste de margem + preenchimento + borda ficará disponível largura / altura.
Largura 100% + tamanho da caixa: caixa de borda: Ele também vai caber o elemento no espaço disponível, incluindo borda, preenchimento (a margem fará com que ele transborde o contêiner).
Usando largura: automático; + display: bloco embutido; em css dando um efeito incrível.
width : auto;
display: inline-block;
Quando dizemos
width:auto;
largura nunca excederá a largura total do elemento pai. A largura máxima é a largura do pai. Mesmo se adicionarmos borda, preenchimento e margem, o conteúdo do próprio elemento se tornará menor para dar espaço para borda, preenchimento e margem. Caso o espaço necessário para borda + preenchimento + margem seja maior que a largura total do elemento pai, a largura do conteúdo se tornará zero.
Quando dizemos
width:100%;
largura do conteúdo do elemento se tornará 100% do elemento pai e, a partir de agora, se adicionarmos borda, preenchimento ou margem, isso fará com que o elemento filho exceda a largura do elemento pai e começará a transbordar do elemento pai.