Вы должны добавить overflow: hidden;
к основному черному ящику, как показано ниже. Это сделает переполнение срезанным.
.block {
width: 300px;
height: 200px;
background: black;
overflow: hidden;
}
.box1 {
width: 200px;
height: 50px;
background: red;
margin: auto;
}
.box2 {
width: 200px;
height: 100%;
background: green;
margin: auto;
}
<div class="block">
<div class="box1">
</div>
<div class="box2">
</div>
</div>
Но если вы не хотите избавляться от оставшейся части второй коробки, вы можете сделать это и с помощью flexbox. Это не обрезает зеленое поле, но вместо этого оно изменит его размер, чтобы зеленый ящик остался в родительском черном поле.
.block {
width: 300px;
height: 200px;
background: black;
display: flex;
justify-content: center;
align-items: center;
flex-direction: column;
}
.box1 {
width: 200px;
height: 50px;
background: red;
}
.box2 {
width: 200px;
height: 100%;
background: green;
}
<div class="block">
<div class="box1">
</div>
<div class="box2">
</div>
</div>
ПРИМЕЧАНИЕ: В версии flexbox вам также не потребуется использовать margin: auto;
в дочерних полях, потому что в Направление столбца flexbox align-items: center;
позаботится о дочерних позициях с доступными нам атрибутами.