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.