2016-03-23 4 views
0

При запуске следующего фрагмента на FF 45 в первом из двух полей отображается только одна строка, такая как «ThisIsATest ...», а во втором окне показаны две строки с текстом, деленным на дефис , В Chrome и Edge оба окна показывают две строки. Мой вопрос: как я могу сделать текст в первом разрыве после дефиса в FF? Очевидно, что это имеет какое-то отношение к длине следующего текста, но в чем причина этого?Разрыв строки после дефиса

.test { 
 
    width: 100px; 
 
    overflow: hidden; 
 
    text-overflow: ellipsis; 
 
    background: #00bcd4; 
 
    margin-bottom: 1rem; 
 
}
<div class="test"> 
 
    ThisIsATest-Test 
 
</div> 
 

 
<div class="test"> 
 
    ThisIsATest-Test123 
 
</div>

Я хочу добиться такого поведения (который уже работает в Chrome и Edge): Если текст не содержит никаких дефисов и пробелов, не разбить его и показать». .. ". Если текст содержит пробел или дефис, сломайте его, если необходимо.

Update:

Вы можете удалить текст переполнение: многоточие и получить аналогичный результат. Теперь текст иногда прерывается, иногда появляется новая строка. Я не вижу причин, почему два подобных divs (один с немного большим содержанием) должны проявлять такое другое поведение.

.test { 
 
    width: 100px; 
 
    overflow: hidden; 
 
    background: #00bcd4; 
 
    margin-bottom: 1rem; 
 
}
<div class="test"> 
 
    ThisIsATest-Test 
 
</div> 
 

 
<div class="test"> 
 
    ThisIsATest-Test123 
 
</div>

В FF 45.0.1 на Windows 10, она в настоящее время выглядит следующим образом:

Text sometimes getting cut-off, sometimes jumping into a new line

+0

Поведение в Firefox является правильным. Chrome по какой-то причине не отображает многоточие, как следует. Но это не общая проблема, я знаю. – Rob

+0

Почему поведение в FF считается правильным, если оно иногда показывает новую строку, а иногда нет? Это не очень похоже на меня ... –

+0

Вы указываете, что переполнение является эллипсисом. Firefox делает это, пока Chrome не работает. Я не уверен, что ты этого хочешь. – Rob

ответ

0

Если это "реальный" дефис (то есть, если вы не» t нужно, чтобы «-» отображалось, когда все вписывается в одну строку), вы можете использовать объект «мягкого дефиса» &shy;:

ThisIsATest&shy;Test 
+0

Мне действительно нужен дефис. Для меня это довольно странное поведение: длинный текст отображается правильно (с двумя строками). Есть ли причина для этого? –

0

Добавьте свойства word-wrap: break-word; или white-space: nowrap; к вашему тестовому классу, и оба divs будут производить одинаковое поведение.

Например:

перенос слов: обкатки слово;

Будет производить две линии.

.test { 
 
    width: 100px; 
 
    overflow: hidden; 
 
    word-wrap: break-word; 
 
    text-overflow: ellipsis; 
 
    background: #00bcd4; 
 
    margin-bottom: 1rem; 
 
}
<div class="test"> 
 
    ThisIsATest-Test 
 
</div> 
 

 
<div class="test"> 
 
    ThisIsATest-Test123 
 
</div>

бело-пространство: Nowrap;

Производит одну линию с многоточием.

.test { 
 
    width: 100px; 
 
    overflow: hidden; 
 
    white-space: nowrap; 
 
    text-overflow: ellipsis; 
 
    background: #00bcd4; 
 
    margin-bottom: 1rem; 
 
}
<div class="test"> 
 
    ThisIsATest-Test 
 
</div> 
 

 
<div class="test"> 
 
    ThisIsATest-Test123 
 
</div>

+0

OK, извините. Я должен был указать это немного больше. Я не хочу, чтобы текст отображался в одной строке (вот почему я создал второй блок - это «желаемое поведение»). Я хочу, чтобы текст сломался после дефиса. Если нет дефиса, текст должен отображаться в одной строке. Это работает в Chrome и для более длинных слов после дефиса в FF. Что я не понимаю: почему это не работает с моим первым примером? –

+0

Обновлено! Это то, что вы хотели? –

+0

Mh, не особо - извините. Дело в том, что использование word-wrap: break-word сломает слово «случайно». Я хочу сломать слово после пробела или дефиса. (Просто fyi: На немецком языке у нас много составленных существительных (не знаю точного перевода). Вместо того, чтобы говорить «приложение для смартфонов», мы говорим «Smartpone-App». Так что это немного больше, чем наличие двух слов, стоящих рядом (разделенные пробелом), но во многих случаях имеет смысл разбить их на дефис.) –

0

Я нашел этот трюк на этом blog, но я не знаю, если будет решить вашу проблему.

.test { 
 
    width: 100px; 
 
    overflow: hidden; 
 
    text-overflow: ellipsis; 
 
    background: #00bcd4; 
 
    margin-bottom: 1rem; 
 

 
    -ms-word-break: break-all; 
 
    word-break: break-all; 
 

 
    word-break: break-word; 
 

 
    -webkit-hyphens: auto; 
 
    -moz-hyphens: auto; 
 
    -ms-hyphens: auto; 
 
    hyphens: auto; 
 
}
<div class="test"> 
 
    ThisIsATest-Test 
 
</div> 
 

 
<div class="test"> 
 
    ThisIsATest-Test123 
 
</div>

+0

Ваш тестовый код разбивается следующим образом: «ThisIsATest-Te» + «st» из-за разрыва слова: break-all ; Btw: word-break: break-word не существует, и я предполагаю, что вы имеете в виду word-wrap –

+0

Тег ** word-break ** существует, но я никогда не использовал его. [Спецификация] (http://www.w3schools.com/cssref/css3_pr_word-break.asp) на W3. –

+0

Вы использовали слово-break: break-word, и я хотел упомянуть, что это неверно. Возможные значения break-break: normal, break-all, keep-all, initial и inherit. Вы использовали слово break, которое просто не указано. Прочтите свой код еще раз, и вы увидите, что я имею в виду :-) Я выделил его здесь: [link] (http://snag.gy/9OMkT.jpg) –