响应100%宽度的搜索栏,用于解释其他导航元素

时间:2015-01-29 08:10:34

标签: html css navigation searchbar

我试图创建一个类似于youtube的导航栏,其中有两个div,每个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 个答案:

答案 0 :(得分:1)

也许是这样的? http://jsfiddle.net/L9qvpL32/2/

我只是更改了元素的顺序并更改了一些宽度:)

如果您不希望搜索栏改变位置,只需更改为

#searchBar-form {
    position: relative;
    overflow: hidden;
    min-width: 200px;
}

答案 1 :(得分:0)

这是你要找的吗? (您需要对其进行一些优化以阻止搜索完全隐藏在较小的屏幕上)     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%;   
}

答案 2 :(得分:0)

    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/

答案 3 :(得分:0)

您应该尝试使用flexbox。使用flexbox,您可以在同一行中浮动尽可能多的div,并且它们也会响应父级和彼此的响应。

您还可以设置,哪个元素应填充剩余空间,以及哪个元素宽度固定为绝对值。

  • 显示:flex; ==&gt;把它变成了flexbox模型
  • flex-grow:0/1 (或其他)==&gt;如果有剩余空间,当前框可以增长
  • flex-shrink:0/1 (或其他)==&gt;如果空间少于元素宽度
  • ,则当前框可以缩小

您可以在此处找到灵活的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>