行高不影响 contenteditable 中的第一行

Line height doesn't affect first line in contenteditable

考虑以下 HTML:

<div class="content" contenteditable="true">
rrr<br>
ttt
</div>

&CSS:

.content {
line-height: 35px;
}

你得到的是仅影响第二行及以下行的行高。令我困扰的是,插入符号的高度受行高的影响,因此第一行明显比第二行短。

使用这个 Fiddle 来查看它的实际效果。将插入符号放在第一行和第二行中,并观察每一行中的插入符号。注意它的高度因行高而不同。

我不能在主要的 contenteditable 元素中允许每一行都有内部包装。

当尝试使用 div::first-line 并在该 css 规则中使用 line-height 时,它不会影响它,尽管 background-color 等其他属性会影响它。

有没有办法也影响第一行? 我更喜欢 css-only 解决方案,但如果别无选择,Js 也可以。

解决方法(这不会破坏下面评论中提到的预期行为):

br {
  content: " ";
  visibility: hidden;
  display: block;
}

尽管其他答案中提到了什么,但 <br> 并不是真正的问题。实际问题在于 Chrome - 特别是它如何处理行高大于自身高度的文本。这个 Chrome 行高问题实际上是我们许多 CSS 的长期困扰。插入符号始终跨越整个行高,并且文本不在行高的垂直中间。更糟糕的是,他们对待第一行与其他行不同:(

<br> 上的建议是一种掩盖问题的技巧,但它仅在您要在文本区域中手动输入换行符时才有效。只是为了证明 br hack 方法不适用于具有自然出现的环绕文本的常规文本区域/可内容编辑区域:http://jsfiddle.net/8ao367gz/1/

坏消息:目前还没有真正的解决方案。普遍的共识是找到一种绕过您的设计的方法,不要将 line-height 设置为 normal1 以外的任何值。如果你必须在设计中使用行高,要么接受在 Chrome 上跨越整个行高的奇怪的底部对齐插入符,要么告诉你的用户使用没有这个问题的其他浏览器(比如 Firefox) .或者我们都可以不断抱怨并向 Chrome 提交错误报告,并祈祷他们 "fix" 这样做。我非常怀疑,因为我认为他们不认为这是一个错误;即使他们这样做了,也可能是一个非常低的优先级。