我需要使用
<table>
元素创建页面布局。我遇到的问题是它在 DOM 中自动生成额外不需要的间距,以  
的形式。我怎样才能删除它?
挑战:
我面临的挑战。我只能使用内联样式,不能使用javascript,而且我不能使用flex代替表格。因为它将在电子邮件中使用。并非所有电子邮件客户端都支持 Flex。
<div style="width:375px;margin:0 auto;font-family: Helvetica,sans-serif;">
<table style="width:100%;background-color: aliceblue;border-bottom: 1px #539ecb solid;
border-top: 1px #539ecb solid;color: #334859; text-transform: uppercase;padding:0 15px;">
<!-- Entries Header -->
<tr>
<td style="padding:3px 0;width: 47%;">
<h5 style="margin:0;">Description</h5>
</td>
<td style="text-align: center;width: 25%;">
<h5 style="margin:0;">Qty</h5>
</td>
<td style="text-align: right;">
<h5 style="margin:0;">Amount</h5>
</td>
</tr>
</table>
<table style="width: 100%;padding:0 15px;">
<!-- Entries -->
<tr>
<td style="padding:5px 0;width: 50%;">
<span style="text-transform: uppercase;font-size: 13px;">Office desk</span>
</td>
<td style="padding:5px 0;text-align: center;width: 25%;">
<small style="margin: 0;font-size: 11px;">2 x $217.75</small>
</td>
<td style="padding:5px 0;text-align:right;">
<span style="margin: 0;font-size: 13px;">$435.50</span>
</td>
</tr>
</table>
</div>
。 HTML 对于什么可以或不可以是各种表格元素的直接子元素有严格的规则。文本节点不能是
tr
的直接子节点,只能包含
:零个或多个 td、th 和脚本支持元素。
文本节点被推到表格之外。删除这些,视觉布局将被修复(不过,我仍然建议修复标记的语义)。因此,
原答案如下
无论如何,您的 HTML 格式都是错误的。看似表格标题行和正文行的内容被表示为 2 个单独的表格。尝试这样的事情:
<table style="border-collapse: collapse;">
<thead style="/* styles from what's currently your first table */">
<tr>
<!-- content from what's currently your first table -->
<th>...</th>
<th>...</th>
<th>...</th>
</tr>
</thead>
<tbody style="/* styles from what's currently your second table */">
<tr>
<!-- content from what's currently your second table -->
<td>...</td>
<td>...</td>
<td>...</td>
</tr>
</tbody>
</table>
您可以将
document.querySelector("#our_div").innerHTML = document.querySelector("#our_div").innerHTML.replace(/ /g, '');
<div id="our_div" style="width:375px;margin:0 auto;font-family: Helvetica,sans-serif;display:block;">
<table style="width:100%;background-color: aliceblue;border-bottom: 1px #539ecb solid;
border-top: 1px #539ecb solid;color: #334859; text-transform: uppercase;padding:0 15px;">
<!-- Entries Header -->
<tr>
<td style="padding:3px 0;width: 47%;">
<h5 style="margin:0;">Description</h5>
</td>
<td style="text-align: center;width: 25%;">
<h5 style="margin:0;">Qty</h5>
</td>
<td style="text-align: right;">
<h5 style="margin:0;">Amount</h5>
</td>
</tr>
</table>
<table style="width: 100%;padding:0 15px;">
<!-- Entries -->
<tr>
<td style="padding:5px 0;width: 50%;">
<span class="item-name" style="text-transform: uppercase;font-size: 13px;">Office desk</span>
</td>
<td style="padding:5px 0;text-align: center;width: 25%;">
<small class="qty" style="margin: 0;font-size: 11px;">2 x $217.75</small>
</td>
<td style="padding:5px 0;text-align:right;">
<span class="item-price" style="margin: 0;font-size: 13px;">$435.50</span>
</td>
</tr>
</table>
</div>
font-size:0
div
,将
font-size:1rem
调整为
table
。 CSS 无法删除它,但可以隐藏。
#our_div {
font-size:0;
}
#our_div table {
font-size:1rem;
}
<div id="our_div" style="width:375px;margin:0 auto;font-family: Helvetica,sans-serif;font-size:0;">
<table style="width:100%;background-color: aliceblue;border-bottom: 1px #539ecb solid;
border-top: 1px #539ecb solid;color: #334859; text-transform: uppercase;padding:0 15px;">
<!-- Entries Header -->
<tr>
<td style="padding:3px 0;width: 47%;">
<h5 style="margin:0;">Description</h5>
</td>
<td style="text-align: center;width: 25%;">
<h5 style="margin:0;">Qty</h5>
</td>
<td style="text-align: right;">
<h5 style="margin:0;">Amount</h5>
</td>
</tr>
</table>
<table style="width: 100%;padding:0 15px;">
<!-- Entries -->
<tr>
<td style="padding:5px 0;width: 50%;">
<span class="item-name" style="text-transform: uppercase;font-size: 13px;">Office desk</span>
</td>
<td style="padding:5px 0;text-align: center;width: 25%;">
<small class="qty" style="margin: 0;font-size: 11px;">2 x $217.75</small>
</td>
<td style="padding:5px 0;text-align:right;">
<span class="item-price" style="margin: 0;font-size: 13px;">$435.50</span>
</td>
</tr>
</table>
</div>
用 JS 来做会好得多。在 CSS 中,您可以尝试为 div 容器设置一些字体样式以隐藏“ ”字符,并将样式设置为表格的初始值(这样它们就不会从容器继承值)。
div{
font-size:0;
line-height:0;
color: transparent;
user-select: none;
}
div>table{
font-size: 16px; //or any other
line-height: normal; //or any other
color: black; //or any other
user-select: auto;
}
<div style="width:375px;margin:0 auto;font-family: Helvetica,sans-serif;">
<table style="width:100%;background-color: aliceblue;border-bottom: 1px #539ecb solid;
border-top: 1px #539ecb solid;color: #334859; text-transform: uppercase;padding:0 15px;">
<!-- Entries Header -->
<tr>
<td style="padding:3px 0;width: 47%;">
<h5 style="margin:0;">Description</h5>
</td>
<td style="text-align: center;width: 25%;">
<h5 style="margin:0;">Qty</h5>
</td>
<td style="text-align: right;">
<h5 style="margin:0;">Amount</h5>
</td>
</tr>
</table>
<table style="width: 100%;padding:0 15px;">
<!-- Entries -->
<tr>
<td style="padding:5px 0;width: 50%;">
<span style="text-transform: uppercase;font-size: 13px;">Office desk</span>
</td>
<td style="padding:5px 0;text-align: center;width: 25%;">
<small style="margin: 0;font-size: 11px;">2 x $217.75</small>
</td>
<td style="padding:5px 0;text-align:right;">
<span style="margin: 0;font-size: 13px;">$435.50</span>
</td>
</tr>
</table>
</div>