mój prosty obszar tekstowy nie wyświetla poziomego paska, gdy tekst się przepełnia. Zawija tekst w nowym wierszu. Jak więc usunąć zawijanie słów i wyświetlić poziomy pasek, gdy tekst się przepełnia?
mój prosty obszar tekstowy nie wyświetla poziomego paska, gdy tekst się przepełnia. Zawija tekst w nowym wierszu. Jak więc usunąć zawijanie słów i wyświetlić poziomy pasek, gdy tekst się przepełnia?
Odpowiedzi:
Obszary tekstowe nie powinny domyślnie zawijać, ale możesz ustawić wrap = "soft", aby jawnie wyłączyć zawijanie:
<textarea name="nowrap" cols="30" rows="3" wrap="soft"></textarea>
EDYCJA: Atrybut „wrap” nie jest oficjalnie obsługiwany. Dostałem go od strony SELFHTML german (angielski źródło jest tutaj ), który mówi, IE 4.0 i Netscape 2.0 wspierać. Przetestowałem go również w FF 3.0.7, gdzie działa zgodnie z oczekiwaniami. Tutaj sytuacja się zmieniła, SELFHTML jest teraz wiki, a angielski link do źródła nie działa.
EDIT2: Jeśli chcesz mieć pewność, że każda przeglądarka go obsługuje, możesz użyć CSS, aby zmienić zachowanie zawijania:
Korzystając z kaskadowych arkuszy stylów (CSS), możesz osiągnąć ten sam efekt za pomocą
white-space: nowrap; overflow: auto;
. W związku z tym atrybut zawijania można uznać za nieaktualny.
Od tutaj (wydaje się być doskonałym strona z informacjami o textarea).
EDIT3: Nie jestem pewien, kiedy to się zmieniło (zgodnie z komentarzami, musiało to być około 2014 roku), ale wrap
teraz jest to oficjalny atrybut HTML5, patrz w3schools . Zmieniono odpowiedź, aby pasowała do tego.
white-space: pre;
(lub pre-line
/ pre-wrap
) miał taki sam wpływ jak wrap="off"
u mnie ( white-space: nowrap
ale nie szanowałem padding
)
wrap="off"
nie jest już ważny, ale jest wymagany zarówno dla IE, jak i Edge!
textarea {
white-space: pre;
overflow-wrap: normal;
overflow-x: scroll;
}
white-space: nowrap
działa również, jeśli nie przejmujesz się białymi znakami, ale oczywiście nie chcesz tego, jeśli pracujesz z kodem (lub akapitami z wcięciem lub dowolną treścią, w której celowo może być wiele spacji) ... więc wolę pre
.
overflow-wrap: normal
(było word-wrap
w starszych przeglądarkach) jest potrzebne na wypadek, gdyby jakiś rodzic zmienił to ustawienie; może powodować zawijanie, nawet jeślipre
jest ustawione.
także - w przeciwieństwie do obecnie przyjętej odpowiedź - pola tekstowe mają często zawijać domyślnie. pre-wrap
wydaje się być domyślnym ustawieniem w mojej przeglądarce.
overflow-x: scroll
z overflow: auto
. Paski przewijania zmniejszają dostępną przestrzeń do wpisywania w obszarze tekstowym. Ponadto IE11 niepotrzebnie renderował pionowy pasek przewijania, ale overflow: auto
naprawił go.
U mnie działa następujące rozwiązanie oparte na CSS:
<html>
<head>
<style type='text/css'>
textarea {
white-space: nowrap;
overflow: scroll;
overflow-y: hidden;
overflow-x: scroll;
overflow: -moz-scrollbars-horizontal;
}
</style>
</head>
<body>
<form>
<textarea>This is a long line of text for testing purposes...</textarea>
</form>
</body>
</html>
Znalazłem sposób na stworzenie obszaru tekstowego z tym wszystkim działającym w tym samym czasie:
Działa dobrze na:
Pozwól, że wyjaśnię, jak do tego doszedłem: korzystałem ze zintegrowanego narzędzia Chrome Inspector i widziałem wartości w stylach CSS, więc próbuję tych wartości zamiast normalnych ... prób i błędów, dopóki nie zredukuję ich do minimum i tutaj to jest dla każdego, kto tego chce.
W sekcji CSS użyłem tylko tego dla Chrome, Firefox, Opera i Safari:
textarea {
white-space:nowrap;
overflow:scroll;
}
W sekcji CSS użyłem tylko tego dla IE:
textarea {
overflow:scroll;
}
To było trochę trudne, ale jest CSS.
Tag (x) HTML, taki jak ten:
<textarea id="myTextarea" rows="10" cols="15"></textarea>
A na końcu <head>
sekcji JavaScript jak ten:
window.onload=function(){
document.getElementById("myTextarea").wrap='off';
}
JavaScript służy do tego, aby walidator W3C przekazywał XHTML 1.1 Strict, ponieważ atrybut wrap nie jest oficjalny i dlatego nie może być bezpośrednio tagiem (x) HTML, ale większość przeglądarek obsługuje go, więc po załadowaniu strony ustawia ten atrybut.
Mam nadzieję, że można to przetestować na większej liczbie przeglądarek i wersji i pomóc komuś ulepszyć to i sprawić, że będzie to w pełni cross-browser dla wszystkich wersji.
To pytanie wydaje się być najbardziej popularne przy wyłączaniu textarea
zawijania. Jednak od kwietnia 2017 r. Uważam, że IE 11 (11.0.9600) nie wyłącza zawijania słów żadnym z powyższych rozwiązań.
Tylko rozwiązanie, które działa na IE 11 jest wrap="off"
. wrap="soft"
i / lub różne atrybuty CSS, takie jak white-space: pre
alter, w których IE 11 wybiera zawijanie, ale nadal gdzieś zawija. Zauważ, że przetestowałem to z lub bez widoku zgodności . IE 11 jest całkiem kompatybilny z HTML 5, ale nie w tym przypadku.
Tak więc, aby uzyskać linie, które zachowują swoje białe spacje i wychodzą z prawej strony, używam:
<textarea style="white-space: pre; overflow: scroll;" wrap="off">
Na szczęście wydaje się, że działa to również w Chrome i Firefox. Nie bronię używania pre-HTML 5 wrap="off"
, po prostu mówię, że wydaje się to być wymagane dla IE 11.
Jeśli możesz używać JavaScript, poniższa opcja może być obecnie najbardziej przenośną opcją (przetestowany Firefox 31, Chrome 36):
contenteditable="true"
http://jsfiddle.net/cirosantilli/eaxgesoq/
<style>
div#editor {
white-space: pre;
word-wrap: normal;
overflow-x: scroll;
}
<style>
<div contenteditable="true"></div>
Wydaje się, że nie ma standardowego, przenośnego rozwiązania CSS:
wrap
atrybut nie jest standardowy
white-space: pre;
nie działa w przeglądarce Firefox 31 dla textarea
. Fiddle , otwarta prośba o funkcję .
Ponadto, jeśli możesz używać JavaScript, równie dobrze możesz użyć edytora ACE:
http://jsfiddle.net/cirosantilli/bL9vr8o8/
<script src="http://cdnjs.cloudflare.com/ajax/libs/ace/1.1.3/ace.js"></script>
<div id="editor">content</div>
<script>
var editor = ace.edit('editor')
editor.renderer.setShowGutter(false)
</script>
Prawdopodobnie działa z ACE, ponieważ nie używa textarea
żadnego, który jest niedookreślony / niespójny zaimplementowany, ale nie jest pewien, czy jest używany contenteditable
.