Html 为什么文本换行时表格单元格中会有额外的空白?
我有一个水平居中的Html 为什么文本换行时表格单元格中会有额外的空白?,html,css,Html,Css,我有一个水平居中的div,有两个孩子。每个子项都垂直居中于display:table cell和vertical align:middle 当屏幕(或父容器)足够宽,使所有文本都在一行上时,一切正常。但是,如果屏幕/父屏幕缩小,则文本会自动换行并留下大量空白。为什么div不收缩以适应文本 下图显示了问题所在。一切都是我希望它在顶部图像的方式。灰色部分包装内容,并在其父容器中居中。但是,如果父对象收缩使文本换行,则会留下一堆空白(请参见红色矩形中突出显示的区域)。这个空白造成了整个元素左对齐而不是
div
,有两个孩子。每个子项都垂直居中于display:table cell
和vertical align:middle
当屏幕(或父容器)足够宽,使所有文本都在一行上时,一切正常。但是,如果屏幕/父屏幕缩小,则文本会自动换行并留下大量空白。为什么div不收缩以适应文本
下图显示了问题所在。一切都是我希望它在顶部图像的方式。灰色部分包装内容,并在其父容器中居中。但是,如果父对象收缩使文本换行,则会留下一堆空白(请参见红色矩形中突出显示的区域)。这个空白造成了整个元素左对齐而不是居中对齐的错觉
到目前为止,我已经有了一个JSFIDLE示例:
有没有办法去掉这个空白,让所有的东西看起来更居中,而不是向左移动
看起来浏览器会增加灰色部分(.header wrap)的宽度,直到它达到.header(您在CSS中设置的)宽度的100%。如果.header wrap中的文本仍然太长,它将进行换行,但.header wrap的宽度将保持为全宽,而不是缩小以适应。我认为这是有道理的
我认为你最好的选择是使用
text-align:center代码>并且不用担心额外的空白。我不认为在这种情况下你能做什么。正如@andi所写,浏览器以一种有点奇怪的方式进行表格布局。这可以通过使用HTML中的单单元格表来演示:
<div style="width: 270px; background: yellow">
<table>
<tr><td style="font-size: 25px; border: solid 1px">Way too much white space
</table>
</div>
对于一般解决方案,我认为您可以编写一个脚本来遍历可能需要修复的td
元素(或使用display:table cell
显示的元素),动态插入span
元素,然后进行修复,而不是像上面那样进行特定的编码。类似于此,为了明确起见,假设您的表单元格都是td
元素,并且其内容可以安全地包装在span
元素中:
<script>
var cells = document.getElementsByTagName('td');
for(var i = 0; i < cells.length; i++) {
var cell = cells[i];
var span = document.createElement('span');
span.innerHTML = cell.innerHTML;
cell.innerHTML = span.outerHTML;
}
for(var i = 0; i < cells.length; i++) {
var cell = cells[i];
cell.style.width = cell.childNodes[0].offsetWidth + 'px';
}
</script>
var cells=document.getElementsByTagName('td');
对于(变量i=0;i
您可以使用文本对齐:居中
和可能更改一些填充是否已尝试从中删除填充。站点标题
?@ExplosionPills text align:center也有同样的问题,空白太多,但这一次在两端。@SimonAdcock是的,我尝试过。没有区别。
<script>
var cells = document.getElementsByTagName('td');
for(var i = 0; i < cells.length; i++) {
var cell = cells[i];
var span = document.createElement('span');
span.innerHTML = cell.innerHTML;
cell.innerHTML = span.outerHTML;
}
for(var i = 0; i < cells.length; i++) {
var cell = cells[i];
cell.style.width = cell.childNodes[0].offsetWidth + 'px';
}
</script>