【问题标题】:Three divs: two on the left, one on the right. Second one has ellipsis. Screenshot, jsfiddle attached三个 div:左边两个,右边一个。第二个有省略号。截图,附上jsfiddle
【发布时间】:2014-08-16 07:23:24
【问题描述】:

这是我想要实现的模型(3 个相同模型的案例):

所以,第一个 div(green) 的宽度是固定的。 第三个 div(blue) 总是在右侧,它会根据需要获得尽可能多的空间,考虑到其中的文本。 第二个 div(orange) 占用所有剩余空间,如果此橙色 div 中的文本不适合,则在最后获得省略号样式。

请帮助我实现这一点(IE8-IE10,Chrome 支持),我尝试将第一个元素放入容器中,尝试使用 float、inline-block,但仍然存在问题。

谢谢,这里是 jsfiddle,所以你可以快速使用它: http://jsfiddle.net/0tLvyf20/4/

<div class="container">
    <div class="checkbox"></div>
    <div class="name">Some text</div>
    <div class="value">12345</div>
</div>

【问题讨论】:

  • 您需要什么样的浏览器支持?另外,这对我来说听起来像是一张桌子。里面有什么内容?
  • Chrome、IE8-IE10、Safari。内容非常简单:绿色 div 的图像,橙色的文本和蓝色的文本。
  • @JoeSmith 实际上,这似乎是一张桌子的情况。不要被整个“表格设计不好,你应该使用 div”搞糊涂——这不是一个总是遵循的建议。在您需要视图看起来像表格的布局中 - 使用表格。
  • @alexreardon,这与我的问题无关。只有 2 个 div。

标签: javascript html css-float css


【解决方案1】:

With Flexbox

* {
    @987654322@
}
.container {
    @987654323@
    width: 300px;
    height: 30px;
    background-color: #B7B7B7;
    padding: 2.5px; /* This is the remaining gap from the edges */
}

.container div {
    margin: 5px; /* This is for the gap between elements. */
}

.checkbox {
    width: 15px;
    background-color: green;
}

.name {
    flex: 1;
    overflow: hidden;
    white-space: nowrap;
    text-overflow: ellipsis;
    background-color: orange;
}

.value {
    background-color: LightCyan;
}

With a table(事情有点棘手)

HTML

<table class="container">
    <tr>
        <td class="checkbox"></td>
        <td class="name">
            <!-- Necessary Evil -->
            <table>
                <tr>
                    <td>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Fugit eaque autem quos nulla dignissimos corporis pariatur itaque excepturi debitis ratione dolorem iste consectetur accusantium necessitatibus blanditiis labore unde perferendis tempore.</td>
                </tr>
            </table>
        </td>
        <td class="value">12345</td>
    </tr>
</table>

CSS

.container {
    width: 300px;
    height: 30px;
    background-color: #B7B7B7;
    /table-layout: fixed;
    border-spacing: 5px;
}
.checkbox {
    width: 20px;
    background-color: green;
}
.name td {
    overflow: hidden;
    white-space: nowrap;
    text-overflow: ellipsis;
    background-color: orange;
}
.name table {
    table-layout: fixed;
    width: 100%;
    border-collapse: collapse;
    border-spacing: 0;
    border: 0;
}
.value {
    background-color: LightCyan;
}

【讨论】:

  • 谢谢。在 IE10 中它不是预期的 :( 请看截图:copy.com/H4xL0wT2aX8G79YV
  • 是的,我在看到你的 IE10 评论之前发布了这个。我现在正在研究基于表格的解决方案。
  • 另外@JoeSmith,flexbox 确实适用于 IE10,我只是没有为供应商前缀烦恼。它肯定不会在 IE NEIN 及以下版本中工作。 caniuse.com/#search=flexbox
  • 是的,是的,我看到不支持 IE8-9。我自己不是 IE 的粉丝,但必须支持它们。感谢您抽出宝贵时间,渴望看到您的餐桌解决​​方案。我也在尝试返工到桌子上。
  • @JoeSmith 已添加表格
【解决方案2】:

Demo

仅使用 flex-box 的 css 解决方案

css

.container {
    width: 300px;
    height: 30px;
    background-color: #B7B7B7;
    display: flex;
    flex-wrap: wrap;
    align-items: center
}

.checkbox {
    width: 15px;
    height: 15px;
    margin: 5px;
    background-color: green;
}

.name {
    height: 20px;
    overflow: hidden;
    white-space: nowrap;
    text-overflow: ellipsis;
    background-color: orange;
    flex: 1;
}

.value {
    height: 20px;
    background-color: LightCyan;
    margin-right: 5px;
}

【讨论】:

  • 谢谢。这在 Chrome 中效果很好,但 IE8-IE9 不支持 flex 样式 :( 不幸的是,我需要支持 IE8-IE10。
【解决方案3】:

还有一个没有表格/flexbox。

HTML 结构略有不同,css 基本相同。

<div class="container">
    <div class="checkbox"></div>
    <div class="value">12345</div>
    <div class='expander'>
       <div class="name">Some text</div>
    </div>
</div>
<div class="container">
    <div class="checkbox"></div>
    <div class="value">123456789</div>
    <div class='expander'>
       <div class="name">Some long text that won't overlap</div>
    </div>
</div>
<div class="container">
    <div class="checkbox"></div>
    <div class="value">12354354354345</div>
    <div class='expander'>
       <div class="name">Some very long text that should elipse text</div>
    </div>
</div>

使用以下 CSS

.container {
    display: block;
    width: 300px;
    height: 30px;
    background-color: #B7B7B7;
    overflow: hidden;
}

.checkbox {
    display: inline-block;
    margin-top: 5px;
    width: 15px;
    height: 15px;
    background-color: green;
    float: left;
}

.expander {
    background-color: orange;
    overflow: hidden;
    display: block;
}

.name {
    display: inline-block;
    white-space: nowrap;
    text-overflow: ellipsis;
    width: 100%;
    overflow: hidden;
}

.value {
    display: inline-block;
    background-color: LightCyan;
    float: right;
}

fiddle 来查看它(仅在 chrome、IE 11 中测试过)

【讨论】:

  • 谢谢。这也适用于 IE9-IE10。这有点类似于我在我的一个 cmets 中的 jsfiddle 中为“第二个 Rikudo”答案提供的内容。如果我能接受 2 个答案,我也会接受你的。谢谢!
【解决方案4】:

结构不同;

<div class="container">
    <div class="checkbox"></div>
    <div class="namevalue">
       Some Text
        <div class="value">1234</div>

    </div>

</div>

*{
    box-sizing:border-box;
}
.container {
    width: 300px;
    height: 30px;
    background-color: #B7B7B7;
}

.checkbox {
    display: inline-block;
    position: relative;
    width: 15px;
    height: 15px;
    margin: 5px 3px 5px 5px;
    top: 3px;
    background-color: green;
    float:left;
}
.namevalue {
    display: inline-block;
    position: relative;
    overflow: hidden;
    white-space: nowrap;
    text-overflow: ellipsis;
    background-color: orange;
    width:275px;
top: 7px;
     float:left;

}
.name {
    display: inline-block;
    position: relative;
    overflow: hidden;
    white-space: nowrap;
    text-overflow: ellipsis;
    background-color: orange;
}
.value {
    display: inline-block;
    position: relative;
    background-color: LightCyan;
    float:right;
    border-left:5px solid #B7B7B7;
}

【讨论】:

  • 对不起,如果您放置重叠的文本,它将不起作用。请看这个截图:copy.com/Vkx2IJGrg3FiYzaL
  • 你可以试试这个,但很难在旧浏览器支持的字符串末尾设置点。jsfiddle.net/xuma/nvxd20eL
  • 谢谢,但我有点需要点(省略号):)
  • 哈哈,酷。但如果可能的话,我打算在没有 JS 的情况下制作它。你应该为此获得一枚奖牌:D 谢谢,非常有趣的解决方案,谢谢你的时间。
猜你喜欢
  • 2014-10-31
  • 1970-01-01
  • 1970-01-01
  • 2023-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多