【问题标题】:CSS Justify text, fill space with dots [duplicate]CSS对齐文本,用点填充空间[重复]
【发布时间】:2011-07-25 12:04:00
【问题描述】:

可能重复:
Fill available spaces between labels with dots or hyphens

有没有办法用简单的 CSS 来格式化这样的文本?我有一个包含不同药物和剂量的不同产品的数据库,并希望统一显示它们,但没有等宽字体。

Drug 1 ............  10ml
Another drug ......  50ml
Third ............. 100ml

【问题讨论】:

标签: css xhtml


【解决方案1】:

这是一个优雅且不引人注目的,但有一些限制(见下文)。

JSFiddle

CSS:

dl { width: 400px }
dt { float: left; width: 300px; overflow: hidden; white-space: nowrap }
dd { float: left; width: 100px; overflow: hidden }

dt:after { content: " .................................................................................." }

HTML:

<dl>

    <dt>Drug 1</dt>
    <dd>10ml</dd>

    <dt>Another drug</dt>
    <dd>50ml</dd>

    <dt>Third</dt>
    <dd>100ml</dd>


</dl>

限制:

  • 在 IE 中不起作用

  • 仅接受 content 属性中的文字字符,不接受 HTML 实体,例如不接受 &amp;middot;。 (正如@Radek 指出的那样,这没有问题,因为 UTF-8 字符应该能够满足这里几乎所有的需求)。

【讨论】:

  • HTML 实体有问题吗?我们现在有 Unicode,网页应该是 UTF-8。
  • @Radek 是的,好点。我对content: 没有太多经验,也不确定它接受什么。快速测试表明 Unicode 字符没有问题,更新了。
  • @Pekka 没有这些 SPAN 元素也可以工作:jsfiddle.net/j6JWT/76
  • 这里是另一个例子jsfiddle.net/s6yfaeLp
【解决方案2】:

另一种方法:

Live Demo

<style type="text/css">
table {
    border: 1px solid #000;
    width: 200px;
}
td span {
    background-color: #FFF;
}
td.name:before {
    clip: rect(0px, 190px, 20px, 0px);
    content: " ............................................................ ";
    position: absolute;
    z-index: -1;
}
td.amt {
    text-align: right;
}
</style>

<table>
    <tr>
        <td class="name"><span>Drug 1</span></td>
        <td class="amt"><span>10mL</span></td>
    </tr>
    <tr>
        <td class="name"><span>Another drug</span></td>
        <td class="amt"><span>50mL</span></td>
    </tr>
    <tr>
        <td class="name"><span>Third</span></td>
        <td class="amt"><span>100mL</span></td>
    </tr>
</table>

与 Pekka 的解决方案类似的限制,如果表格的宽度发生变化,则需要更新 clip() 坐标。

【讨论】:

  • 我认为您的解决方案在 jsfiddle 中看起来很棒,但我很难在现有设计中实现它,主要是因为 z-index。无论如何+1。
【解决方案3】:

好吧,您可以使用 css 格式化 div 以获得该结构。示例:

<div class="table">
<div class="prods">
Drug 1
Another drug
Third
</div>
<div class="dims">
10ml
50ml
100ml
</div>
</div>

然后你把它格式化成css:

.prods{float: left; width: 100px}
.dims{float: left; width: 35px}

这只是一个非常简单的例子,只是为了得到这个结构,当然你应该添加更多的视觉细节。

【讨论】:

  • 这并没有解决 OP 的主要问题:用点填充空间。另外,由于他显示的是表格数据,所以这里不需要&lt;div&gt;s。
  • 是的,我第一次看到点的时候并不知道他真的想要点,我以为只是为了显示对齐,我们可以使用div来显示表格数据而不是表格,为什么不呢?
  • @Leandro:你的布局没有语义,对于使用屏幕阅读器或其他辅助工具的人来说会非常混乱。
猜你喜欢
  • 2021-03-19
  • 2023-04-06
  • 1970-01-01
  • 2015-09-28
  • 2011-09-06
  • 1970-01-01
  • 2017-11-24
  • 2020-01-03
  • 2016-08-13
相关资源
最近更新 更多