%
- это относительная единица, когда вы говорите height:100%
, вы имеете в виду, что я хочу, чтобы этот элемент занимал 100% высоты его родителя.
Вы хотите, чтобы #mainContainer
было height:100%
его родителя, ну что это за родитель? и каков рост этого родителя?
Родитель #content
и это также height:100%
его родителя. Ну, что это за родитель? и каков рост этого родителя?
Родитель <body>
, а его рост 0
. Почему? Потому что вы не указали для него высоту.
Видите ли вы здесь образующийся паттерн?
height:100%
На других элементах работают, потому что вы устанавливаете их положение фиксированным, потому что они становятся относительно исходного содержащего блока <html>/viewport
и <html>/viewport
имеет высоту / ширину (в основном браузер)
Примечание: позиция, отличная от stati c или родственник извлечет элемент из потока документов, то есть он не повлияет на другие элементы и может иметь место перекрытие
Для достижения этого макета мы можем просто использовать flexbox
, если Вы не против изменить html.
* {
padding: 0;
margin: 0;
box-sizing: border-box;
}
html,
body {
height: 100%;
/* propagate the height from the html down to the body then #content */
}
#content {
display: flex;
flex-direction: column;
height: 100%;
}
#topSideContainer {
flex: 0 0 60px;
background-color: red;
}
#bottomSideContainer {
display: flex;
flex: 1;
}
#leftSideContainer {
flex: 0 0 250px;
background-color: orange;
}
#mainContainer {
height: 100%;
flex: 1 0 0;
background-color: pink;
}
<div id="content">
<div id="topSideContainer">
topSideContainer
</div>
<div id="bottomSideContainer">
<div id="leftSideContainer">
leftSideContainer
</div>
<div id="mainContainer">
mainContainer
</div>
</div>
</div>
или CSS Сетка без изменения html
* {
padding: 0;
margin: 0;
box-sizing: border-box;
}
html,
body {
height: 100%;
}
#content {
display: grid;
grid-template-columns: 250px 1fr;
grid-template-rows: 60px 1fr;
height: 100%;
}
#topSideContainer {
background-color: red;
grid-column: span 2;
}
#leftSideContainer {
background-color: orange;
}
#mainContainer {
background-color: pink;
}
<div id="content">
<div id="topSideContainer">
topSideContainer
</div>
<div id="leftSideContainer">
leftSideContainer
</div>
<div id="mainContainer">
mainContainer
</div>
</div>