Последовательно оценивая <textarea> под IE, FF, Safari/Chrome

У меня есть <textarea>, который должен вписываться в пространство, размер которого не задан заранее (это процент от размера экрана). Я могу получить хорошие результаты, если FireFox установил обычные свойства CSS:

#container { width: 70%; height:70% }
#text_area { width: 100%; height: 100%; margin: 0; padding:0; }

Однако в IE 6 и 7 я получаю разные нечетные результаты. В IE6 текстовое поле, как представляется, имеет отступы как слева, так и справа, увеличивая размер моего контейнера. В IE7 текстовое поле имеет дополнение слева, но не увеличивает размер контейнера, а его правый край выталкивает за пределы контейнера.

Настройка высоты, похоже, не влияет ни на IE6, ни на IE7; <textarea> имеет длину 2 строки в обоих случаях, игнорируя директиву height: 100%.

Существует ли постоянный способ размера <textarea> в браузерах?

Есть ли способ избавиться от прокладки слева от <textarea>?


Update

Использование position:absolute удаляет отступы, но width:100% все еще запутывается. Кажется, что IE7 вычисляет ширину 100%, чтобы быть слишком большой, в результате чего <textarea> выливается из <div>, который содержит его.

Я создам автономный пример, если у меня будет шанс...

Ответ 1

Я видел эту проблему с элементами управления текстовыми полями ASP.Net также в IE7. Я не мог вспомнить, где я нашел решение (но реквизит для человека, который его нашел), но у меня была та же проблема, когда текстовое поле с шириной = "100%" фактически нарушило бы DOM, и весь раздел содержимого был бы "разливать" на соседнюю секцию (например, на основе таблицы).

Решение, которое я в конечном итоге принял, состояло в том, чтобы обернуть текстовое поле asp: Text внутри его собственной таблицы и установить свойство "table-layout: fixed; width: 100%" и в текстовом поле /textarea "position: relative; width: 100%;" поэтому блок будет выглядеть так:

<table style="width: 100%; table-layout: fixed;">
  <tbody>
    <tr>
     <td>
      <asp:Textbox id="txtMyTextbox" runat="server" Width="100%" style="position: relative;"/>
     </td>
    </tr>
   </tbody>
 </table>

Это не самое подходящее решение, но я проверил, что он работает, перекрещивая все браузеры. У меня есть запись по этому вопросу ЗДЕСЬ.

Надеюсь, что это помогло.

Ответ 2

Возможно, существует скрытый способ CSS для достижения этого, о котором я не знаю, но, по моему опыту, это одна из тех вещей, где использование JavaScript-кода оправдано.

Вы можете получить нужную высоту (из текущего окна, которое я предполагаю) с использованием JQuery или Prototype, или в чистом Javascript: Получить высоту текущего документ, а затем

document.getElementById("text_area").style.height = calculated_height+"px";

В левой части я нахожу странным. Можете ли вы отправить пример?

Ответ 3

Чтобы решить подобные проблемы, нужно подумать о том, как процент обрабатывается в браузере. Прежде всего.... процентов не существует, они в какой-то момент преобразуются в пиксели. Шагами являются: 1) браузер отображает все теги, 2) браузер измеряет внешние, родительские, процентные размеры, чтобы получить размер в пикселях, и устанавливает размер дочерних ящиков в соответствии с их процентным размером. Я думаю, первое, что нужно проверить, это размер родительского поля textarea, а также родительский ящик и т.д. Это можно сделать, проверив информацию "Макет" в Firebug и IE Developer Toolbar и узнайте, что измеряется по-разному в обоих браузерах. Как только вы обнаружите, что элемент (или элементы) css можно настроить, чтобы рассмотреть их.

Имейте в виду, что процентный размер учитывает ширину и высоту содержимого родительского поля для размера дочернего элемента, а не заполнения. Таким образом, если ширина родительского блока равна 500 пикселей и имеет заполнение 100 пикселей, дочерний элемент со 100% шириной будет 500 пикселей, а наложение 100 пикселей будет вокруг него, и оба элемента будут занимать 700 пикселей экрана.

Ответ 4

Try

добавление минимальной высоты: 100% в текстовой области css. На div, содержащем абсолютное положение, установите положение относительно на ваш css.

также используйте транзисторные Doctypes вместо строгих, в то время как ваш на нем. Убедитесь, что нет закрытых тегов. Мне было бы лучше, если бы вы могли сделать стандартную совместимость со страницей XHTML или HTML, чтобы у вас было меньше проблем с кросс-браузерной совместимостью.

Ответ 5

Попробуйте добавить display:block и border:0 к вашему #text_area. Первый должен позаботиться о проблеме высоты, а последний предотвратит проливание width:100%.