我有一张表格,其中一列包含十进制数字。我希望以类似于文字处理器的“十进制制表符”功能的方式对齐它们,以便所有点都位于一条垂直线上。
我目前有两种可能的解决方案,但我希望有更好的解决方案…
解决方案1:在HTML中拆分数字,例如
<td><div>1234</div><div class='dp'>.5</div></td>
与
.dp { width: 3em; }
(是的,此解决方案不能完全按原样工作。但是,此概念是有效的。)
解决方案2:我发现提到
<col align="char" char=".">
根据参考页,这是HTML4的一部分,但是在我必须使用的浏览器FF3.5,Safari
4或IE7中却无法使用。它还存在无法将数字格式提取到CSS的问题(尽管由于它影响到整个列,所以我认为这并不奇怪)。
因此,有谁有更好的主意?
请参阅Krijn Hoetmer的这篇文章,了解您的选择以及如何实现这一点。该解决方案的实质是使用CSS和JS实现此目的:
(function() {
var currencies = /(\$|€|€)/;
var leftWidth = 0, rightWidth = 0;
for(var tableCounter = 0, tables = document.getElementsByTagName("table");
tableCounter < tables.length; tableCounter++) {
if(tables[tableCounter].className.indexOf("fix-align-char") != -1) {
var fCols = [], leftPart, rightPart, parts;
for(var i = 0, cols = tables[tableCounter].getElementsByTagName("col"); i < cols.length; i++) {
if(cols[i].getAttribute("char")) {
fCols[i] = cols[i].getAttribute("char");
}
}
for(var i = 0, trs = tables[tableCounter].rows; i < trs.length; i++) {
for(var j = 0, tds = trs[i].getElementsByTagName("td"); j < tds.length; j++) {
if(fCols[j]) {
if(tds[j].innerHTML.indexOf(fCols[j]) != -1) {
parts = tds[j].innerHTML.split(fCols[j]);
leftPart = parts.slice(0, parts.length -1).join(fCols[j]);
leftPart = leftPart.replace(currencies, "<span class='currency'>$1</span>");
rightPart = fCols[j] + parts.pop();
tds[j].innerHTML = "<span class='left'>" + leftPart + "</span><span class='right'>" + rightPart + "</span>";
} else {
tds[j].innerHTML = tds[j].innerHTML.replace(currencies, "<span class='currency'>$1</span>");
tds[j].innerHTML = "<span class='left'>" + tds[j].innerHTML + "</span>";
}
tds[j].className = "char-align";
var txt = document.createTextNode(tds[j].firstChild.offsetWidth);
if(leftWidth < tds[j].firstChild.offsetWidth) {
leftWidth = tds[j].firstChild.offsetWidth;
}
if(tds[j].childNodes[1]) {
txt = document.createTextNode(tds[j].childNodes[1].offsetWidth);
if(rightWidth < tds[j].childNodes[1].offsetWidth) {
rightWidth = tds[j].childNodes[1].offsetWidth;
}
}
}
}
}
}
}
// This is ugly and should be improved (amongst other parts of the code ;)
var styleText = "\n" +
"<style type='text/css'>\n" +
" .fix-align-char td.char-align { width: " + (leftWidth + rightWidth) + "px; }\n" +
" .fix-align-char span.left { float: left; text-align: right; width: " + leftWidth + "px; }\n" +
" .fix-align-char span.currency { text-align: left; float: left; }\n" +
" .fix-align-char span.right { float: right; text-align: left; width: " + rightWidth + "px; }\n" +
"</style>\n";
document.body.innerHTML += styleText;
})();
table {
border-collapse: collapse;
width: 600px;
}
th {
padding: .5em;
background: #eee;
text-align: left;
}
td {
padding: .5em;
}
#only-css td.char-align {
width: 7em;
}
#only-css span.left {
float: left;
width: 4em;
text-align: right;
}
#only-css span.currency {
float: left;
width: 2em;
text-align: left;
}
#only-css span.right {
float: right;
width: 3em;
text-align: left;
}
<table id="only-css">
<thead>
<tr>
<th>Number</th>
<th>Description</th>
<th>Costs</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>Lorem ipsum dolor sit amet</td>
<td class="char-align">
<span class="left">
<span class="currency">$</span>3
</span>
<span class="right">,99</span>
</td>
</tr>
<tr>
<td>2</td>
<td>Consectetuer adipiscing elit</td>
<td class="char-align">
<span class="left">
<span class="currency">$</span>13
</span>
<span class="right">,95</span>
</td>
</tr>
<tr>
<td>3</td>
<td>Pellentesque fringilla nisl ac mi</td>
<td class="char-align">
<span class="left">
<span class="currency">$</span>4
</span>
<span class="right"></span>
</td>
</tr>
<tr>
<td>4</td>
<td>Aenean egestas gravida magna</td>
<td class="char-align">
<span class="left">
<span class="currency">$</span>123
</span>
<span class="right">,999</span>
</td>
</tr>
</tbody>
</table>
问题内容: 我是HTML的新手,正在尝试学习如何使用表单。 到目前为止,我最大的问题是对齐表格。这是我当前的HTML文件的示例: 问题在于,“电子邮件”后的字段框与名字和姓氏相比在空格方面有很大不同。使其真正“排队”的“正确”方法是什么? 我正在尝试练习良好的格式和语法…很多人可能不确定使用CSS来做到这一点,到目前为止,我仅了解HTML的基本知识。 问题答案: 另一个使用CSS的示例,我只是将表
我有一个包含一些卡片的容器,我想让每一张卡片开始在容器的左边框和结束在右边框,像下面的代码。 但最后两个元素之间有太多的空间,我如何删除它?? 我已经尝试添加以使其行为符合我的要求,但角卡不会碰到边框。有什么帮助吗??
我想将颤振小部件与其父部件对齐。我知道我可以通过将小部件包装在中心小部件中来将其居中。 但我如何将其与右侧、底部、顶部中间等对齐? 笔记: 我说的是一个孩子,而不是一行或一列中的多个孩子。见以下问题: 对齐行小部件中的文本小部件 颤振|右对齐不工作 这一条是正确的,但我试图提出一个更尖锐的问题: 如何在Flatter中左对齐OutlineButton图标
问题内容: 我正在使用iTextSharp将数据填充到在OpenOffice中创建的PDF模板中。它填充得很好,我正在获取适当的PDF。在该PDF中,有一些摘要会出现,那个地方我想使该文本与模板对齐。 我正在下面的代码,但它不起作用。 请帮忙。 谢谢。 问题答案: 假设您有一个纯AcroForm而不是我在注释中指出的混合表格,这就是更改字段四边形的方法: 错误地假设,四边形不是字段标志的一部分。它
问题内容: 将单选按钮/复选框与文本正确对齐的最干净方法是什么?到目前为止,我一直使用的唯一可靠的解决方案是基于表的: 有些人可能会对此表示不满。我刚刚花了一些时间(再次)研究无表解决方案,但失败了。我尝试了浮动,绝对/相对定位和类似方法的各种组合。它们不仅主要默默地依赖于单选按钮/复选框的估计高度,而且在不同的浏览器中的行为也有所不同。理想情况下,我想找到一种不假设大小或浏览器特殊问题的解决方案
我正在用数字键盘制作登录屏幕,我似乎不能在窗格中对齐按钮的网格窗格。我做错了什么? GUI代码很冗长,而且这个帖子编辑器不允许我按原样发布问题,所以我需要这些额外的行让它接受我的问题。如果我认为我可以把代码缩减到数字广告。设置对齐(Pos.Center),并且仍然清楚地表明我是如何尝试将网格窗格居中的。我真诚地感谢那些可能借给我时间帮助我解决这个问题的人。 我的问题是GridPane本身绘制在屏幕