Я использую <br>
внутри тега <pre>
(например, <pre>Foo<br>10</pre>
), и это правильно отображается в Safari (v12.0.3) в виде двух строк, но как Foo10
в Chrome 72.0.3626.109 (в Mac OS High Sierra) и Microsoft Edge 42.17134.1.0 (в Windows 10).
Руководство разработчика Mozilla говорит, что <br>
является " фразовое содержание», разрешенное в <pre>
.
Исходный код генерируется htmlWidgets и networkD3, и я отследил код Javascript, который генерирует код <pre>
, в sankeyNetwork.js (создает диаграммы Санки).
Я взял автоматически сгенерированный html-файл и вырезал как можно больше, чтобы просто выделить эту проблему. Когда вы открываете этот html-файл и наводите курсор на левую панель, вы должны увидеть «Foo» и «10 ($)» в двух строках. В Safari это работает, а в Chrome и Edge — нет. Если вы наведете курсор на полосу «Bar» (не каламбур), вы всегда увидите «Bar» и «10 ($)» в двух строках, потому что мы просто используем новую строку вместо <br>
в блоке <pre>
.
Вот html-файл:
<!DOCTYPE html>
<html style="width: 100%; height: 100%;">
<head>
<meta charset="utf-8">
<title>test</title>
</head>
<body>
<div>
<svg viewBox="0,0,1134,633" style="width: 100%; height: 100%;">
<g transform="translate(20,20)">
<g class="node" transform="translate(0,0)" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);">
<rect height="593" width="30" style="fill: rgb(31, 119, 180); stroke: rgb(15, 58, 88); opacity: 0.9; cursor: move;">
<title><foreignObject><body><pre>Foo<br>10 ($)</pre></body></foreignObject></title></rect>
<text x="36" y="296.5" dy=".35em" text-anchor="start" style="font-size: 10px; font-family: Arial;">Foo</text></g>
<g class="node" transform="translate(1064,0)" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);">
<rect height="593" width="30" style="fill: rgb(174, 199, 232); stroke: rgb(85, 98, 114); opacity: 0.9; cursor: move;">
<title><foreignObject><body><pre>Bar
10 ($)</pre></body></foreignObject></title></rect>
<text x="-6" y="296.5" dy=".35em" text-anchor="end" style="font-size: 10px; font-family: Arial;">Bar</text></g>
</g>
</svg>
</div>
</body>
</html>
Простое исправление состоит в том, чтобы изменить sankeyNetwork.js и заменить <br>
на \n
, и я подниму это на странице networkD3 GitHub.
Есть идеи, почему Chrome и Edge неправильно отображают тег <br>
?