我需要创建一个设计,最终用户将看到包含两个组件的单行文本。 text-align:left
div
可以包含任意长度的文字。 text-align:right
div
一般约为9或10个字符,但可能会高达20个字符。
以下是最终用户需要看到的内容:
text-align:left
文字应使用ellipsis
在一行文字中隐藏任何不适合屏幕的文字。text-align-right
文字应始终位于同一行的屏幕上。text-align:left
div
的宽度应等于浏览器窗口的宽度减去text-align:right
文字div
的宽度。text-align:right
div
的宽度应等于其中文字的宽度加上其水平padding
。我差不多用fiddle工作了,但我需要为text-align:right
div
使用固定宽度。这是HTML:
<body>
<div id="wrap">
<div id="left">Left Left Left Left Left Left Left Left Left Left Left Left Left Left Left Left Left Left Left Left Left Left Left Left Left Left Left Left Left Left Left Left</div>
<div id="right">Right</div>
</div>
</body>
这是CSS:
* {border:0; margin:0; padding:0;}
html, body {background-color:gray; height:100%; width:100%}
#left, #right {padding:5px;}
#left {
background-color:red;
float:left;
text-align:left;
width:calc(100% - 120px); /* deducted amount = width of #right + total horizontal padding*/
text-overflow: ellipsis;
white-space: nowrap;
overflow: hidden;
}
#right {
background-color:orange;
float:right;
text-align:right;
white-space: nowrap;
width:100px;
}
我可以想象在这里跳转到JQuery并让它根据width
div
的宽度设置text-align:right
的两个div
,但我会如果可能的话,我更喜欢用CSS来解决这个问题。
之前我尝试使用display:table
和display:table-cell
来实现这一点,但我遇到了ellipsis
与table-cell
一起使用的各种问题。 Using table-layout:fixed
未正确显示ellipsis
,display:block
也没有,setting a max-width
也没有。我很乐意使用table-cell
,如果可以的话。
那么有没有办法使用纯CSS?
答案 0 :(得分:6)
1)从左侧div中删除float:left
并
2)在左侧div上添加display:block
和宾果游戏! - 正确的div只占用它所需的空间 - 而不再给它一个固定的宽度。
UPDATED FIDDLE + FIDDLE 2 (只是为了证明它有效)
<div id="wrap">
<div id="right">Right</div>
<div id="left">Left Left Left Left Left Left Left Left Left Left Left Left Left Left Left Left Left Left Left Left Left Left Left Left Left Left Left Left Left Left Left Left</div>
</div>
#wrap
{
width: 100%;
}
#left, #right {padding:5px;}
#left {
background-color:red;
text-align:left;
display: block;
text-overflow: ellipsis;
white-space: nowrap;
overflow: hidden;
}
#right {
background-color:orange;
float:right;
text-align:right;
white-space: nowrap;
}
答案 1 :(得分:0)
拥抱Flexbox的力量!这种方法允许您保持文本的顺序,就像您希望它们出现在标记中一样(与上面的浮动方法相反)。这是一个小提琴:Fiddle
Polyfills适用于不支持flexbox的浏览器。
<body>
<div id="wrap">
<div id="left">Left Left Left Left Left Left Left Left Left Left Left Left Left Left Left Left Left Left Left Left Left Left Left Left Left Left Left Left Left Left Left Left</div>
<div id="right">Right Right Right Right</div>
</div>
</body>
CSS
#wrap {
display:flex;
justify-content:space-between;
}
#left,
#right {
padding:5px;
}
#left {
background:red;
overflow:hidden;
text-overflow:ellipsis;
white-space:nowrap;
flex:1;
}
#right {
background:orange;
}