【问题标题】:Responsive search field layout while avoiding position absolute响应式搜索字段布局,同时避免绝对位置
【发布时间】:2017-08-27 00:34:26
【问题描述】:

我有这个特定的布局问题。

我想在一行中放置 3 个容器,其中左右具有固定宽度,中间一个是响应式的。里面有一个输入字段和提交按钮,其中输入字段是响应式的。示例:

我尝试做的是使用 div 包装器,其中包含用于输入的填充和假样式。然后在这个包装器中有width: 100%; 输入字段。可悲的是,无论我多么努力,我的方法都不起作用:

#general_before {display: inline-block; background: rgba(34, 43, 34, 0.5); width: 100px;}
#general_wrapper {display: inline-block; width: 100%; border: 2px solid black;}
#field_wrapper {padding: 5px; background: rgba(45, 65, 78, 0.5);}
#field {width: 100%;}
#submit {float: right;}
#general_after {display: inline-block; background: rgba(45, 87, 56, 0.5); width: 100px;}
<div id="general_before">BEFORE</div>
<div id="general_wrapper">
<input id="submit" type="submit" value="GO" />
<div id="field_wrapper"><input id="field" type="text" name="" placeholder="Enter your search term here.." value="" /></div>
</div>
<div id="general_after">AFTER</div>

我什至没有针对连续 3 个容器的解决方案,除了在中间容器上使用绝对位置 position: absolute; left: 200px; right: 200;。但这感觉是解决这个问题的错误方法。

【问题讨论】:

    标签: html css responsive-design


    【解决方案1】:

    试试Flexboxes

    #container, #general_wrapper {display: flex;}
    #general_wrapper, #field_wrapper {flex-grow: 1;}
    #field { width: 100%;}
    <div id="general_before">BEFORE</div>
    <div id="general_wrapper">
    <input id="submit" type="submit" value="GO" />
    <div id="field_wrapper"><input id="field" type="text" name="" placeholder="Enter your search term here.." value="" /></div>
    </div>
    <div id="general_after">AFTER</div>

    IE 支持更新

    #container , #general_wrapper { display: table; width: 100%;}
    #general_before, #general_after, #submit, #field_wrapper { display: table-cell;}
    
    #field_wrapper, #field_wrapper input  { width: 100%;}
    #general_before, #general_after, #submit {width: 100px;}
    <div id="general_before">BEFORE</div>
    <div id="general_wrapper">
    <input id="submit" type="submit" value="GO" />
    <div id="field_wrapper"><input id="field" type="text" name="" placeholder="Enter your search term here.." value="" /></div>
    </div>
    <div id="general_after">AFTER</div>

    【讨论】:

    • 有趣的阅读。 caniuse.com/#feat=flexbox 但我也需要部分 IE 支持。寻找更老式的解决方案,或者至少是兼容性。
    • 对于 IE 支持,看看这个答案:stackoverflow.com/questions/24371408/…
    • 我可能会想出一个解决方案,它使用更少的代码来实现现代化。但我希望它干燥成骨头,没有任何额外的东西。没有 jQuery,没有额外的库。
    • 答案不仅推荐使用modernizer,还提出了fallback css方案(使用display: table-*等)。我用有效的解决方案更新了我的答案。
    • @KalleH.Väravas:如果对您有帮助,请将此答案标记为已接受。否则,如果您能解释为什么它对您没有帮助,那就太好了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-03
    • 2021-09-29
    • 2012-03-15
    相关资源
    最近更新 更多