占其他导航元素的响应式 100% 宽度搜索栏
Responsive 100% width search bar that accounts for the other nav elements
我正在尝试创建一个类似于 youtube 的导航栏,其中有两个 div 分别浮动到屏幕的相对两侧。在中间,我试图制作一个搜索栏,它会扩展以填充剩余的 space。当用户调整浏览器大小时,搜索栏的宽度应收缩以允许响应式布局。我终生无法弄清楚如何做到这一点。每当我能够让搜索栏响应时,它会导致右侧浮动 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全在这个fiddle:http://jsfiddle.net/L9qvpL32/
这是您要找的吗? (您需要对其进行一些改进,以防止在较小的屏幕上完全隐藏搜索)
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/
您应该尝试使用 flexbox
。使用 flexbox,您可以在同一行中浮动尽可能多的 div,并且它们也会响应父级和彼此。
您还可以设置哪些元素应该填充剩余的 space,以及哪些元素的宽度固定为绝对值。
- display: flex; ==> 把它变成 flexbox 模型
- flex-grow: 0/1 (or other) ==> 如果有剩余 space
当前框可以增长
- flex-shrink: 0/1 (or other) ==> 如果 space 小于元素 width[=34,则当前框可以收缩=]
您可以在这里找到 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/L9qvpL32/2/
我只是更改了您的元素的顺序并更改了一些宽度:)
如果您不想让搜索栏改变位置,只需更改为
#searchBar-form {
position: relative;
overflow: hidden;
min-width: 200px;
}
我正在尝试创建一个类似于 youtube 的导航栏,其中有两个 div 分别浮动到屏幕的相对两侧。在中间,我试图制作一个搜索栏,它会扩展以填充剩余的 space。当用户调整浏览器大小时,搜索栏的宽度应收缩以允许响应式布局。我终生无法弄清楚如何做到这一点。每当我能够让搜索栏响应时,它会导致右侧浮动 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全在这个fiddle:http://jsfiddle.net/L9qvpL32/
这是您要找的吗? (您需要对其进行一些改进,以防止在较小的屏幕上完全隐藏搜索) 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/
您应该尝试使用 flexbox
。使用 flexbox,您可以在同一行中浮动尽可能多的 div,并且它们也会响应父级和彼此。
您还可以设置哪些元素应该填充剩余的 space,以及哪些元素的宽度固定为绝对值。
- display: flex; ==> 把它变成 flexbox 模型
- flex-grow: 0/1 (or other) ==> 如果有剩余 space 当前框可以增长
- flex-shrink: 0/1 (or other) ==> 如果 space 小于元素 width[=34,则当前框可以收缩=]
您可以在这里找到 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/L9qvpL32/2/
我只是更改了您的元素的顺序并更改了一些宽度:)
如果您不想让搜索栏改变位置,只需更改为
#searchBar-form {
position: relative;
overflow: hidden;
min-width: 200px;
}