如何让三个元素填充一个 div,其中中心元素具有动态宽度?

Posted

技术标签:

【中文标题】如何让三个元素填充一个 div,其中中心元素具有动态宽度?【英文标题】:How to have three elements fill a div, where center element has dynamic width? 【发布时间】:2016-06-30 19:49:48 【问题描述】:

我正在尝试为用户设计一个界面来插入单词的前缀或后缀。理想情况下,单词(随机选择)将显示在包装的中心,然后两侧的文本框将延伸到包装的边缘。这是设置:

<div class="wrapper">
  <div class="left">text input</div>
  <div class="center">dynamic content</div>
  <div class="right">text input</div>
</div>

如下所示(下划线是文本输入字段,小写是可能的输入):

|________CONDITION________| => |____pre_CONDITION________| or |________CONDITION_al_____|
|__________ALLOW__________| => |______dis_ALLOW__________| or |__________ALLOW_ance_____|
|___________RUN___________| => |______over_RUN___________| or |___________RUN_ner_______|

我以前见过类似的问题,但我一直无法找到解决这个问题的方法。中心 div 没有静态宽度,所以我不能determine the widths manually。我需要左右 div 来包含实际内容(不仅仅是样式),所以我真的不能change the html。我正在寻找一种解决方案,它允许中心 div 具有任何宽度并强制左右 div 填充剩余的水平空间。

有没有办法用 CSS 做到这一点?非常感谢您的宝贵时间。

【问题讨论】:

【参考方案1】:

使用flex

.wrapper 
  display: flex;

.left, .right 
  flex: 1;
  white-space: nowrap;
  border: 1px solid

.center 
  flex: 0;
  white-space: nowrap;
  border: 1px solid
<div class="wrapper">
  <div class="left">text input</div>
  <div class="center">dynamic content</div>
  <div class="right">text input</div>
</div>
<div class="wrapper">
  <div class="left">text input</div>
  <div class="center">dynamic content, longer</div>
  <div class="right">text input</div>
</div>

display: table

.wrapper 
  display: table-row;

.left, .right 
  display: table-cell;
  width: 50%;
  white-space: nowrap;
  border: 1px solid

.center 
  display: table-cell;
  width: 1%;
  white-space: nowrap;
  border: 1px solid
<div class="wrapper">
  <div class="left">text input</div>
  <div class="center">dynamic content</div>
  <div class="right">text input</div>
</div>
<div class="wrapper">
  <div class="left">text input</div>
  <div class="center">dynamic content, longer</div>
  <div class="right">text input</div>
</div>

【讨论】:

这太完美了,非常感谢。我唯一需要更改的是宽度:.left.right 的宽度为 50% 到 100%,以填充它们的表格单元格。

以上是关于如何让三个元素填充一个 div,其中中心元素具有动态宽度?的主要内容,如果未能解决你的问题,请参考以下文章

HTML - 如何使这些 div 保持在一行中? [复制]

如何选择具有给定类名的第一个、第二个或第三个元素?

无法在不同的 div 中填充列表元素

怎么让div内的某个元素固定不随div的滚动条的滚动而滚动?

怎么让div内的某个元素固定不随div的滚动条的滚动而滚动?

UL 不会以 Div 为中心。填充不会解决它。保证金