De acordo com a descrição no modelo de formatação visual CSS
'margin-left' + 'border-left-width' + 'padding-left' + 'width' + 'padding-right' + 'border-right-width' + 'margin-right' = largura do bloco que o contém
Quando margin
e width
não são nenhum dos dois auto
e sua soma é maior que a largura do bloco que o contém, margin-right
serão ignorados e o valor será calculado de modo a tornar a igualdade verdadeira
.parent {
background-color: #01c1ff;
width: 400px;
height: 400px;
margin: auto;
}
.child {
height: 200px;
margin-left: 150px;
width: 200px;
margin-right: 150px;
background-color: #ff01c1;
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<div class="parent">
<div class="child"></div>
</div>
</body>
</html>
Neste código, para "child", a largura do bloco que o contém é de 400px e a soma de ++ width
é de 500px. De acordo com a descrição, deve ser definido como 50px para que a equação seja verdadeira.margin-left
margin-rigth
margin-right
Mas quando verifiquei no navegador, descobri que a margem direita não estava definida como 50px, mas ainda como 150px.
No fluxo normal :
Quando nenhum desses valores for
auto
, mas a soma deles exceder a largura do bloco que os contém , algo precisa ceder . De acordo com a especificação CSS2.1 §10.3.3 :Esta parte está correta em teoria .
Mas aqui está o que realmente está acontecendo no seu código
Você escreveu:
width: 400px
Mas, na prática , o navegador não recalcula
margin-right
para corrigir o problema. Em vez disso, ele simplesmente transborda o filho para além da largura do pai.Isso é permitido porque:
Portanto, a especificação fornece uma fórmula que pode ser usada para corrigir layouts excessivamente restritos quando um dos valores é
auto
.Mas se nenhuma delas for
auto
, os navegadores respeitam o que você escreveu , mesmo que isso quebre a caixa.Experimente isto em vez disso:
Se você quiser que o layout se ajuste conforme a especificação sugere, defina um valor para
auto
, por exemplo:Agora, o navegador calculará
margin-right
50px para ajustar a equação!