sBogom
@sBogom
Начинающий web-дизайнер.

Как правильно устроить масштабирование контента при использовании Flex-box'са?

Всем привет. Недавно начал увлекаться веб-дизайном, но поскольку опыта мало, то соответственно возникли некоторое проблемы. В общем идея сайта (на первых парах) была проста. Есть два горизонтальных flex-box'са. 1 блок отвечает за панель-меню, а 2 за основной контент. По задумке 1 блок с фиксированной шириной в 320px и высотой 100% (у body высота = 100vh), при нажатии на кнопку должен был отодвигаться влево, то есть фиксированная ширина по нажатию становилась равной 45px. При этом 2 блок должен был правильно с масштабироваться относительно свободного пространства. В принципе почитав о свойствах flex-box'са мне удалось что-то подобное реализовать. Но по каким-то не понятным мне причинам, высота блоков 1 и 2 начинает игнорироваться, если в любой из блоков вложить другой блок с высотой превышающую высоту видимой области экрана. Как бы высота вложенного блока меняется, но высота родителей остаётся неизменной. Что я только не пробовал, но решить проблему не удалось. Бьюсь уже 4 дня, а толку ноль. Может вы сможете подсказать, в чём заключается проблема. Исходный код html и css опубликованы чуть нижу + приклепана картинка, где визуально понятно, в чём проблема.

<body>
	<div id="menu-front">
		<div id="menu" onclick="check();"><img src="images/menu.png" width="45" height="45">Категории</div>
	</div>

	<div id="content">
		<div id="hapka-top">
			<a href="#" id="logotip">Logo</a>	
			
			<div id="hBlock-top">
				<div id="searche">
					<input type="text" value="Текст для поиска..." onfocus="this.value=''">
					<img src="images/search-icon.png" width="25" height="25">
				</div>

				<div id="login">
					
				</div>
			</div>
		</div>

		<div id="hapka-center"></div>
	</div>
</body>


body{
	margin: 0px;
	padding: 0px;
	
	display: flex;
	overflow-x: hidden;
	height: 100vh;
}

#menu-front{
	display: flex;
	flex: 0 0 auto;
	flex-direction: column;
	width: 320px;
	height: 100%;
	background: #58C2FE;
	-webkit-user-select: none;
}

#content{
	display: flex;
	flex-direction: column;
	flex: 1 1 auto;
	background: #FFE7BF;
}

#menu{
	display: flex;
	align-items: center;
	height: 55px;
	max-width: 100%;
	min-width: 190px;
	background: #00B0F7;
	text-shadow: #000000 0 0 20px;
	font-family: 'open-sans-light';
	color: White;
	cursor: pointer;
}

#hapka-top{
	display: flex;
	align-items: center;
	justify-content: space-between;
	flex: 0 0 auto;
	height: 55px;
	width: 100%;
	background: #B5EB69;
	-webkit-user-select: none;
}

#logotip{
	font-family: 'Bariol_Bold';
	font-size: 30px;
	text-decoration: none;
	margin-left: 15px;
	margin-right: 15px;
	color: #548859;
}

#hBlock-top{
	display: flex;
	flex: 0 0 auto;
	align-items: center;
	justify-content: space-between;
	height: 100%;
	width: 400px;
	margin-left: 15px;
	margin-right: 5px;
	overflow: hidden;
}

#searche{
	display: flex;
	align-items: center;
	height: 80%;
	width: 260px;
	border-radius: 4px 0px 0px 4px;
	background: #D8FFA2;
}

#searche input{
	flex: 1 1 auto;
	font-family: 'open-sans-light';
	margin-left: 5px;
	height: 70%;
	color: #999999;
	text-align: center;
	border: none;
	border-radius: 4px;
	padding: 0px 4px 0px 4px;
}

#searche input:focus{
	text-align: left;
	outline: none;
	color: #000000;
}

#searche img{
	flex: 0 0 auto;
	margin-left: 5px;
	margin-right: 5px;
	cursor: pointer;
}

#login{
	display: flex;
	flex: 1 0 auto;
	align-items: center;
	margin-left: 1px;
	height: 80%;
	background: #D8FFA2;
}

#hapka-center{
	flex: 0 0 auto;
	height: 1000px;
	width: 100%;
	background: black;
}


5afe50da456a1456960938.png
  • Вопрос задан
  • 902 просмотра
Пригласить эксперта
Ответы на вопрос 1
@boga-net
У вас у родителя стоит высота в 100 viewport height, а у дочернего элемента 1000px. Он будет его растягивать, а высота по-прежнему будет 100vh. Предлагаю левой боковой панели меню сделать

position: fixed;
left: 0;
top: 0;
width: 320px;
height: 100vh

Она всегда будет иметь высоту экрана. Правый блок сместить на ширину меню. Теперь его можно растягивать до бесконечности.

transform: translateX(320px)

Вот результат
https://jsfiddle.net/ouodkeLn/25/

Не задавайте высоту изображений в HTML коде. Всё в CSS :

#menu img {
  width: 45px;
  height: 45px;
}


Это же касается и обработчиков событий. Всё это дурной тон. Учитесь сразу делать красиво )
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы