Jak zawinąć tekst we wstępny tag?


720

pre tagi są bardzo przydatne dla bloków kodu w HTML i do debugowania danych wyjściowych podczas pisania skryptów, ale jak zrobić zawijanie tekstu tekstu zamiast drukowania jednej długiej linii?

Odpowiedzi:


1008

Odpowiedź z tej strony w CSS:

pre {
    white-space: pre-wrap;       /* Since CSS 2.1 */
    white-space: -moz-pre-wrap;  /* Mozilla, since 1999 */
    white-space: -pre-wrap;      /* Opera 4-6 */
    white-space: -o-pre-wrap;    /* Opera 7 */
    word-wrap: break-word;       /* Internet Explorer 5.5+ */
}

7
white-space:pre-line;(i wszystkie smaki kompatybilne z przeglądarką) w niektórych przypadkach wydają się bardziej odpowiednie (na przykład bez tabulatorów), ponieważ zabiera miejsce na początku wiersza (jeśli są jakieś)
MediaVince

5
@ MediaVince, pre-linezwija wszystkie białe znaki (nie tylko na początku wiersza). developer.mozilla.org/en-US/docs/Web/CSS/white-space ma tabelę podsumowującą zachowanie white-spacewartości.
Paul

1
word-wrap: break-wordnie robi tego, o co pyta pytanie, powoduje zawijanie linii nawet między słowami. Możesz usunąć ten wiersz. W nowoczesnych przeglądarkach nie potrzebujesz żadnego z tych -mozprefiksów.
Flimm

140

Działa to świetnie, aby zawijać tekst i utrzymywać białe preznaki w -tag:

pre {
    white-space: pre-wrap;
}

3
Jest tak, ponieważ jest to tylko CSS 3 - zobacz odpowiedź z adambox, aby uzyskać większą kompatybilność.
lorem monkey

60

Przekonałem się, że pominięcie tagu wstępnego i użycie spacji: wstępne zawinięcie na div jest lepszym rozwiązaniem.

 <div style="white-space: pre-wrap;">content</div>

3
Łatwiejsza niż popularna odpowiedź. Dzięki!
Ricky,

4
W moim przypadku chciałem wyświetlić wstępnie sformatowany tekst, który zawierał tabulatory, aby utworzyć tabelę. Kiedyś swoje rozwiązanie PLUS I dodaje czcionkę monspace więc wszystkie kolumny były wyrównane:style="white-space: pre-wrap; font-family:monospace;"
Jan

1
Chociaż może to być łatwiejsze, użycie <pre>bloków kodu może mieć większą wartość semantyczną .
Angelos Chalaris,

2
Wiem, że spóźniłem się na tę grę, ale dlaczego to rozwiązanie jest lepsze niż ustawienie go raz w arkuszu stylów? Mam wiele div na jednym ekranie wyjściowym HTML, które by tego potrzebowały. Wygląda na to, że jedna poprawka elementu w arkuszu stylów rozwiązuje wszystkie problemy.
żaby internetowe

1
@webfrogs Tak, najlepsze byłoby utworzenie klasy .prewrap.
Mason240,

36

Mówiąc najkrócej, wymusza to zawijanie zawartości do tagu „przed” bez rozbijania słów. Twoje zdrowie!

pre {
  white-space: pre-wrap;
  word-break: keep-all
}

Zobacz przykład na żywo tutaj .


20

Właśnie tego potrzebowałem. Chronił słowa przed łamaniem, ale pozwalał na dynamiczną szerokość w obszarze wstępnym.

word-break: keep-all;

17

Radzę zapomnieć o wersji wstępnej i po prostu umieścić ją w polu tekstowym.

Twoje wcięcie pozostanie, a kod nie zostanie zawinięty na środku ścieżki lub czegoś takiego.

Łatwiej jest również wybrać zakres tekstu w obszarze tekstowym, jeśli chcesz skopiować do schowka.

Poniżej znajduje się fragment php, więc jeśli nie jesteś w php, sposób pakowania specjalnych znaków HTML będzie się różnić.

<textarea style="font-family:monospace;" onfocus="copyClipboard(this);"><?=htmlspecialchars($codeBlock);?></textarea>

Aby uzyskać informacje na temat kopiowania tekstu do schowka w js, zobacz: Jak skopiować do schowka w JavaScript? .

Jednak...

Właśnie sprawdziłem bloki kodu stackoverflow i zawijają one znacznik <code> owinięty znacznikiem <pre> za pomocą css ...

code {
  background-color: #EEEEEE;
  font-family: Consolas,Menlo,Monaco,Lucida Console,Liberation Mono,DejaVu Sans Mono,Bitstream Vera Sans Mono,Courier New,monospace,serif;
}
pre {
  background-color: #EEEEEE;
  font-family: Consolas,Menlo,Monaco,Lucida Console,Liberation Mono,DejaVu Sans Mono,Bitstream Vera Sans Mono,Courier New,monospace,serif;
  margin-bottom: 10px;
  max-height: 600px;
  overflow: auto;
  padding: 5px;
  width: auto;
}

Również zawartość bloków kodu przepływu stosu jest podświetlona przy użyciu (chyba) http://code.google.com/p/google-code-prettify/ .

To niezła konfiguracja, ale na razie korzystam z obszarów tekstowych.


13
Czy użycie obszarów tekstowych do czegoś innego niż wprowadzanie danych nie byłoby semantycznie nieprawidłowe? Wydaje mi się to dziwnym rozwiązaniem.
Josh M.,

2
Nie tak semantycznie niepoprawne jak dodawanie wielu stylów formatowania do znacznika „pre”, gdy „pre” sugeruje, że zawarty tekst jest wstępnie sformatowany, a zatem nie wymaga dodatkowego formatowania i należy go raczej traktować jako taki;) Sugeruję, aby nie nadaj „semantyce” pierwszeństwo przed „funkcjonalnym”.
ekerner 24.09.2013

1
Nie sądzę, aby <pre>miało to znaczenie semantyczne (w przeciwieństwie do <code>), po prostu oznacza, że ​​należy zachować znaki nowej linii i wiele spacji.
Flimm,

1
Jest to skrót od „wstępnie sformatowanego”. Sugerujesz, że w rzeczywistości jest on skrótem tylko dla wstępnie sformatowanych nowych linii i wielu spacji?
ekerner

Rodzaj treści ma być określony przez wewnętrzny znacznik, w zależności od rodzaju wstępnie sformatowanego tekstu. Odsyłam
joshperry

14

Połączyłem @richelectron i @ user1433454 odpowiedzi.
Działa bardzo dobrze i zachowuje formatowanie tekstu.

<pre  style="white-space: pre-wrap; word-break: keep-all;">

</pre>

13

Możesz albo:

pre { white-space: normal; }

aby zachować czcionkę monospace, ale dodaj zawijanie wyrazów lub:

pre { overflow: auto; }

co pozwoli na stały rozmiar z przewijaniem w poziomie dla długich linii.


Och, dziękuję za przypomnienie o przepełnieniu! Idealne dla wyświetlaczy mobilnych.
XTL,

6

Spróbuj użyć

<pre style="white-space:normal;">. 

Lub lepiej rzuć CSS.


ten wydaje się działać w IE 7, ale nie 6. to jedyna sugestia, która wydawała się obiecująca dla IE ... wszystkie inne sugestie były dobre dla innych przeglądarek ...
topwik

nevermind musiała być pamięcią podręczną przeglądarki. uruchomiłem ponownie IE 6 i wszystko jest w porządku. Twoje zdrowie.
topwik

2
Problem z tym rozwiązaniem polega na tym, że rozpuści on także znaki nowego wiersza ... Np. Utracone zostanie rozdzielenie tekstu na akapity.
Chris W.

4

Użyj white-space: pre-wrapi niektóre prefiksy do automatycznego łamania linii w pres.

Nie używaj, word-wrap: break-wordponieważ to po prostu oczywiście dzieli słowo na pół, co jest prawdopodobnie czymś, czego nie chcesz.


3

Najlepszy sposób na przeglądarkę działał dla mnie, aby uzyskać podział linii i wyświetlać dokładny kod lub tekst: (chrome, Internet Explorer, Firefox)

CSS:

xmp{ white-space:pre-wrap; word-wrap:break-word; }

HTML:

<xmp> your text or code </xmp>

Świetnie mi
działało

7
xmp jest przestarzałe od wersji HTML 3.2, zostało całkowicie usunięte z HTML5 i nigdy nie działało poprawnie na początku. Nie został zaimplementowany konsekwentnie w różnych przeglądarkach.
PeterToTheThird

Używanie białych znaków: owijanie wstępne; i zawijanie wyrazów: słowo-łamanie; w moim css zachowuje wcięcia fragmentów (json), przed wierszem to usuwa. (Chrome)
Peter Visser

1

Pomogło mi:

pre {
    white-space: normal;
    word-wrap: break-word;
}

Dzięki


3
Myślę, że lepiej jest używać, white-space: pre-wrap;ponieważ szanuje białe spacje
Ivan Ferrer Villa

-1

<pre>-Elementowe oznacza „wstępnie sformatowanego tekstu” i ma na celu zachować formatowanie tekstu (lub cokolwiek) pomiędzy jej tagów. Dlatego tak naprawdę nie jest zamierzone automatyczne zawijanie słów lub łamanie linii w <pre>-Tag

Tekst w elemencie jest wyświetlany czcionką o stałej szerokości (zwykle Courier) i zachowuje zarówno spacje, jak i podziały linii .

źródło: w3schools.com , podkreśla wykonane przeze mnie.


Po prostu stwierdza, że ​​możliwe jest automatyczne zawijanie tekstu w pre-tagu, chociaż nie jest to intencją pre-tagu.
rob_st

To jedyna poprawna odpowiedź na pytanie autora. Każda inna odpowiedź lub możliwe „rozwiązanie” zachęca do niewłaściwego użycia elementu <pre>. Zasadniczo, jeśli chcesz wstawić tekst do elementu <pre> i zawinąć go, użyj zamiast tego znacznika <p> i nadaj mu dowolny styl klasą CSS.
Markus

Nie jestem pewien, dlaczego ludzie uważają, że udzielanie tego rodzaju porad „jestem mądrzejszy od ciebie” jest pomocne. Nie, znacznik <p> nie jest odpowiednim zamiennikiem: nie zachowuje ani białych znaków ani podziałów linii. Znacznik <pre> jest przydatny do zachowania podziałów linii, ale czasami konieczne jest dodanie dodatkowego zawijania, w taki sam sposób, jak każdy edytor kodu może zarówno zachować podziały linii, jak i dodać zawijanie do długich linii.
dwk
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.