Отзывчивая панель поиска шириной 100%, которая учитывает другие элементы навигации
Я пытаюсь создать панель навигации, похожую на youtube, где есть два элемента div, каждый из которых перемещается к противоположным сторонам экрана. В середине я пытаюсь сделать панель поиска, которая расширяется, чтобы заполнить оставшееся пространство. Когда пользователь изменяет размеры своего браузера, ширина панели поиска должна сокращаться, чтобы обеспечить адаптивный макет. Я не могу за свою жизнь понять, как это сделать. Всякий раз, когда я в состоянии заставить панель поиска реагировать, она заставляет правый всплывающий элемент div помещаться под ним и не начинает сворачиваться, пока не достигнет самого края экрана. Я хочу, чтобы он начал рушиться, как только он попадет в правильный плавающий div.
Вот HTML:
<header>
<nav id="page-nav-left" role="navigation"> </nav>
<form id="searchBar-form">
<input type="text" id="searchBar" placeholder="Search...">
</form>
<nav id="page-nav-right" role="navigation"> </nav>
</header>
CSS все в этой скрипке: http://jsfiddle.net/L9qvpL32/
4 ответа
Возможно, что-то подобное? http://jsfiddle.net/L9qvpL32/2/
Я просто изменил порядок ваших элементов и изменил некоторые ширины:)
Если вы не хотите, чтобы строка поиска меняла положение, просто измените на
#searchBar-form {
position: relative;
overflow: hidden;
min-width: 200px;
}
Вы должны попытаться использовать flexbox
, С помощью flexbox вы можете перемещать столько дивов, сколько вы занимаетесь в одном ряду, и они будут реагировать как на родителя, так и друг на друга.
Вы также можете указать, какой элемент должен заполнять оставшееся пространство, а какая ширина элементов фиксируется на абсолютном значении.
- дисплей: гибкий; ==> превращает это в модель flexbox
- flex-grow: 0/1 (или другое) ==> текущее поле может увеличиться, если осталось место
- flex-shrink: 0/1 (или другое) ==> текущее поле может сжаться, если места меньше, чем ширина элементов
Вы можете найти удивительный учебник для flexbox здесь: http://css-tricks.com/snippets/css/a-guide-to-flexbox/
header {
display: -webkit-flex;
display: flex;
position: fixed;
top: 0px;
z-index: 300;
width: 100%;
height: 48px;
background-color: blue;
}
#page-nav-left {
-webkit-flex-grow: 0;
flex-grow: 0;
-webkit-flex-shrink: 0;
flex-shrink: 0;
width: 100px;
background-color: red;
}
#page-nav-right {
-webkit-flex-grow: 0;
flex-grow: 0;
-webkit-flex-shrink: 0;
flex-shrink: 0;
width: 100px;
background-color: red;
}
#searchBar-form {
-webkit-flex-grow: 1;
flex-grow: 1;
-webkit-flex-shrink: 1;
flex-shrink: 1;
}
#searchBar {
width: 100%;
max-width: 400px;
}
#searchBar-button {
padding: 4px 15px;
border: 0px solid #207cca;
color: black;
}
<header>
<nav id="page-nav-left" role="navigation"> </nav>
<form id="searchBar-form">
<input type="text" id="searchBar" placeholder="Search...">
</form>
<nav id="page-nav-right" role="navigation"> </nav>
</header>
Это то, что вы ищете? (Вам нужно будет немного его уточнить, чтобы поиск полностью не отображался на небольших экранах) http://jsfiddle.net/zxctbynn/
<header>
<div class="left"></div>
<form id="searchBar-form" class="centre">
<input type="text" id="searchBar" placeholder="Search...">
</form>
<div class="right"></div>
</header>
header {
position: fixed;
top: 0px;
z-index: 300;
width: 100%;
height: 48px;
background-color: blue;
display: inline;
}
.left{
top: 0;
background-color: red;
width: 100px;
height:100%;
position: absolute;
}
.centre{
top: 0;
background-color: blue;
width: auto;
left: 100px;
right: 100px;
height:100%;
position: absolute;
padding: 0;
}
.centre input{
width: 100%;
}
header {
position: fixed;
top: 0px;
z-index: 300;
width: 100%;
height: 48px;
background-color: blue;
float:left;
}
form{
width:80%;
float:left;
}
#page-nav-left {
display: inline-block;
height: 100%;
width: 20%;
margin: 0 auto;
padding: 0px;
float: left;
background-color: red;
}
#page-nav-right {
display: inline-block;
height: 100%;
width: 20%;
margin: 0 auto;
padding: 0px;
float: left;
background-color: red;
}
#searchBar-form {
position: relative;
overflow: hidden;
width:60%;
}
#searchBar {
padding: 4px 15px;
background-color: white;
width: 100%;
}
#searchBar-button {
float: right;
padding: 4px 15px;
border: 0px solid #207cca;
color: black;
}
Я предполагаю, что это то, что вы хотите. Вы устанавливаете вашу навигацию в пикселях. Всегда устанавливайте ширину на% для отзывчивости. http://jsfiddle.net/L9qvpL32/1/