2016-06-09 8 views
0

У меня есть текст внутри div с дефисом в нем. Когда div становится маленьким, текст переполняется, а не разбивается на дефис.Css перерыв на дефис вместо переполнения

Я пробовал немного с word-break и overflow, но не мог понять, как это исправить. Вот пример того, что происходит, и чего я пытаюсь достичь.

div{ 
 
    width:70px; 
 
    border:1px solid; 
 
}
<b>How it is now </b> 
 
<div> bla bla-blablabla</div> 
 
<br> 
 

 
<b> What should happen: </b> 
 
<div> bla bla-<br>blablabla</div>

Edit для дублированного вопроса: Ответы есть данные неверны.

  1. Самый лучший (по голосам) ответ предлагает заменить дефисы на ­. Это неверно, поскольку эти дефисы НЕ будут отображаться, когда нет разрыва строки.
  2. Второй ответ предполагает wbr, но это не поддерживается во всех броузерах.
  3. Третий лучший ответ предлагает css word-wrapping, который не заставляет его разбиваться на дефисы.
+0

его уже порывает в вашем фрагменте кода –

+1

Возможный дубликат [В HTML, как сломать текст на тире?] (Http://stackoverflow.com/questions/904/in-html-how-to-word-break-on-a-dash) – blonfu

+0

@GauravAggarwal, то это, вероятно, не ломается для каждого браузера, разве вы не думаете? – user4493177

ответ

2

использование word-wrap: break-word и будет ломаться, когда больше нет места. а не когда «мы» хотим.

div { 
 
    width: 70px; 
 
    border: 1px solid; 
 
} 
 
div:first-of-type { 
 
    word-wrap: break-word 
 
}
<b>How it is now </b> 
 
<div>bla bla-blablabla</div> 
 
<br> 
 

 
<b> What should happen: </b> 
 
<div>bla bla- 
 
    <br>blablabla</div>

UPDATE из-за вас действительно хотите разорвать только в hyphen вы можете использовать либо &shy; или wbr

div { 
 
    width: 70px; 
 
    border: 1px solid; 
 
}
<b>How it is now </b> 
 
<div>bla bla-blablabla</div> 
 
<br> 
 

 
<b> What should happen: </b> 
 
<div>bla bla- 
 
    <br>blablabla</div> 
 

 
<hr /> 
 
<b>How it is now using &amp;shy;</b> 
 
<div>bla bla&shy;blablabla</div> 
 
<br> 
 

 
<b>How it is now using wbr</b> 
 
<div>bla bla-<wbr>blablabla</div> 
 
<br>

+0

Это не работает. В firefox он ломается во втором слове, но не в дефис. – user4493177

+0

@ user4493177 ответ обновлен. – dippas

+0

@ user4493177 как я уже сказал, он сломается, где больше нет места для записи. если вы измените слова, вы увидите, что я говорю о – dippas

0

С JQuery, если вы можете использовать:

$(function() { 
 
$('div').each(function() { 
 
    $(this).html($(this).text().replace(/-/, '-<br>')); 
 
}); 
 
});
div{ 
 
    width:80px; 
 
    border:solid 1px red; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div> bla bla-blablabla blablabla-blabla</div>

UPDATE

$('div').each(function() { 
 
    $(this).html($(this).text().replace(/-/g, '<span></span>')); 
 
});
div{ 
 
    width:80px; 
 
    border:solid 1px red; 
 
} 
 

 
span:after{ 
 
    content:"-"; 
 
    display:inline-block; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div> bla bla-blablabla babababs sbba-blabla</div>

+0

не все это просто заменяет все - на -
, поэтому также вставляет новые строки, когда div достаточно широк, чтобы показать все на одной линии? – user4493177

+0

Я редактирую свой ответ. Может быть, лучше положить hypen в 'span' и удалить из' content', потому что в 'content' не выбирается. – blonfu

Смежные вопросы