如何强制内联 div 保持在同一行?

Posted

技术标签:

【中文标题】如何强制内联 div 保持在同一行?【英文标题】:How to force inline divs to stay on same line? 【发布时间】:2013-03-04 22:05:44 【问题描述】:

我正在尝试制作三列布局。我希望左右列的宽度仅与其子内容一样宽。我想扩大中心列以填充剩余空间。

我正在尝试以下(概述,下面包含 jsfiddle 链接):

#colLeft 
  display: inline;
  float: left;

#colCenter 
  float: left;
  display: inline;
  overflow: none;
  white-space: nowrap;

#colRight 
  display: inline;
  float: right;


<div id="parent" style="width:100%">
  <div id="colLeft">left</div>
  <div id="colCenter">Some really long text in the center. Some really long text in the center.</div>
  <div id="colRight">right</div>
</div>

小提琴: http://jsfiddle.net/5kszQ/

但是当它的内容太长时,中心列将右列推到它下面。我希望所有三列都内联,并根据需要缩小中心列。这就是上面给我的:

相反,我想:

感谢您的帮助

【问题讨论】:

我认为如果你使用 Javascipt 会很容易。 是任何固定宽度 没有一个宽度是固定的。 你必须设置每个 div 的最大宽度。删除空格 attr 然后添加 word-break:break-all; 【参考方案1】:

这是一种使用inline-block 用于左侧和中间元素以及position:absolute 用于右侧元素的方法。

jsFiddle

HTML

<div id="parent" style="width:100%">
    <div id="colLeft">left</div><!--
    --><div id="colCenter">Some really long text in the center. Some really long text in the center.</div>
    <div id="colRight">right</div>
</div>

CSS

html, body 
    margin: 0px;
    padding: 0px;

#parent 
    background-color: #eee;
    height: 48px;
    position:relative;
    overflow:hidden;
    white-space: nowrap;

#colLeft 
    background-color: #ff8b8b;
    height: 48px;
    display: inline-block;

#colCenter 
    background-color: orange;
    height: 48px;
    display: inline-block;
    overflow: hidden;

#colRight 
    background-color: #c3d0ff;
    height: 48px;
    display: inline;
    float: right;
    position:absolute;
    top:0;
    right:0;

由于它依赖于inline-block,所以在&lt;div&gt;s 之间有一条注释可以去掉此图中所示的间距:

文本溢出:省略号

要在使用 text-overflow:ellipsis 时实现这一点,您可能需要使用 javascript,这是一个可能的解决方案 (jsFiddle)。

window.onresize = updateDimensions;

function updateDimensions() 
    var parent = document.getElementById('parent');
    var left = document.getElementById('colLeft');
    var right = document.getElementById('colRight');
    var middle = document.getElementById('colCenter');

    middle.style.width = (parent.offsetWidth - right.offsetWidth - left.offsetWidth)  + 'px';

【讨论】:

要修复行内块元素之间的空白,可以将父容器中的字体大小设置为0,然后在子容器中重新声明所需的字体大小:) 有几种不同的解决方法,老实说,我认为它们都很糟糕:P 使用这种方法,然后在 colCenter 上使用“text-overflow: ellipsis”是行不通的,对吧?如果我理解正确,colCenter 的一部分在 z 顺序中位于 colRight 下方,对吗?谢谢 是的。在这种情况下使用 inline-block 的问题是内容容器(在这种情况下是三个)是并且仅与其内容一样宽 - 因此当视口变得太窄时宽度不会正确折叠:溢出,除非设置了最小宽度,否则 text-overflow 将无济于事,这必须进行一些计算。我可以想到一个 JS + CSS 组合解决方案,但不是纯 CSS 解决方案。【参考方案2】:

如果您愿意进行一些 HTML 更改,那么这应该会为您提供您想要的:

<div id="parent" style="width:100%">  
  <div id="colLeft">left</div>
  <div id="colwrap">
      <div id="colRight">right</div>
      <div id="colCenter">Some really long text in the center. Some really long text in the center.</div>  
    </div>
</div>

和 css 是:

html, body 
  margin: 0px;
  padding: 0px;

#parent 
  background-color: #eee;
  height: 48px;

#colLeft 
  background-color: #ff8b8b;
  height: 48px;
  float: left;

#colwrap
    overflow:hidden;
    background-color: orange;      

#colCenter 
  height: 48px;  

#colRight 
  background-color: #c3d0ff;
  height: 48px;
  float: right;

jsFiddle:http://jsfiddle.net/gajbhiye/ZX97K/ 希望对您有所帮助。

【讨论】:

为什么要放置“#”而不是点“.”? @DaniSpringer.com "#" 是 css selector 的 id,而 "."是类选择器 为什么要使用一个而不是另一个? id 用于定位特定元素,而 class 可用于定位一组元素 ID 只能在页面上使用一次,而可以在整个网页中使用 class 来定位您想要相同样式的多个元素。【参考方案3】:

通过向中心和右侧元素添加一些较大的边距来欺骗浏览器,说它完全适合单行,并通过相对定位进行补偿。请参阅 updated fiddle

标记:保持不变。

风格:

#parent 
  background-color: #eee;
  height: 48px;
  overflow: hidden;

#colLeft 
  background-color: #ff8b8b;
  height: 48px;
  float: left;

#colCenter 
  background-color: orange;
  height: 48px;
  float: left;
  margin-left: -2000px;
  position: relative;
  left: 2000px;

#colRight 
  background-color: #c3d0ff;
  height: 48px;
  float: right;
  margin-right: -2000px;
  position: relative;
  left: -2000px;

【讨论】:

我喜欢这个解决方案。此外,如果右列的宽度恒定,有一个很好的方法可以使中间列的溢出变得更好:添加左填充并在 colRight 的背景中放置一个很快从完全透明变为完全不透明的渐变。 jsfiddle.net/a52fm2am/1【参考方案4】:

试试这个

<html>
<head>
    <style type="text/css">
        #parent 
          word-break:break-all;
        
        #colLeft 
          float:left;
          max-width: 5%;
        
        #colCenter 
          float:left;
          max-width: 90%;
        
        #colRight 
          float: right;
          max-width: 5%;
        
    </style>
</head>
<body>
    <div id="parent" style="width:100%">
      <div id="colLeft">leftawefawefawefawef</div>
      <div id="colCenter">Some really long text in the center. Some really long text in the center.khjjjjjjjjjjjjjjjjjjjjjjjkjhkjhklkjlSome really long text in the center. Some really long text in the center.khjjjjjjjjjjjjjjjjjjjjjjjkjhkjhklkjlSome really long text in the center. Some really long text in the center.khjjjjjjjjjjjjjjjjjjjjjjjkjhkjhklkjlSome really long text in the center. Some really long text in the center.khjjjjjjjjjjjjjjjjjjjjjjjkjhkjhklkjlSome really long text in the center. Some really long text in the center.khjjjjjjjjjjjjjjjjjjjjjjjkjhkjhklkjlSome really long text in the center. Some really long text in the center.khjjjjjjjjjjjjjjjjjjjjjjjkjhkjhklkjlSome really long text in the center. Some really long text in the center.khjjjjjjjjjjjjjjjjjjjjjjjkjhkjhklkjlSome really long text in the center. Some really long text in the center.khjjjjjjjjjjjjjjjjjjjjjjjkjhkjhklkjlSome really long text in the center. Some really long text in the center.khjjjjjjjjjjjjjjjjjjjjjjjkjhkjhklkjlSome really long text in the center. Some really long text in the center.khjjjjjjjjjjjjjjjjjjjjjjjkjhkjhklkjl</div>
      <div id="colRight">rightaewfaewfawefawef</div>
    </div>
</body>

【讨论】:

【参考方案5】:

只需将子 div 放入表格单元格中,而将表格放入父 div 中。不需要任何样式

<div id="parent" style="width: 100%">
 <table>
  <tr>
   <td><div id="colLeft">left</div></td>
   <td><div id="colCenter">Some really long text in the center. Some really long text in the center.</div></td>
   <td><div id="colRight">right</div></td>
  </tr>
 </table>
</div>

【讨论】:

请记住问题年龄是“7 岁以上”;从而提供适用于您的解决方案的版本控制。审查结束。

以上是关于如何强制内联 div 保持在同一行?的主要内容,如果未能解决你的问题,请参考以下文章

HTML+CSS:如何强制 div 内容保持在一行?

如何内联输入组内的元素(强制它们在一行上)

如何强制 ListView 在同一行中显示来自 ObservableCollection 不同元素的两个不同数据

如何将两个 div 保持在同一行?

强制解开已在同一行代码中选择性访问的变量是不是安全?

如何使元素与溢出保持在同一行