Почему переводы строк превращаются в пробелы или исчезают в Opera для документов contentEditable? - PullRequest
1 голос
/ 24 июля 2011

Почему новые строки появляются в виде пробелов или исчезают при нажатии клавиши Ввод / Возврат в Opera для документов contentEditable?

Попробуйте эту демонстрацию:

<!DOCTYPE html>
<html>
<head>
<title>contentEditable demo</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
</head>
<body contenteditable="true" spellcheck="true" dir="ltr">
<h1>Welcome to the contentEditable demo!</h1><p><span style="font-size: xx-large">
Try<span style="font-size: small">to type some text before the word "Try". You will see that random spaces are inserted before the word. Press Enter; you will see that the newline on the top disappears.</span></span></p></body>
</html>

Opera 11.50 Сборка 1074 в Windows Vista

Это ошибка Opera?Я не сталкивался с этой ошибкой в ​​Windows Internet Explorer 8, Safari, Google Chrome или Firefox 5.

1 Ответ

4 голосов
/ 29 мая 2012

Я думаю, что, возможно, узнал, почему по этим ссылкам:

[whatwg] Обработка свернутых пробелов в contenteditable:

http://lists.whatwg.org/pipermail/whatwg-whatwg.org/2011-June/032187.html

  • nbsp в конце строки делает последнее слово длиннее, поэтому при нажатии пробела последнее слово в строке может перейти к следующей строке. затем когда вы печатаете букву, nbsp преобразуется в обычный пробел и слово возвращается к предыдущей строке. (я наблюдал это в Opera. У IE и Gecko, кажется, есть особый случай, чтобы избежать этого; WebKit избегает этого с более общим взломом, который я отмечу позже.)
  • nbsp, который заводится непосредственно перед словом , заставит слово иметь отступ, если произойдет начало строки . Геккон, кажется, очень старайтесь избегать этого случая, но иногда все другие движки делают это.
  • Длинный ряд пробелов, некоторые из которых являются пробелами, а некоторые nbsp, могут привести к nbsp в начале строки. Таким образом, если вы введете три пробела между двумя словами по любой причине, в некоторых случаях второе слово может быть с отступом . Это, вероятно, не то, что пользователи хотят.

Ошибка 13011 - [редактирование] Поощряйте авторов использовать "white-space: pre-wrap" для contenteditable = "" и .designMode = true:

https://www.w3.org/Bugs/Public/show_bug.cgi?id=13011

Пример потенциальной проблемы без предварительной упаковки: если пользователь вводит "Foo Bar", с двумя пробелами между ними, который станет либо "Foo Bar" или "Foo Bar". В первом случае «фу» может перейти к следующей строке, даже если «foo» может поместиться на текущая строка. Во втором случае, если «бар» начинает строку, это будет заметно отступом .

Лучшие практики для внутристраничных редакторов:

http://developers.whatwg.org/editing.html#best-practices-for-in-page-editors

В первом случае «желтый» может переноситься на следующую строку («⍽» используется здесь, чтобы представить неразрывный пробел), хотя "желтый" один может поместиться в конце строки; в последнем случае «⍽ball», если перенести в начало строки, будет иметь видимый отступ из неразрывного пространства .

...