2016-07-01 16 views
2

Я пытаюсь изменить свойство word-break для некоторых встроенных элементов, таких как <span> и <a>, чтобы получить лучший поток содержимого страницы.Перерыв в Firefox для встроенных элементов

Похоже, что Firefox распознает свойство word-break для элементов, отображаемых как блок (например, <div>), в то время как Chrome отличает запрос на разрыв слов.

В приведенном ниже примере красные и синие части визуализируются идентично в Chrome (xxxxx разбит на несколько строк). В Firefox ххххх в красном поле переполняется.

<div style="width:200px;background:red;"> 
 
    Hello <span style="word-break:break-all;">xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx</span> World 
 
</div> 
 

 
<div style="width:200px;background:blue;word-break:break-all;"> 
 
    Hello <span>xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx</span> World 
 
</div>

Пример сверху: https://jsfiddle.net/7scx4hfq/

Какой браузер правильно ведет себя? Это ошибка Firefox или ошибка Chrome?

И что еще более важно, как я могу добиться желаемого эффекта во всех браузерах?

Примечание, установка word-break:break-all на уровне блока не является вариантом.

+0

Я всегда путают с прецедентом для 50 букв слово. Можете ли вы придумать ** практический пример? –

+1

Вариант использования - длинные ссылки, которые указаны в тексте, который является оправданным. Обычные разрывы слов только разбивают URL-адрес на косые черты «/», что приводит к очень большим уродливым пробелам для оставшегося слова. См. Здесь: https://jsfiddle.net/zL8ytno6/ Вы получаете такие уродливые ссылки, например, со ссылками на Flickr и Google Drive. – kaymes

ответ

3

Вы можете попробовать добавить дополнительные word-wrap: break-word; для Firefox.

span { 
    word-break: break-all; /* for others */ 
    word-wrap: break-word; /* for Firefox */ 
} 

Если вы хотите сохранить весь текст в одной и той же линии, как можно больше, вы можете установить white-space: nowrap; на контейнере, и сбросить его white-space: normal; на span. Опять же, эти настройки предназначены только для Firefox.

div { 
 
    background: yellow; 
 
    width: 200px; 
 
    white-space: nowrap; 
 
} 
 
span { 
 
    background: aqua; 
 
    word-break: break-all; 
 
    word-wrap: break-word; 
 
    white-space: normal; 
 
}
<div> 
 
    Hello <span>xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx</span> World 
 
</div>

jsFiddle

+0

Это изменяет поведение пролета таким образом, что текст не течет нормально. В этом примере это приводит к разрыву строк после «Hello» и перед «World». См. Https://jsfiddle.net/7scx4hfq/1/ – kaymes

+0

Я обновил его выше. Обратите внимание, что слово «Hello» не находится внутри , так что установка обертывания на div и span приведет к тому, что результаты не будут одинаковыми. – Stickers

+0

Брейк слот имеет тот же эффект, что и дополнительные разрывы строк, потому что он по-прежнему пытается сохранить как можно больше слова вместе. Это особенно важно, если текст оправдан. https://jsfiddle.net/7scx4hfq/3/ – kaymes