Проблема с <input type = 'text' /> и шириной <textarea>

В следующем коде элементы INPUT и TEXTAREA отображаются шире, чем должны. Как я могу ограничить их до 100% полезной площади в div?

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns = "http://www.w3.org/1999/xhtml" xml:lang = "en" lang = "en">
<head>
    <style>
       .mywidth{ width:100%; }
    </style>
</head>
<body>
    <div style = "border: 3px solid green; width: 100px;">
        <input class = "mywidth" ><br />
        <textarea class = "mywidth"></textarea><br />
        <div style = "background-color: yellow;" class = "mywidth">test</div>
     </div>
</body>
</html>

Примечание. Если я удалю DOCTYPE, он будет отображаться, как ожидалось, с INPUT, TEXTAREA и внутренним DIV одинаковой ширины и не выходящими за пределы содержащего DIV.

Обновление: несмотря на границы по умолчанию для этих элементов, он по-прежнему отображается некорректно в IE7.

Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
9
0
18 077
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

Вместо этого вы можете попробовать использовать этот DOCTYPE

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">

Отсутствие DOCTYPE заставит браузер перейти в режим причуд, используя старую неправильную блочную модель, которая не считает границу частью ширины.

philnash 03.11.2008 21:23
Ответ принят как подходящий

У полей ввода и текстовых полей по умолчанию есть границы.

<style>
   .mywidth{ 
     width:100%;
     border:0;
    } 
</style>

отобразит все элементы в вашем контейнере.

Обновлять

IE также имеет левое и правое заполнение для каждого элемента, и следующий CSS подходит для всех элементов в контейнере в FF3, FF2, Safari 3, IE6 и IE7.

<style>
   .mywidth{ width:100%; border:0; padding-left:0; padding-right:0; }
</style>

Однако не забывайте, что вам, вероятно, понадобится граница и, возможно, заполнение, чтобы поля отображались для пользователей как обычно. Если вы установите эту границу и отступы самостоятельно, вы будете знать, в чем разница между шириной контейнера и шириной, которую вам нужно будет передать элементам input / textarea в разных браузерах.

Ты это пробовал? Проверьте IE7. Он все еще входит в зеленую границу содержащего div.

Larsenal 03.11.2008 21:27

Извините, я на Mac! Я посмотрю, что я могу сделать в IE7.

philnash 03.11.2008 22:42

Добавьте "padding-right: 3px;" в div, чтобы он читался как:

<div style = "border: 3px solid green;padding-right:3px; width: 100px;">

Потому что вы добавили границу к div, которая также считается внутренним пространством div.

Причина, по которой он работает без объявления документа, заключается в том, что браузер не отображает страницу как переходный XHTML, а как простой старый HTML, который имеет другой метод рендеринга для div и т. д.

У @Phil есть ответ выше.

Между прочим, использование Firebug действительно показывает границы по умолчанию для текстового поля и элементов ввода. Так что использование Firebug могло помочь.

В FF это выглядит нормально, но в IE7 все равно отображается некорректно.

Larsenal 03.11.2008 21:32

Кажется, что строгий код xhtml делает это с формами. Я просто растягиваю поля ввода и текстовые поля на 99%, и это, кажется, работает. попробуйте.

У меня была такая же проблема. Я использовал свойство box-sizing, упомянутое здесь:

Как сделать TextArea шириной 100% без переполнения, если в CSS есть отступы?

Вот как это выглядело для меня:

<style>
   .mywidth{ 
     width:100%;
     -moz-box-sizing: border-box;
     -ms-box-sizing: border-box;
     -webkit-box-sizing: border-box;
     box-sizing: border-box;
    } 
</style>

Это не будет работать в IE7 или более ранней версии, так как старые браузеры не поддерживают изменение размера окна. Кроме того, вы должны обязательно включать -ms-box-sizing и всегда указывать фактическое свойство CSS3 (box-sizing) последним, поэтому, как только браузеры реализуют реальное свойство CSS, оно перезапишет их версию, зависящую от поставщика.

RussellUresti 30.03.2011 20:42

@RussellUresti: хороший звонок, я обновил свой ответ на основе вашего комментария

bmaupin 31.03.2011 19:27

Другие вопросы по теме