Ошибка несоответствия Textarea в Firefox и Chrome
У меня есть дополнение к элементу textarea, и я хотел бы, чтобы содержимое оставалось заполненным, когда вы прокручиваете текстовое поле. Он работает как ожидается в Firefox, но не в Chrome. На рисунке ниже показана разница в выходе:
![enter image description here]()
CSS
textarea {
width: 250px;
height: 160px;
padding: 15px;
font-family: Arial;
font-size: 12px;
line-height: 18px;
border: 1px solid #CCCCCC;
overflow: auto;
resize: none;
}
В Chrome верхнее и нижнее заполнение отображаются только в начале и в конце текстового содержимого. Ниже приведен пример jsfiddle:
http://jsfiddle.net/LkE6f/
Как сделать добавление в Chrome появляться/отображать так же, как в Firefox?
Ответы
Ответ 1
Вы можете сделать что-то вроде этого, оно не очень гибкое (фиксированная ширина), но вы можете расширить его. Он исправляет проблему в Chrome и не прерывает Firefox. Он использует псевдоэлементы на #container
, которые работают в IE8 +
textarea {
width: 250px;
height: 160px;
padding: 15px;
font-family: Arial;
font-size: 12px;
line-height: 18px;
border: 1px solid #CCCCCC;
overflow: auto;
resize: none;
display: block;
}
#container:before, #container:after {
display: block;
height: 15px;
background-color: #FFF;
position: absolute;
left: 1px;
width: 225px;
content:'';
}
#container:before {
top: 1px;
}
#container:after {
bottom: 6px;
}
Здесь jsFiddle.
Обновление: Добавлено display: block
в textarea
, чтобы исправить проблему позиционирования IE.
Обновление 2: Альтернативное решение, которое берет свою ширину из div #container
и для которого вам нужно установить значение right
в зависимости от ширины полосы прокрутки браузера, в настоящее время значение 17px
в Chrome доступно. Про с этим решением состоит в том, что вы можете установить ширину textarea
на что угодно, изменив ширину #container
, и псевдоэлементы будут масштабироваться соответствующим образом. jsFiddle.
#container {
width: 260px;
margin: 20px auto;
position: relative;
}
textarea {
width: 100%;
height: 160px;
padding: 15px;
font-family: Arial;
font-size: 12px;
line-height: 18px;
border: 1px solid #CCCCCC;
overflow: auto;
resize: none;
display: block;
}
#container:before, #container:after {
display: block;
height: 15px;
background-color: #FFF;
position: absolute;
left: 1px;
right: 17px;
content:'';
}
#container:before {
top: 1px;
}
#container:after {
bottom: 1px;
}
Ответ 2
Лучший ответ:
Объявите разницу между браузерами; веб-сайт не является однородным, и ваш дизайн никогда не будет на 100% идентичным в браузерах.
Общайтесь с ответами:
Если вы не заботитесь о том, чтобы полоса прокрутки имела пробел сверху и снизу, вы можете использовать границы и схему, подобную этой.
ИЛИ
Это может быть достигнуто с помощью псевдоэлемента, если вы счастливы обернуть каждый textarea
в div
. Должен отображаться корректно на IE8 +, FF и Chrome.
Есть скрипка!
HTML
<div class="textareaWrap">
<textarea>Content</textarea>
</div>
CSS
textarea {
position: relative;
width: 250px;
height: 160px;
font-family: Arial;
padding: 15px;
font-size: 12px;
line-height: 18px;
border: 1px solid #CCCCCC;
resize: none;
}
.textareaWrap {
position: relative;
}
.textareaWrap:after {
position: absolute;
content:'';
display: block;
width: 232px;
height: 15px;
background: #FFF;
z-index: 1;
bottom: 5px;
left: 1px;
}
.textareaWrap:before {
position: absolute;
content:'';
display: block;
width: 232px;
height: 15px;
background: #FFF;
z-index: 1;
top:1px;
left: 1px;
}
Ответ 3
Попробуйте решение ниже для текстового поля
textarea {
-moz-appearance: textfield;
-moz-binding: url("chrome://global/content/platformHTMLBindings.xml#inputFields");
-moz-user-select: text;
background-color: -moz-field;
border: 2px inset threedface;
color: -moz-fieldtext;
cursor: text;
font: -moz-field;
width:250px;
height:150px;
letter-spacing: normal;
line-height: normal !important;
padding: 1px 0;
text-align: start;
text-indent: 0;
text-rendering: optimizelegibility;
text-shadow: none;
text-transform: none;
word-spacing: normal;
}
Ссылка на ссылку Ссылка
Отношения
Mahadevan
Ответ 4
Используйте проценты вместо пикселей. В вашем случае это будет padding:1%;
.