Pull to refresh

Comments 120

Хотелось бы напомнить пословицу: доверяй, но проверяй! «Также» и «помимо» лучше написать слитно.
Извините, неудобно как-то получилось.. Дело в том, что оставшиеся «также» и «также» тоже лучше смотрятся слитно. Прям за самый глаз цепляет, честное слово!
"Мы с этим боремся, мы это исправляем" (с) Пишу с самого утра, в перерывах в работе. Вот и получается. Как говорит другая пословица: поспешишь - людей насмешишь. :-)
UFO just landed and posted this here
Спасибо. Подтвердили некоторые мои догадки. К сожалению в ВУЗах про это не говорят.
Это еще смотря какие ВУЗы и вообще-то, говорят. Может и не везде, но рассказвая часть, указывают направление, где искать остальное. А вообще, в ВУЗах такие вещи никогда не должны быть профилирующими предметами, имхо.
А почему, объясните, если не трудно
Спасибо, очень интересно) Почаще бы такие разборы)
странно, после добавления ссылка не работает =(
Вот и у меня такая же фигня. Видимо сайт реферер проверяет или что-то подобное.
script режется. За это давно пора разработчикам Хабра руки в задницу засунуть
да просто на этот баг я в каждой третьей своей статье натыкаюсь. Дошел до того, что стал редиректы на своем сайте прописывать — только чтобы все с Хабра открывалось. Идиотизм
вот спасибо! Я уже несколько дней толковой информации о "display" найти немогу, а тут все сразу и понятным языком.
Имхо, http://www.w3.org/TR/REC-CSS2/visuren.html#propdef-display вполне сойдёт за толковую информацию о "display"

Вообще, пост классный, концепция в нём изложена доступно и понятно, но собственно он ни в коем случае не исключает чтения документации.
Спасибо, интересно и познавательно.
Исправте, пожалуйста: Беренс-Ли => Бернерс-Ли
Исправил. Могу только посыпать голову пеплом и сослаться на то, что писал урывками.
Несколько орфофиксов:
Mircosoft → Microsoft
де-юроде-юре
«Например» — вводное слово, после него запятая...

А по содержанию замечаний нет, с некоторым удивлением узнал немало нового, спасибо большое :)
Спасибо. Сам являюсь ревнителем русского языка, не являясь, к сожалению, образцом для подражания. Но ведь мы учимся пока живем? :-)
hasLayout не единственная, хотя и самая известная, "фича" IE. Просто если рассмотреть избирательную работоспособность псевдоклассов и примеры из статьи о "баге" FF, то лично у меня возникают именно такие представления, о которых я написал выше.
Честно говоря, общение с Могилевским на последнем РИТе сильно изменило моё отношение к IE. Правда большей частью это касается 8-й версии. Которую я сейчас, кстати, активно использую при отладке.
Поделитесь плз в двух словах чем он заставил вас это сделать :) Очень интересно.
харизмой, очевидно. Имхо, самая очаровательная улыбка на РИТе была именно у него :)
Да, харизма сыграла не последнюю роль :-) В двух словах трудно рассказать, просто я стал по-другому смотреть на разработчиков и их мотивы сделать именно так, а не иначе. Как и многие, я подвержен инерции мышления и мышлению стереотипами. После РИТа я посмотрел на IE 8, можно сказать, посвежевшим взглядом и ко многому отнёсся без предрассудков.
спасибо за подробное объяснение сего феномена :)
Такие простые, но важные вещи, просто необходимы в любой книге по HTML. А, чаще всего, такой информации там и нет.
Может, кто-то меня сочтёт занудой. Но теги p, hr и style вообще ничего не могут содержать, а тем более, о них ничего не говорится в DTD. Другое дело, что, к примеру, между открывающим и необязательным закрывающим тегами <p> и </p> находится содержимое элемента p, про который и говорится в DTD. Часто встречаюсь с подобной неточностью, в т.ч. и на Хабре.
В заметке есть ссылка на DTD, не поленитесь, откройте и посмотрите. Все эти теги там перечислены, и указано что они могут содержать. Вот про P:
<!--=================== Paragraphs =======================================-->

<!ELEMENT P - O (%inline;)* — paragraph -->
<!ATTLIST P
%attrs; — %coreattrs, %i18n, %events --
>
Ну вот, в DTD так и написано - ELEMENT. Везде, когда говорят о HTML и XML (особенно, это касается документации w3c) говорят об элементах, а теги - это лишь способ записи этих элементов в линейной форме. Например, можно воспользоваться DOM и создать элемент p без использования каких-либо тегов.
А, вы в этом смысле :-) Тогда согласен. Просто в контексте HTML (DOM - это ведь не HTML), понятия "элемент" и "тег" взаимозаменяемыми.
Извиняюсь: понятия "элемент" и "тег" считаю взаимозаменяемыми.
Напоролся на такое первый раз, когда в коде неожиданно появились <input type="hidden">, удивился.
Имхо, для таких элементов стоит ввести особые правила, поскольку они не рассчитаны на визуальное отображение.

И это правильно назвали багом.
имхо, нефиг пользоваться объявлениями вида *{лалалала;}
В принципе да, ведь заменой очень часто используемого начала css-разметки * { margin: 0; padding: 0; } можеть быть лишение всех используемых блочных элементов margin'а и padding'а:
body, div, td, ul, ol, li, dl, dt, dd, p, h1, h2, h3, h4, h5, h6 { margin: 0; padding: 0; }

А * { display: block } — вообще странная идея.
я рад, что есть люди которые это понимают )
blockquote ещё забыли ;)
а разве вы не описываете все эти элементы в цсс для каждого конкретного сайта, в том числе и их отступы? :/
Нефиг или не нефиг — не суть важно. Важно то, что вывод содержимого элемента style — бессмыслица. Эти данные не предназначены для визуализирования.
вы излишне категоричны
ok, топик называется «Разница между разметкой и представлением». Вас, очевидно, совсем не смущает, что в содержимое (контент) при определённых условиях выводится представление (CSS). Вам проще мысленно сослаться на спецификацию и закрыть вопрос. Я её, кстати, тоже читал, да и не раз.
А вас не смущает, что CSS, внедрённое в документ, является такой же полноправной его частью, как, скажем параграф? В общем, я Вам ниже ответил.
Вы в принципе способны различать контентную часть документа и служебную информацию?
Конечно. Только не забывайте, что критерии определения могут быть разными. Какие используете Вы?
Предполагаю, что Вы ответе "здравый смысл". Это, конечно, очень хорошо, но есть одна беда. До тех пор пока не будет изобретён искуственный интеллект, программы не смогут использовать этото критерий. Так что надо выбрать иной.
Я бы адекватно воспринял такое поведение браузеров если бы мы имели дело с XML документом.

Хотя с другой стороны будь я разработчиком браузера я бы сделал именно так как в FF, а и в правду, зачем придумывать велосипед если уже есть средство управления визуалом — CSS3. Тогда поведение FF вполне правильное.
Наверняка способен. Как и я. И я вам скажу что CSS будет являться "служебной информацией"(что за дурацкий термин?) только в случае подключения его через link. Да отображение внешнего файла css было бы багом. Информация CDATA такая же часть документа.. В общем вам все уже объяснили да.
Товарищ Россомахин ниже очень здраво и точно выразился.
СТатейка офигенная!!!
СТиль изложения просто блеск!!!
Интересно, но на практике отступы обычно обнуляем всё-таки перечислением элементов, а не *{}
Mekras, вы считаете разумным визуализирование браузером содержимого элемента style? Ответьте, пожалуйста, исходя из того, кому и зачем это могло бы понадобиться.
для какого-нибудь проекта в духе zen garden можно по клику жаваскриптом выводить код примера.

но дело даже не в этом. в файрфоксе можно наглядно увидеть к какому элементу какие стили применены, т.е есть одна базовая логика, что гораздо лучше ваших догадок о смысленности или бессмысленности.
О чём вы вообще? При чём здесь Zen Garden, JavaScript и Firefox?

Mekras написал сей чудный пост в ответ на мой, фактически затрагивающий тот факт, что FF при определённых условиях выводит на страницу содержимое элемента style — т.е. те данные, которые не должны быть визуализированы, поскольку это не контент, а служебная информация! И началось! Всяк теперь норовит козырнуть своим знанием спецификаций и логики работы браузеров.

Эй, там, на палубе! Где же ваше незамутнённое мышление, лишённое инерции? На страницу выводится CSS, а вам и ладно, ибо спецификация, ибо W3C.
Я писал выше, но напишу ещё раз подробнее. Собственно всё просто. Вы оперируете собственным представлением о том, что информация, а что метаинформация. Проблема в том, что Ваше представление не совпадает с заложенным в основу HTML: метаинформация - это теги, всё прочее - информация. Соответственно CSS вставленный вне границ тега style является информацией и, соответственно, может быть отображён. CSS подключённый через атрибут тега style - метаинформация и не будет отображён ни при каких условиях.
Примечание про "вне границ тега": <style этот текст в границах тега>этот текст вне границ тега</style>
Да что вы такое рассказываете?

http://www.w3.org/TR/html4/present/style…

User agents that don't support style sheets, or don't support the specific style sheet language used by a STYLE element, must hide the contents of the STYLE element. It is an error to render the content as part of the document's text.
Давайте я вкратце переведу и выделю другой кусочек?

Пользовательские агенты, не поддерживающие CSS, должны скрывать содержимое элемента STYLE. Является ошибкой отображать его содержимое как часть текста документа.

Никакого противоречия здесь нет. Речь идёт о браузерах, не поддерживающих CSS.
Хорошо, что скажете на это? http://www.w3.org/TR/html4/types.html#h-…

Style sheet data (%StyleSheet; in the DTD) can be the content of the STYLE element and the value of the style attribute. User agents must not evaluate style data as HTML markup.


И по поводу текста в границах тега: у элемента style тип — text/css, то есть содержимое данного тега не является text/html и оно не должно подвергаться рендерингу со стороны UA.
Давайте я и это переведу :-)

Информация в листах стилей (обазначаемая в DTD как %StyleSheet;) может быть содержимым элемента STYLE и значением атрибута style. Пользовательские агенты не должны рассматривать эту информацию как разметку HTML.

Ещё раз подчеркну - как разметку!
Теперь о типе содержимого. Вы сами приводите фрагмент, где указано, что стили имеют тип %StyleSheet. Смотрим в DTD:
ENTITY % StyleSheet "CDATA" — style sheet data
Вот здесь описано что ПА должен делать с CDATA: http://www.w3.org/TR/html401/types.html#…
Особое внимание обращаю на предпоследний абзац:

Although the STYLE and SCRIPT elements use CDATA for their data model, for these elements, CDATA must be handled differently by user agents. Markup and entities must be treated as raw text and passed to the application as is.

Что я вольно перевожу как

Так же CDATA используют в своей модели данных STYLE и SCRIPT. Для этих элементов CDATA должен интерпретироваться иначе. Разметка и сущности должны рассматриваться как простой текст и передаваться приложению как есть.

Вот и все различия.
Это лишь говорит о том, что UA не должны искать вложенные сущности в элементах style и script, а не о том, что это содержимое может быть передано рендереру UA.

Ещё раз: из-за различий в типах содержимого, данные элементы, в отличие от других элементов, обрабатываются UA различным образом (не передаются парсеру HTML, а, допустим, парсеру JavaScript/CSS), поэтому их содержимое не является HTML, следовательно, оно не может отображаться браузером как часть HTML-документа.
Картинки и Flash тоже не являются HTML, тем не менее вполне себе отображаются браузерами.

Да о чём мы, собственно, спорим? Есть правила отображения документов - HTML, CSS и прочие. Да, скорее всего они не идеальны. Но они дают нам с Вами как минимум одну крайне важную вещь - предсказуемость. Т.е. основываясь на этих правилах мы можем надеяться, что наш документ будет отображён так, как мы этого хотим.
Что происходит, когда браузеры начинают придумывать свои правила, думаю, Вам объяснять не надо. Как по-вашему, это правильный путь?

Я считаю что нет. Если логично что содержимое style не должно отображаться ни при каких условиях, то надо менять спецификацию, а не вводить в каждый браузер собственный дополнительный набор правил. Вы не согласны?
Картинки и Flash не являются HTML, это правильно. Поэтому они и не обрабатываются HTML-парсером, что также правильно. CSS и JavaScript тоже не обрабатываются HTML-парсером, потому что тоже не являются HTML, поэтому смешивать их с HTML нельзя.

Спецификацию менять не надо. Содержимое элемента style отображается браузерами по другому, потому что у него совсем другой тип, то есть он не является HTML. Он не может быть отображён как HTML.

Поэтому я с вами категорически не согласен.
Забавно. В первых двух абзацах Вы со мной полностю соглашаетесь, а в последнем заявляете что не согласны. Это как? :-)
Речь, прежде всего, идёт о том, показывать или нет. И в этом моё мнение и строка It is an error… имеют общую основу.

Написал письмо Берту Босу. Посмотрим, что он ответит.
Извиняюсь, но эта строка написана в другом контексте и была Вами просто притянута за уши к Вашему мнению.

Было бы интересно увидеть не только ответ, но и сам вопрос.
Извиняюсь, но эта строка написана в другом контексте и была Вами просто притянута за уши к Вашему мнению.

Это лишь Ваша точка зрения. Я её не разделяю.

Было бы интересно увидеть не только ответ, но и сам вопрос.

Is it good when modern web browsers sometimes displays content of STYLE element as part of the document's text?

For example:
http://pavelgorlov.ru/ff3-bug.html
Примерно это я и имел ввиду, когда хотел посмотреть на вопрос. На вопрос, заданный в такой форме я бы ответил "Нет, это плохо". Это плохо, но это правильно. Что делать в такой ситуации, я писал здесь.

Максим, можно задать вопрос вне контекста данного спора? Как Вы считате, это хорошо когда все браузеры следуют общему стандарту отображения документов?
Бос, как и всегда, ответил оперативно:

Hello Maksim,

> Is it good when modern web browsers sometimes displays content of
> STYLE element as part of the document's text?

Yes, if you tell them so... :-)

Your style rule says that *all* elements are to be displayed as blocks.
The element is also an element, and thus it is displayed as a block.

Your rule overrides the default rule for HTML:

head {display: none}


С Босом спорить не буду. Ему виднее. Let it be.
Кстати, этот баг является багом конкретно CSS-парсера, потому что если «отрубить» CSS-парсер сменой MIME-типа декларации элемента style, то ошибка пропадает.

Уже можно писать багрепорт в Mozilla.
Напишите, посмотрим, что ответят :-)

Но прежде чем писать, ещё немного подумайте. Ведь сменой MIME-типа Вы не "отрубаете парсер", а заставляете барузер не рассматривать содержимое элемента style как CSS. Однако стили ПА никуда не делись и по-прежнему будут применены к документу.
Кстати, там же, но ниже: http://www.w3.org/TR/html4/present/style…

This example illustrates for CSS how to comment out the content of STYLE elements to ensure that older, non-conforming user agents will not render them as text.

<STYLE type="text/css">
<!--
H1 { color: red }
P { color: blue}
-->
</STYLE>

Речь идёт о браузерах, не знающих тега STYLE и, соответственно, не знающих как отображать его содержимое.
Между прочим, эта часть спецификации (вернее даже необходимость её написания) показывает что по умолчанию содержимое тегов должно отображаться, вне зависимости от того где они находятся.
Эта часть спецификации является частью, отвечающей за обратную совместимость, а это ещё не значит, что UA должен рендерить содержимое всех тегов. Каждый видит то, что хочет видеть в спецификации.
Согласен, слово "должно", я написал сгоряча. Скажем иначе, "предполагается что содержимое тегов по умолчанию отображается".
Содержимое элементов по умолчанию отображается браузерами, которые не «знают» о том, как нужно управлять содержимым элемента с указанным MIME-типом. Выдавать «text/css» за «text/html» — вот это ошибка.
Смотрите выше. За "text/html" никто и не выдаёт, выдают за "text/plain" как и написано в спецификации.
Вот опять же противоречие: «text/plain», как ни крути, не является синонимом «text/html».
А я разве такое утверждал? Где?
Покажи те мне понятие "служебная инфомрация" в применении к css в спецификации. И не болтайте языком.
Собственно выше Mekras указа что является в спеке HTML метаинформацией. =) Об этом и я говорил..
А вы кто такой, чтобы указывать мне как и в каких терминах вести спор? Да ещё и так безграмотно.
Маким. Простите меня за мою не сдержанность. Дело в том что для хабра достаточно специфично утверждение того факта что поведение согласованное со спецификациями - самое логичное и полезное для разработки. Вы же по факту в комментариях к этому треду утверждали обратное. Ниже Mekras написал даже где конкретно вы это утверждали. За несдержанность опять же простите. Суббота, расслабленное состояние и отсутствие желания описывать свою позицию подробно влияет на стиль. =)
Где я утверждал обратное? Не надо приписывать мне то, чего я не делал. Разработчики браузеров обязаны максимально полно и точно учитывать требования стандартизующих организаций (не только W3C), однако и CSS-кода в видимом тексте быть не должно.
Я внимательно читал комментарии. И Ваши в том числе. И Ваше утвержденгие мне вполне понятно. Я ссылаться на спецификации пожалуй не буду выше ссылки эти были. Попробую исходить из того же здравого смысла. Есть ли в спецификациях утверждение того что данные типа text/css не будут отображаться UA ни в коем случае? Насколько я знаю - нет. Может ли по спецификациям данные в CDATA отображаться UA? Может. Если мы выставим элементу с CDATA внутри стиль disaply: block. Должен ли UA показывать эти данные?
а чего вы так возбудились?
Браузер не должен быть "разумным" (тогда он становится IE) - браузер должен четко следовать правилам, описанным в соответствующих спецификациях, даже если они носят рекомендательный характер. И если этим же правилам начнут следовать и HTML-технологи, то всем будет красиво и замечательно.
Максим, я, кажется понимаю, почему расходятся наши мнения. Похоже что Вы и разработчики IE размышляете одинаково. Вы пытаетесь добавить в схему "DTD + Документ + Стили" ещё одну составляющую. Условно назовём её "Предполагаемое использование элемента". Я не буду рассуждать о том, хорошо это, плохо, правильно или нет. Просто это уже не HTML.
Если браузер добавляет в свою схему работы эту составляющую, то его поведение становится НЕПРЕДСКАЗУЕМЫМ. Что мы и имеем в случае IE. Это поведение времён браузерного беспредела, породившего HTML 3.2 (отчасти) и многие сегодняшние проблемы с совместимостью.
Разработчики браузеров обязаны максимально полно и точно учитывать требования стандартизующих организаций (не только W3C), однако и CSS-кода в видимом тексте быть не должно. И не надо мешать в одну кучу меня и разработчиков IE.

однако и CSS-кода в видимом тексте быть не должно.

В каких "требованиях стандартизующих организаций" это написано? :-)
Простите, а вот то, что сейчас в левом верхнем углу экрана у вас написано "Разница между разметкой и представлением / Web-разработка / Блоги / Хабрахабр" — это не "предполагаемое использование" тэга title? То, что содержимое тега style отвечает за представление — это не предполагаемое использование style?
В чём разница между этим утверждённым использованием и утверждённым (в имеющейся реальности неутверждённым, но если бы) не-выводом содержимого этих тегов в теле страницы?

Если применение title, style и прочего прописано в DTD, эта "ещё одна составляющая" о которой вы говорите — DTD как раз. Если не в DTD — то "ещё одна" уже существует.
«…в Интернет…»

«Теги … в описаны одинаково…»

:)
Про теги поправил, а с Интернет никакой ошибки нет, можно писать и "в Интернет" и "в Интернете".
Если по-русски писать, то, конечно же, склоняя и с маленькой. :)
(Это не имя собственное.)
Вообще-то как раз имя собственное. Это название сети. :-)
Вы, наверное, не осознаёте, когда это было и сколько времени уже прошло. Вам это Word внушил.
Осознаю. Просто я наверно чуток постарше и для меня это время немного ближе. Это вопрос привычки. Я точно так же не могу себя заставить привыкнуть к комбинациям Ctrl+C - Ctrl+V. Привык я со времён Borland-овских редакторов под DOS к Ctrl+Ins - Shift+Ins. К счастью я почти не застал времена Ctrl+K,K и Ctrl+K,B :-)
Тем не менее, это по-прежнему имя собственное. Вам когда-нибудь встречалось в серьезных текстах в английском варианте это слово с маленькой буквы - internet? Мне лично нет. Однако, производные от него слова (интернет-реклама, интернет-маркетинг и т. п.) уже пишутся с маленькой буквы.
ксерокс, памперс, телефон, интернет
Но когда речь идёт о компании Ксерокс или торговой марке Pampers, то пишется всё же с большой. Вопрос в том, что подразумевает автор - вещь или явление.
UFO just landed and posted this here
Удивительно, я знала всё, что вы написали, но мне в голову не пришло, что содержимое тегов, предназначенных для конкретных целей, скрывается через дисплейнан! По-моему, это несколько абсурдно, ведь, например, если вывод содержимого title куданада делается явно не через стили:), то зачем через стили прописывать очевидный не-вывод его в тело страницы?

Короче, надо идти читать стили по умолчанию, тогда много вопросов по достижению кроссбраузерности отпадёт. Только вот где прячет свои css какой-нибудь ie6? -___-
UFO just landed and posted this here
UFO just landed and posted this here
Статья — шик! Оргазм прям :)
Спасибо
автор изрёк всё верно. многие до сих пор мешают и стили и код в доно кровавое месиво.
и вообще практически для этого и был придумал ресет.ксс, где путём обновления всего и вся, можно задать стили именно так как нужно конкретно в данной ситуации
UFO just landed and posted this here
считаю что всё верно.

есть DTD, есть стили по-умолчанию, с ними css не отображается :)
Если мы пишем * {display: block} то и должно происходить ко всем элементам.
Это правило!

Мы опираемся на эти правила, верстая.
Есть только один браузер, который ещё и "думает". И потом появляются вещи типа: * html или _height: - а что, ну ошибся человек, ну так пусть браузер догадается!

Нет.
Всё должно быть предсказуемо.

Вы используете элемент html в css?
Цвет фона задать, размер шрифта?
Почему же вы не можете использовать <head>?

А если нужно чтоб strong был курсивом, а em - жирным?
Разработчик написал правило - и оно сработало!

Мы ж не говорим что стили типа br {display: none} - глупость?
Для какой-то задачи это может быть нужно... да и смысл в споре? Есть спецификация, есть правильное логичное поведение, по дефолту стили невизуальны, что ещё надо)

ЗЫ: автору респект.

ЗЫ: input["hidden"] - тоже сталкивался с таким, поначалу дико было, а ведь с другой стороны - это всё такое... у нас есть элемент, есть его первоначальные стили отображения, а мы для своих задач можем (к счастью) писать что нам нужно.

Надо радоваться!
UFO just landed and posted this here
у него просто есть ещё один, непредусмотренный стадартом элемент, содержащий html, вот в 6-ке и срабатывает.
в 7-ке star hack исправили, а элемент остался (от движка не убежишь :) и работают новые чудесные вещи типа * + html
они фиксили чисто по списку похоже))
но 7-ка тем не менее - на редкость удачный браузер, кол-во доп. стилей для него, у меня непревышает одного-трёх.
UFO just landed and posted this here
Sign up to leave a comment.

Articles