【问题标题】:Misalignment of <div> for UTF-8 Japanese charsUTF-8 日文字符的 <div> 未对齐
【发布时间】:2020-07-01 07:18:09
【问题描述】:

.element-label {
  display: block;
  float: left;
  width: 260px;
  padding-left: .5em;
  background: #f0f0f0;
  color: #A00000;
  font-size: 9pt;
}

.element-value {
  display: block;
  float: left;
  margin-left: 1em;
  font-weight: bolder;
  white-space: nowrap;
  font-size: 9pt;
}
<div id="field1">
  <span class="element-label">Label 1 </span>
  <span class="element-value">テスト </span>
</div>
<br />
<div id="field2">
  <span class="element-label">Label 2 </span>
  <span class="element-value">testing value</span>
</div>

在 MS IE 中:

但是,在 Chrome 或 MS Edge 中: html看起来像:

IE 中的布局是我所期望/想要的。

但是,当我将日语字符更改为其他语言字符(英语、中文、韩语等)时。 它们看起来都不错。

  1. 在这种情况下如何正确格式化日文字符

  2. 为什么日语字符在这种情况下在不同的浏览器中如此特殊,只要它们都是 UTF-8 编码的?

【问题讨论】:

    标签: html css utf-8 cjk html-encode


    【解决方案1】:

    为什么日语字符在这种情况下在不同的浏览器中如此特殊 前提是它们都是 UTF-8 编码的?

    它们很特别,因为它们使用不同的字体,因此比拉丁字符高。如果您使用拉丁文文本,您可以看到相同的结果,但增加 font-size 的特定值 span

    但是主要问题是您的包装器 div 元素基本上不存在,并且不会强制子元素成行,因此每个元素都试图与其兄弟元素相邻。如果您删除了 br 元素,您会看到只有一行。

    更好的解决方案是使用 css 将元素排列成行并完全删除 br。简单的方法是在包装元素上使用flex。此外,您应该修复行的高度以获得更一致的外观(我添加了line-height 来解决这个问题)。

    .element-label {
      display: block;
      float: left;
      width: 260px;
      padding-left: .5em;
      background: #f0f0f0;
      color: #A00000;
      font-size: 9pt;
    }
    
    .element-value {
      display: block;
      float: left;
      margin-left: 1em;
      font-weight: bolder;
      white-space: nowrap;
      font-size: 9pt;
    }
    
    .row {
      display: flex;
      line-height: 9pt;
      margin-bottom: .3em;
    }
    <div class="row" id="field1">
      <span class="element-label">Label 1 </span>
      <span class="element-value">テスト </span>
    </div>
    <div class="row" id="field2">
      <span class="element-label">Label 2 </span>
      <span class="element-value">testing value</span>
    </div>

    【讨论】:

    • 非常感谢您清楚地解释了根本原因,您又为我节省了几个小时。固定高度似乎需要在那里硬编码一个数字。只是想知道是否有任何标准/通用方法可以在新行/行处呈现
      。刚刚看到有人在另一个帖子中建议
    • clear: both; 确实有效,但正如 here 所解释的那样,浮动不适用于布局。自从引入 flexbox 以来,如果你有适当的包装元素,就很容易做出响应式布局。
    • 是的,你是对的。确实,在我的案例中没有响应式布局要求,一张桌子就足够了。
    猜你喜欢
    相关资源
    最近更新 更多
    热门标签