Jump to content
  • 0

IE6 и проблемы с таблицами в xhtml


clavin
 Share

Question

Следуя самым новым тенденциям, хотел бы сделать сайт на xhtml (сейчас он на html). Но в IE6 появляется такая проблема: при добавлении DOCTYPE соответствующего xhtml в браузере нельзя выделить текст (выделяется по большей части весь текст на странице по какому-то причудливому алгоритму. Т.е. захочешь выделить часть текста и не выделишь). Это для сайта не подходит.

При анализе выяснил, что это связано с таблицами (а у меня весь сайт на них без них никак), которые позиционируются как position: absolute; Для дизайна сайта необходимо спозиционировать большую таблицу, в которой по сути размечается всё содержимое сайта. Какое решение проблемы можно посоветовать?

Внизу код, демонстрирующий проблему (смотреть в Интернет Эксплоер 6).

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html><head><title>Название сайта</title>

<style type="text/css" media="all">

body {margin: 0; padding: 0; border: 0; color: #000000; background-color: rgb(243,243,241); font-family: sans-serif, Arial, Tahoma, Helvetica; font-size: 12px;}

</style>

</head>

<body>

<table style="width:100% !important; border-collapse: collapse !important; border-spacing: 0; text-align: center !important; position: absolute !important; top:0;"><tr><td>

SOME TEXT SOME TEXT SOME TEXT SOME TEXT SOME TEXT SOME TEXT SOME TEXT SOME TEXT

SOME TEXT SOME TEXT SOME TEXT SOME TEXT SOME TEXT SOME TEXT SOME TEXT SOME TEXT

</td></tr>

</table>

</body>

</html>

Edited by clavin
Link to comment
Share on other sites

15 answers to this question

Recommended Posts

  • 0

Влад, при всем уважении: если бы проблема была в принципиальной несовместимости XHTML и IE - страничка бы вообще не отображалась. С доктайпом HTML 4.01 Transitional получается то же самое. Навскидку в коде видна явная ошибка (лишний открывающий html после head), но дело, понятно, не в этом... Неужели нет варианта без перехода в Quirks mode?

Link to comment
Share on other sites

  • 0
У меня лично текст выделяется и без всяких причуд.

Не верю! Вы шестую версию IE используете?

Влад, при всем уважении: если бы проблема была в принципиальной несовместимости XHTML и IE - страничка бы вообще не отображалась. С доктайпом HTML 4.01 Transitional получается то же самое. Навскидку в коде видна явная ошибка (лишний открывающий html после head), но дело, понятно, не в этом... Неужели нет варианта без перехода в Quirks mode?

С лишним html действительно ошибка вышла.

Касательно доктайпа HTML 4.01 Transitional, то сейчас сайт у меня на нём построен и всё нормально. Данная проблема с IE6 единственная, по которой я не могу перейти на xhtml.

И по моему Quirks mode здесь не причём, так как этот режим браузера связан с неправильной блочной моделью, в которую IE6 может переходить при некоторых DOCTYPE

Edited by clavin
Link to comment
Share on other sites

  • 0

clavin, это интересно! Значит, вы утверждаете, что с доктайпом

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

(именно с такой ссылкой на DTD, это важно!) текст выделяется, а с

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

при прочей идентичной разметке - нет? Верно?

Quirks mode здесь не причём, так как этот режим браузера связан с неправильной блочной моделью, в которую IE6 может переходить при некоторых DOCTYPE
Блочная модель - это только одна из сотен, наверное, причуд 5-го и более древних IE, которые браузер пытается эмулировать для доисторических (на его взгляд) страниц (чуть подробнее). Впрочем, проще не гадать, а поставить в код
<script>document.write(document.compatMode);</script>

и посмотреть результат...

Edited by SelenIT
Link to comment
Share on other sites

  • 0

Сейчас на сайте стоит следующий dtd

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

Сделал такой немножко некорректный DTD (отсутствует ссылка на стандарт) потому что при нём более менее корректно отображается сайт в IE6, Опере и Мозиле. Естественно хочу исправить и сделать на xhtml, но возникла эта проблема.

Вставил в свой выше приведённый код ваш скрипт и мне вывелось следующее:

CSS1Compat

А когда сделал свой обычный DTD, то вывелось:

BackCompat (обратная совместимость, наверное)

Вы хотите сказать, что в CSS1 не поддерживается абсолютное позиционирование элементов или что-то ещё? Не очень разбираюсь в поддержке браузерами моделей CSS.

Edited by clavin
Link to comment
Share on other sites

  • 0

Так я и думал. Тот доктайп, что стоял у вас раньше (мало того, что без ссылки на DTD, так еще и 4.0, а не 4.01) - один из тех "некоторых", при которых браузеры (практически все, насколько я знаю) переключаются в Quirks mode (он же - режим обратной совместимости). С неправильной блочной моделью для IE (всех) и прочими вытекающими, зато без таких вот глюков в IE6...

Абсолютное позиционирование, конечно же, поддерживается. Проблема с выделением - баг сугубо IE6, специфический и совершенно нелогичный (как почти все его баги).

В IE6 есть еще один баг - он переходит в Quirks mode при наличии перед доктайпом чего бы то ни было кроме пробела. Поэтому проблему с выделяемостью можно решить, поставив перед доктайпом опциональный <?xml?>-пролог либо комментарий (конечно, стили для IE, включая размеры и т.п., придется задавать отдельно). Это как последнее отчаянное средство...

Но вообще, если не секрет, зачем переходить именно на XHTML? Неужели только для того, "чтоб красиво было"?

Link to comment
Share on other sites

  • 0
Но вообще, если не секрет, зачем переходить именно на XHTML? Неужели только для того, "чтоб красиво было"?

Для того, чтобы соответствовать стандартам, наверное. И во всех браузерах, кстати, сайт будет выглядеть одинаково.

Кстати, вопрос я уже решил. Указанной баги можно избежать, указав в документ для тега body свойство position: absolute; Всё исправится и текст будет выделяться нормально. Так что спасибо всем, кто помогал, тему считаю закрытой.

Link to comment
Share on other sites

  • 0
Для того, чтобы соответствовать стандартам, наверное.
Но почему именно XHTML-стандарту (к тому же устаревшему 1.0), а не, например, стандарту HTML 4.01 (несмотря на почтенный возраст, до сих пор являющемуся действующей рекомендацией W3C)?
И во всех браузерах, кстати, сайт будет выглядеть одинаково.
А сайт, соответствующий стандарту HTML4.01 и отображающийся в стандартном режиме - разве не будет? А вообще вид сайта в браузере определяется скорее CSS-ом, а не разметкой.
Указанной баги можно избежать, указав в документ для тега body свойство position: absolute;
Я первым делом попробовал (в том же примере), у меня почему-то не получилось... Edited by SelenIT
Link to comment
Share on other sites

  • 0
Я первым делом попробовал (в том же примере), у меня почему-то не получилось...

Это я сильно упростил. Для тега body пишется свойство position:absolute; , а для таблицы position: relative; Не известно почему, но это работает и исправит непонятное поведение браузера, что очень хорошо.

Касательно XHTML... я думаю, что он более приспособлен для кроссбраузерной вёрстки. Сайты в нём действительно выглядят одинаково, не так как при стандартном html4 и множестве непонятных doctype для него. Поэтому я за XHTML.

P.S. С каких пор XHTML1.0 стал устаревшим?

Link to comment
Share on other sites

  • 0

Ой, ну вы ей богу жжоте. Хотите стандарту "крутому" соответствовать, а доктайп указываите не правильно(без ссылки), что толку то. Главное, чтобы во всех браузерах корректно отображалось и быстро. А остальное это так, для понтов. Которые пользователям совершенно не нужны.

Link to comment
Share on other sites

  • 0
Это я сильно упростил. Для тега body пишется свойство position:absolute; , а для таблицы position: relative; Не известно почему, но это работает
Действительно жжоте). Если в вашей задаче разница между абсолютным и относительным позиционированием не важна... может, можно было вообще обойтись без position-а, решив задачу margin-ами? :)
Сайты в нём действительно выглядят одинаково
Особенно в IE6 при наличии XML-пролога :). И вообще можно подумать, что IE6 от этой волшебной буквы в доктайпе сразу начинает понимать min-width и дочерние селекторы в CSS, IE7 — правильно рассчитывать z-index, FF2 — воспринимать display:inline-block, Опера — правильно округлять дробные проценты...

Для браузеров вообще нет разницы между HTML и XHTML, если они отдаются с одинаковым типом контента (подробности). Проблемы кроссбраузерности — из-за недоподдержки браузерами CSS.

как при стандартном html4 и множестве непонятных doctype для него
3 шт. - это множество? Для XHTML1.0, кстати, их тоже три. Тех же самых (Strict, Transitional и Frameset). Вполне понятных, имхо.
С каких пор XHTML1.0 стал устаревшим?
C 2001 года, когда статус официальной рекоммендации получил XHTML1.1.
Link to comment
Share on other sites

  • 0
3 шт. - это множество? Для XHTML1.0, кстати, их тоже три. Тех же самых (Strict, Transitional и Frameset). Вполне понятных, имхо.

Ну вы и наехали....

Вот к примеру такой DTD стоит на странице W3C http://www.w3.org/Style/CSS/

<!doctype html public '-//W3C//DTD HTML 4.01//EN'>

Так что здесь с такими доктайпами не только я один.

Тестируя страницы при разных dtd я пришёл к выводу, что XHTML лучше. Посмотрите на сайты в домене .com, большинство из них написано на XHTML. Даже этот форум написан на XHTML.

Если вся трудность в Content-type, который должен быть xml'ным, то согласен, что это важный вопрос и его следует изучить.

Выскажу такое мнение, что чем проще код и CSS, тем лучше с отображением страниц будет дело обстоять. Если использовать различные экзотические свойства от CSS, то действительно не следует рассчитывать на что-то нормально отображаемое ни при HTML ни XHTML.

Edited by clavin
Link to comment
Share on other sites

  • 0

На страничке W3C все-таки немного другой доктайп - 4.01 и не transitional. Да, иногда можно отбросить "хвост" доктайпа со ссылкой на DTD и сэкономить на этом несколько байт, не теряя ни формальной валидности, ни стандартного режима отображения в браузерах. Если хорошо знать, что делаешь и к каким последствиям это приведет. Если нет такой уверенности - вышеприведенный набор доктайпов в помощь, любой доктайп оттуда дает гарантию правильной боксовой модели и т.п. во всех браузерах. Независимо от буквы X в доктайпе.

Строгость синтаксиса XHTML дисциплинирует разработчика и облегчает отлов ошибок - это да. Но в соблюдении этой строгости нужно идти до конца, в ней нет мелочей типа пропущенного амперсанда или обязательного атрибута. В частности, код из первого примера лишь называет себя XHTML, но по факту таковым не является ;).

Советую при верстке в XHTML сохранять странички с расширением .xhtml и пробовать открыть с диска Firefox-ом (если нет своего сервера с правильными настройками заголовков).

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy