CSS: высота текстовой области в процентах от высоты области просмотра - PullRequest
13 голосов
/ 11 марта 2009

Я бы хотел сказать, что высота текстовой области равна, скажем, 50% высоты области просмотра. Как я могу это сделать? Простой height: 50% не справляется с задачей.

Ответы [ 8 ]

41 голосов
/ 11 марта 2009

Простая высота: 50% не сработает.

Нет, потому что его родитель не имеет явной высоты. Так 50% чего? Родитель говорит «авто», что означает основание его на высоте дочернего содержимого. Который зависит от роста на родителя. Argh! и т.д.

Таким образом, вы должны задать родительскому элементу процентную высоту. И родительский родитель, вплоть до корня. Пример документа:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"><head>
    <style type="text/css">
        html, body { margin: 0; padding: 0; }
        html, body, #mything, #mything textarea { height: 100%; }
    </style>
</head><body>
    <div id="mything">
        <textarea rows="10" cols="40">x</textarea>
    </div>
</body></html>

Другая возможность, если вам не нужно устанавливать высоту, - использовать абсолютное позиционирование. Это изменяет элемент, на котором основаны измерения, с прямого родителя на ближайшего предка с настройкой «position», отличной от «static» по умолчанию. Если нет элементов-предков с позиционированием, то размеры основаны на «Исходном содержащем блоке», который имеет тот же размер, что и окно просмотра.

Наконец, существует тривиальная проблема, связанная с тем, что «100%» немного великовато из-за дополнительных отступов и границ, применяемых к текстовым областям. Вы можете обойти это:

  • компромисс на что-то вроде 95% или
  • установка отступа и границы на 0 / нет на текстовой области, или
  • с использованием «box-sizing: border-box;» для изменения значения «высота». Это функция будущего CSS-супа, которая требует много дополнительных специфических для браузера выражений (таких как mo -moz-box-sizing ’).
8 голосов
/ 25 марта 2015

Вот небольшой пример textarea, который занимает ровно 50% высоты области просмотра, используя CSS3 vh единицу просмотра , которая равна

равно 1% от высоты исходного содержащего блока.

Таким образом, если мы установим высоту textarea на 50vh, получится половина высоты body:

html, body, textarea {
  box-sizing: border-box;
}

html, body {
  margin: 0;
  height: 100%;
}

textarea {
  height: 50vh;
}
<textarea></textarea>

Это довольно неплохо поддерживается различными браузерами, за исключением Opera mini и частичной поддержки в IE .

2 голосов
/ 11 марта 2009

Я думаю, вам нужно каким-то образом использовать javascript для этого. Обработайте событие resize и задайте для текстовой области столько пикселей.

1 голос
/ 11 марта 2009

HTML и CSS не очень хороши в таких вещах с высотой. Они, безусловно, больше о вертикальной прокрутке через свободную страницу. Я думаю, что JavaScript, вероятно, будет вашим наиболее полным решением, как говорит ФрайГи.

1 голос
/ 11 марта 2009

Вы можете сделать это, если установите display: block. Но в HTML 4.01 строгом вы должны определить столбцы и строки, но я думаю, что вы можете переопределить их с помощью CSS.

0 голосов
/ 02 апреля 2013

Попробуйте удалить

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
0 голосов
/ 19 марта 2013

Вероятно, этого не было, когда задавался этот вопрос, но модуль ценностей и единиц CSS уровня 3 включает длина области просмотра в процентах . Кажется, что не поддерживается в мобильных браузерах, кроме iOS .

0 голосов
/ 11 марта 2009

Хотя у меня нет всех браузеров, чтобы проверить это, похоже, что большинство из них принимает просто указание высоты.

Я проверял это в Internet Explorer 7 и Firefox 3.0.

Просто используйте следующий код:

<textarea style="height: 50%; width: 80%;">Your text here</textarea>

С какими браузерами у вас были проблемы?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...