35 Сообщения: 3521 Зарегистрирован: 30.06.01 Откуда: Нижний Новгород
Добавлено: 27 Февраль 2006, 12:21:33
Crazy, Что ж тут правильного? Это не правильно ни с какой точки зрения.
1 Это исключает возможность форматирования кода, т.е. весь код должен быть написан одной строкой. Удобной работы, кодеры!
Разве что комментариями можно визуально разбить текст на логические куски.
2 Для перевода строки есть специальный тег <br />. Плюс блочные теги типа <p>. А hex-коды вообще не являются элементами html, и потому html-интерпретатор не имеет морального права на них реагировать вообще.
3 Если уж отрисовывать CR, то всегда, например, между
<div>
<div>
</div>
</div>
А также надо отрисовывать табуляторы. Где ж логика и правильность?
Впрочем, это уже лирика :о)
А вот стандарты html или xhtml это как-то регулируют?
Тоже такое было выхода не нашел приходится писать одной строкой иногда
_________________ [Mn3m0NiC] - Assisting memory , from the Greek, mnEmOn, or mindful. My work is a game, a very serious game. — MAURITS CORNELIS ESCHER
Dimalish, на самом деле это более чем известно и, вообще говоря, это действительно одно из немногих ПРАВИЛЬНЫХ поведений ИЕ и, конечно же, мак тут ни при чём. Правильно это как минимум (вот совсем базово) потому, что логическая разметка не предназначена для визуализации.
.talisman, почему же баг?? Ты ж сам говришь, что " любое количество пробелов, табуляций или переносов строк должно оцениваться как один пробел" - значит в нашем случае перенос строки расценивается как пробел перед картинкой. А раз она вширину занимет всё место, приходится искать место под этот пробел, раздвигая границы дива вертикально.
_________________ Love is the best think in the World!!!
А визульно код всё-равно можно сделать легко читаемым: подобные случаи достаточно редки; а переносить строку смело можно, например, между тегами </td> и <td>, где этот пробел просто не будет отрисовываться браузером, или просто между словами в тексте, где и так должен быть пробел.
_________________ Love is the best think in the World!!!
Если учесть, что HTML (как один из представителей SGML) для браузера - поток данных, а в потоке никаких переводов строки нет и быть не может, то поведение эксплорера естественно неправильное. Пробел и перевод строки выступают в HTML только как разделители идентификаторов (исключение - контейнер <PRE> и <CODE>).
Кстати, наверняка никто сейчас не использует HTML страницы как таковые. Все генерят код на скриптах из шаблонов HTML. Так почему бы, например, не сделать перед выводом в поток браузера удаление CR и LF внутри <BODY> (исключая <PRE> и <CODE>) скриптом?
Если учесть, что HTML (как один из представителей SGML) для браузера - поток данных, а в потоке никаких переводов строки нет и быть не может, то поведение эксплорера естественно неправильное. Пробел и перевод строки выступают в HTML только как разделители идентификаторов (исключение - контейнер <PRE> и <CODE>).
Друг мой, вы определенно произносите что-то странное. Если для SGML переводы строк не значимы, то в PRE они в принципе не могли бы иметь специальной обработке.
Продолжайте учить матчасть.
P.S. Если желаете -- можете поискать в описании SGML фразу о незначимости переводов строк. Я ее там не видел -- но может быть, вам удастся найти.
вы определенно произносите что-то странное. Если для SGML переводы строк не значимы, то в PRE они в принципе не могли бы иметь специальной обработке.
Странно, что приходится это объяснять Вам. Но в HTML (XML, SGML) нет никаких строк. Есть поток данных, идущий в браузер и это его головная боль, как трактовать ту или иную последовательность.
Crazy писал(а):
P.S. Если желаете -- можете поискать в описании SGML фразу о незначимости переводов строк. Я ее там не видел -- но может быть, вам удастся найти.
Конечно не видели, я и говорю о том, что перевод строки не имеют никакого значения для производных SGML, так как это просто разделитель сущностей. А вот и выдержка:
http://xml.coverpages.org/sgmlsyn/sgmlsyn.htm#C6.2.1
Странно, что приходится это объяснять Вам. Но в HTML (XML, SGML) нет никаких строк.
В нашем деле важна внимательность (c)
В моем сообщении сказано не о наличии в SGML строк, а о символах перевода строк. Это CR и LF.
Цитата:
Конечно не видели, я и говорю о том, что перевод строки не имеют никакого значения для производных SGML, так как это просто разделитель сущностей.
Опять противоречие. "Никакого" и конкретное значение "разделитель сущностей" -- это вовсе не одно и то же. Не нужно пытаться играть словами, если не понимаете их семантики.
Твоя проблема, друг мой, в том, что мало найти через гугл цитату -- нужно еще и понять, что она означает. К сожалению, приведенный тобой текст имеет справочный характер -- для тех, кто знал, но забыл. Т.е. не твой случай.
Действительно, CR и LF могут рассматриваться как разделители. Однако они также входят в описание #PCDATA (да, на этой странице такой цитаты не было, поэтому ты не в курсе). Так что говорить о том, что CR (LF, пробел и т.п.) в SGML всегда являются разделителями -- значит публично декларировать непонимание контентной модели SGML.
Воистину, хорошее определение и хорошая ссылка. Ибо здесь сказано: "То есть любая последовательность пробелов, символов табуляции и пустых линий эквивалентна единственному пробелу в файле HTML."
Обращаю внимание: здесь вовсе не сказано об игнорировании пробелов или разделителей строк. Здесь сказано, что они при обработке редуцируются до одного.
Небольшим недостатком этого текста является то, что он невольно вводит неофитов в заблуждение: не SGML требует редуцировать все пробелы до одного, а семантика HTML допускает такое редуцирование в подавляющем большинстве тэгов. В тексте, разумеется, говорится только про HTML (видимо сбивает упоминание SGML по другому поводу абзацем ниже).
Причем в другом разделе этого же материала указано, что в HTML это правило имеет исключения. Т.е. автор понимает, что пишет.
Но в данном случае этот семантический нюанс для нас неважен. Отбросим твои попытки увести дискуссию в дебри теоретического обсуждения SGML и вспомним, с чего мы начали:
В IE снизу выползает несколько пикселей background-color
Итак, автор треда обратил внимание, что разделитель строк, будучи добавлен в div, не уничтожается (как это было бы сделано, к примеру, межде тэгами TR и TD, а обрабатывается и дает визуальный "фидбэк".
Итак, мы видим, что в контенте DIV однозначно заявлено #PCDATA. Это значит, что встречающиеся пробелы и разделители строк трактуются как обычные символы и не могут быть отброшены парсером.
Чтобы было понятнее -- возьмем для контраста пример с TR и TD:
Код:
<!ELEMENT TR - O (TH|TD)+ -- table row -->
Т.е. внутри TR могут быть только тэги TH и TD и разделители (пробелы, разделители строк и т.п.)
Соответственно, если мы пишем перевод строки между TR и TD, то он трактуется как разделитель еще при парсинге и просто игнорируется.
Известно, что в IE с давних пор была удобная ошибка (багофича) -- игнорирование в ряде случаев переводов строк, если они находятся на границе тэга. Это действительно удобно для верстки. Хотя и нарушает стандарт.
В нашем случае -- пикселы появились только снизу -- мы видим, что IE сожрал пробельные символы после начала DIV (нарушение), но оставил их перед его окончанием (все корректно).
Но нам действительно хотелось бы другого поведения. Увы.
В нашем случае -- пикселы появились только снизу -- мы видим, что IE сожрал пробельные символы после начала DIV (нарушение), но оставил их перед его окончанием (все корректно).
если поставить фонт-сайз равным, скажем 100, то пустое место появится и сверху.
Именно в такой интерпретации -- ну, не извращение , но странновато. Хотя то, что привёл я, примерно то же самое, только чуть более читаемо. Это полезно, особенно, если достаточно длинные строки... и они часто повторяются/встречаются.
номер 2. указываем достаточно маленький фиксированный размер шрифта (font-size), либо высоту строки (line-height). Оптимальный размер можно определить опытным путём. Фиксированный, чтобы при увеличении не расползалось.
35 Сообщения: 3521 Зарегистрирован: 30.06.01 Откуда: Нижний Новгород
Добавлено: 2 Март 2006, 08:19:48
Crazy, большое спасибо, это именно то, что я надеялся узнать.
TONIC XGM, .talisman, то, что я привел - это не рабочий код, а иллюстрация вопроса. Никаких решений "проблемы" не требуется. Вопрос был исключительно эстетическо-познавательного свойства.
Уровень доступа: Вы не можете начинать темы. Вы не можете отвечать на сообщения. Вы не можете редактировать свои сообщения. Вы не можете удалять свои сообщения. Вы не можете добавлять вложения.