【问题标题】:Fixed width element with variable width input具有可变宽度输入的固定宽度元素
【发布时间】:2015-06-22 16:31:20
【问题描述】:

您可能会说之前有人问过这个问题,但这是一个带有错误的变体。所以我们都知道用来回答这个问题的技术: Fixed width div on left, fill remaining width div on right

但是,如果可变宽度元素是输入标签,这将不起作用。

http://jsfiddle.net/8pk4K/2050/

即使覆盖输入默认 css 也不能解决这个问题:

display: block;
overflow:hidden; 
background-color:green;
height: 100px;
width: auto;

我玩这个已经很久了,它只发生在输入标签上,如果你用跨度替换它(默认显示内联,但将它设置为显示块)它仍然有效。

知道为什么这只适用于输入标签而没有其他作用吗?

编辑: 为了澄清起见,我知道解决方法是将输入放入 div 并将宽度 100% 应用于输入。我的问题是为什么这是必要的,而不是如何解决它。

【问题讨论】:

  • 你可以使用 calc 来产生你想要的宽度:calc(100% - 240px);

标签: html css variable-width


【解决方案1】:

尝试为 .header 和 .header-right 添加以 % 为单位的宽度。 喜欢

.header{
width:20%;
}
.header-right{
width:80%;
}

【讨论】:

  • 这既不是我的要求也不是解决方案
【解决方案2】:

您可以使用 calc 来生成所需的宽度,因为输入是替换元素,它们具有与图像一样的固有尺寸

CSS

.header-right{
    display: block;
    overflow:hidden; 
    background-color:green;
    height: 100px;
    border: none;
    width: calc(100% - 240px); //Add this
    }

注意:你必须给选择一个尺寸(宽度)或者给你默认的浏览器宽度

DEMO HERE

【讨论】:

  • 请注意浏览器的支持,因为它是一项实验性技术...developer.mozilla.org/en-US/docs/Web/CSS/…
  • @LinkinTED 看看 - caniuse.com/#search=calc ...我认为大多数现代浏览器都支持它。很安全。
  • P.A.:至少所有最新版本都可以(Opera Mini 除外),而且我认为您应该始终保持软件更新......所以我支持您!
  • @MikeOram,输入被替换元素具有像图像一样的内在尺寸。我在答案中添加了注释
  • 所以..这很简单...您必须为选择指定尺寸(宽度),否则为您提供默认浏览器宽度。
【解决方案3】:

我知道问题所在,为表单元素设置样式总是让人头疼。

我想出了这个解决方法,将输入包装在正确的 div 中。

<div class="header"></div>
<div class="header-right">
    <input type="text" />
</div>
.header{
    float:left;
    background: #efefef;
    background-repeat: no-repeat;
    width: 240px;
    height: 100px;
    }

.header-right{
    overflow:hidden; 
    background-color:#000;
    height: 100px;
    position: relative;
    }
.header-right input {
    background: green;
    position: absolute;
    width: 100%;
    height: 100%;
}

JSFiddle

【讨论】:

  • 谢谢,其实我已经知道解决办法了,只是不明白为什么需要这样做
猜你喜欢
  • 2020-11-16
  • 1970-01-01
  • 1970-01-01
  • 2012-09-26
  • 1970-01-01
  • 1970-01-01
  • 2015-10-14
  • 2012-03-30
  • 1970-01-01
相关资源
最近更新 更多