Отзывчивая панель поиска шириной 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/

Другие вопросы по тегам