What is the difference between “word-break: break-all” versus “word-wrap: break-word” in CSS

前端 未结 10 1186
离开以前
离开以前 2020-11-22 07:39

I am currently wondering what is the difference between the two. When I used both they seem to break the word if it is not fitting the container. But why did W3C made two wa

相关标签:
10条回答
  • 2020-11-22 08:12

    At least in Firefox (as of v24) and Chrome (as of v30), when applied to content in a table element:

    word-wrap:break-word

    will not actually cause long words to wrap, which can result in the table exceeding the bounds of its container;

    word-break:break-all

    will result in words wrapping, and the table fitting within its container.

    enter image description here

    jsfiddle demo.

    0 讨论(0)
  • 2020-11-22 08:14

    There's a huge difference. break-all is basically unusable for rendering readable text.

    Let's say you've got the string This is a text from an old magazine in a container which only fits 6 chars per row.

    word-break: break-all

    This i
    s a te
    xt fro
    m an o
    ld mag
    azine
    

    As you can see the result is awful. break-all will try to fit as many chararacters into each row as possible, it will even split a 2 letter word like "is" onto 2 rows! It's ridiculous. This is why break-all is rarely ever used.

    word-wrap: break-word

    This
    is a
    text
    from
    an old
    magazi
    ne
    

    break-word will only break words which are too long to ever fit the container (like "magazine", which is 8 chars, and the container only fits 6 chars). It will never break words that could fit the container in their entirety, instead it will push them to a new line.

    <div style="width: 100px; border: solid 1px black; font-family: monospace;">
      <h1 style="word-break: break-all;">This is a text from an old magazine</h1>
      <hr>
      <h1 style="word-wrap: break-word;">This is a text from an old magazine</h1>
    </div

    0 讨论(0)
  • 2020-11-22 08:16

    With word-break, a very long word starts at the point it should start and it is being broken as long as required

    [X] I am a text that 0123
    4567890123456789012345678
    90123456789 want to live 
    inside this narrow paragr
    aph.
    

    However, with word-wrap, a very long word WILL NOT start at the point it should start. it wrap to next line and then being broken as long as required

    [X] I am a text that 
    012345678901234567890123
    4567890123456789 want to
    live inside this narrow 
    paragraph.
    
    0 讨论(0)
  • 2020-11-22 08:16

    word-wrap has been renamed to overflow-wrap probably to avoid this confusion.

    Now this is what we have:

    overflow-wrap

    The overflow-wrap property is used to specify whether or not the browser may break lines within words in order to prevent overflow when an otherwise unbreakable string is too long to fit in its containing box.

    Possible values:

    • normal: Indicates that lines may only break at normal word break points.

    • break-word: Indicates that normally unbreakable words may be broken at arbitrary points if there are no otherwise acceptable break points in the line.

    source.

    word-break

    The word-break CSS property is used to specify whether to break lines within words.

    • normal: Use the default line break rule.
    • break-all: Word breaks may be inserted between any character for non-CJK (Chinese/Japanese/Korean) text.
    • keep-all: Don't allow word breaks for CJK text. Non-CJK text behavior is the same as for normal.

    source.


    Now back to your question, the main difference between overflow-wrap and word-break is that the first determines the behavior on an overflow situation, while the later determines the behavior on a normal situation (no overflow). An overflow situation happens when the container doesn't have enough space to hold the text. Breaking lines on this situation doesn't help because there's no space (imagine a box with fix width and height).

    So:

    • overflow-wrap: break-word: On an overflow situation, break the words.
    • word-break: break-all: On a normal situation, just break the words at the end of the line. An overflow is not necessary.
    0 讨论(0)
提交回复
热议问题