Вы можете использовать flex на родительском элементе вместо inline-block на дочерних элементах, это решило бы проблему сдвига второго блока, если не хватает места:
#top-level {
background: #90c0ff;
height: 400px;
width: 600px;
}
#container {
background: #bbffbb;
height: 400px;
width: 400px;
position: relative;
text-align: center;
display: inline-block;
vertical-align:top;
}
#inner {
height: 200px;
width: 200px;
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
border: 1px solid black;
}
#adjacent {
background: #ff5050;
height: 395px;
width: 195px;
display: inline-block;
vertical-align:top;
}
<div id="top-level">
<div id="container">
<div id="inner">
Internal Text
</div>
</div>
<div id="adjacent">
Sample text
</div>
</div>
Если вы хотите узнать реальную причину проблем с выравниванием, это потому, что у вас есть два элемента встроенных блоков, которые имеют разную высоту рядом друг с другом.
Вертикальным выравниванием по умолчанию для элементов встроенного блока является базовая линия, что означает, что вы получаете эффект, который видите.
Если вы измените вертикальное выравнивание на верхнюю часть как для контейнера, так и для смежного блока, ваш код будет работать так, как вы хотите:
#top-level {
background: #90c0ff;
height: 400px;
width: 600px;
/* add te following */
display: flex;
justify-content: space-between;
}
#container {
background: #bbffbb;
height: 400px;
width: 400px;
position: relative;
text-align: center;
}
#inner {
height: 200px;
width: 200px;
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
border: 1px solid black;
}
#adjacent {
background: #ff5050;
height: 395px;
width: 195px;
}
<div id="top-level">
<div id="container">
<div id="inner">
Internal Text
</div>
</div>
<div id="adjacent">
Sample text
</div>
</div>