IE отрисовывает перевод строки в коде? @ DeForum.ru
DeДверь  
Логин:  
Пароль:  
  Автологин  
   
Разместить рекламу
Письмо админу
Правила | FAQ | *Поиск | Наша команда | Регистрация | Вход
 
 
 Страница 1 из 1 [ Сообщений: 33 ] 
*   Список форумов / Начинка и техника / Программирование для WWW » ответить » создать топик « | »
Автор Сообщение
Dimalish Муж.
Модератор
35
Сообщения: 3521
Зарегистрирован: 30.06.01
Откуда: Нижний Новгород
Заголовок сообщения: IE отрисовывает перевод строки в коде?
Сообщение Добавлено: 27 Февраль 2006, 11:10:38 
Столкнулся тут по неопытности с таким закидоном:

Есть такой код:

<div style="width: 88px; height: 31px; background-color: gray;"><img src="ченить" width="88" height="31"></div>

работает, как ожидается.

А вот так если написать (просто добавить переводы строки для удобочитаемости):

<div style="width: 88px; height: 31px; background-color: gray;">
<img src="ченить" width="88" height="31">
</div>

В IE снизу выползает несколько пикселей background-color, т.е. он эти переводы строки отрисовывает и растягивает div по высоте на несколько пикселей.

Это известная фича, или IE просто не понимает маковского кода перевода строки (0d)?
Crazy Муж.
Модератор
107
Сообщения: 14561
Зарегистрирован: 23.12.01
Откуда: Moscow
Сообщение Добавлено: 27 Февраль 2006, 11:21:47 
Вообще-то, это ПРАВИЛЬНОЕ поведение.
Dimalish Муж.
Модератор
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 это как-то регулируют?


Последний раз редактировалось Dimalish 27 Февраль 2006, 13:03:58, всего редактировалось 1 раз.
Mn3m0NiC Муж.
новый человек
6
Сообщения: 286
Зарегистрирован: 03.01.05
Сообщение Добавлено: 27 Февраль 2006, 12:41:49 
Тоже такое было выхода не нашел приходится писать одной строкой иногда

_________________
[Mn3m0NiC] - Assisting memory , from the Greek, mnEmOn, or mindful.
My work is a game, a very serious game. — MAURITS CORNELIS ESCHER
Kurilshik
Goldmember
142
Сообщения: 12797
Зарегистрирован: 18.10.04
Откуда: Кожаное кресло
Сообщение Добавлено: 27 Февраль 2006, 13:30:11 
Dimalish, да есть такое

_________________

Портфолио - ЖЖ - Кулинарные рецепты - Блог о дизайне, уроки фотошоп

icq: 295346452 | Почта: info()alexey-popov.com

.
Abstract Муж.
постоянный участник
37
Сообщения: 3900
Зарегистрирован: 25.10.05
Откуда: Ближнее зарубежье
Сообщение Добавлено: 27 Февраль 2006, 15:39:28 
Dimalish, на самом деле это более чем известно и, вообще говоря, это действительно одно из немногих ПРАВИЛЬНЫХ поведений ИЕ и, конечно же, мак тут ни при чём. Правильно это как минимум (вот совсем базово) потому, что логическая разметка не предназначена для визуализации.
Sir_Max Муж.
Собеседник
120
Сообщения: 2004
Зарегистрирован: 09.02.05
Откуда: столько хОрошего?
Сообщение Добавлено: 27 Февраль 2006, 16:29:57 
:eek: ух, нифига!!!Dimalish, спасибо буду знать, хотя я думаю что так не должно быть.от перестановки слагаемых сумма не должна меняться

_________________
Хороший дизайн это не тогда, когда нечего добавить, а тогда, когда нечего убрать©
.talisman Муж.
участник
84
Сообщения: 1562
Зарегистрирован: 13.01.05
Сообщение Добавлено: 27 Февраль 2006, 16:33:29 
хмм... а чем вас не устраивает подобное решение:
<img style="width: 88px; height: 31px; background-color: gray;" src="ченить" width="88" height="31">
.talisman Муж.
участник
84
Сообщения: 1562
Зарегистрирован: 13.01.05
Сообщение Добавлено: 27 Февраль 2006, 16:35:53 
естественно, это баг, так как любое количество пробелов, табуляций или переносов строк должно оцениваться как один пробел.

а лечится это просто — нужно указать фиксированный размер шрифта, например font-size:1px
.talisman Муж.
участник
84
Сообщения: 1562
Зарегистрирован: 13.01.05
Сообщение Добавлено: 27 Февраль 2006, 16:38:26 
причем не просто фиксированный, а достаточно маленький, чтобы блок не растягивал.
karamba Муж.
старожил
209
Сообщения: 6498
Зарегистрирован: 17.08.05
Откуда: Киев. А шо?
Сообщение Добавлено: 27 Февраль 2006, 16:53:39 
ну с таким же успехом можно использовать свойтсво line-height

_________________
клетчатый!
Seka
новый человек
9
Сообщения: 137
Зарегистрирован: 05.10.04
Сообщение Добавлено: 27 Февраль 2006, 17:07:09 
.talisman, почему же баг?? Ты ж сам говришь, что " любое количество пробелов, табуляций или переносов строк должно оцениваться как один пробел" - значит в нашем случае перенос строки расценивается как пробел перед картинкой. А раз она вширину занимет всё место, приходится искать место под этот пробел, раздвигая границы дива вертикально.

_________________
Love is the best think in the World!!!
Seka
новый человек
9
Сообщения: 137
Зарегистрирован: 05.10.04
Сообщение Добавлено: 27 Февраль 2006, 17:10:15 
А визульно код всё-равно можно сделать легко читаемым: подобные случаи достаточно редки; а переносить строку смело можно, например, между тегами </td> и <td>, где этот пробел просто не будет отрисовываться браузером, или просто между словами в тексте, где и так должен быть пробел.

_________________
Love is the best think in the World!!!
.talisman Муж.
участник
84
Сообщения: 1562
Зарегистрирован: 13.01.05
Сообщение Добавлено: 27 Февраль 2006, 17:21:08 
Seka, если вместо переносов поставить пробелы, то ничего не расползается.

исправлено: расползается :)


Последний раз редактировалось .talisman 1 Март 2006, 22:54:38, всего редактировалось 1 раз.
Crazy Муж.
Модератор
107
Сообщения: 14561
Зарегистрирован: 23.12.01
Откуда: Moscow
Сообщение Добавлено: 27 Февраль 2006, 17:28:32 

Dimalish писал(а):
Crazy, Что ж тут правильного? Это не правильно ни с какой точки зрения.



Так прописано в стандарте. Зачем и почему так сделали -- это не ко мне. :)
.talisman Муж.
участник
84
Сообщения: 1562
Зарегистрирован: 13.01.05
Сообщение Добавлено: 27 Февраль 2006, 17:39:29 
Crazy, стандарты — это не всегда правильно. иногда лучше воспользоваться логикой и здравым смыслом.
Dimalish Муж.
Модератор
35
Сообщения: 3521
Зарегистрирован: 30.06.01
Откуда: Нижний Новгород
Сообщение Добавлено: 27 Февраль 2006, 18:06:03 
Crazy, как именно прописано, ткни носом, пожалуйста.

В принципе, я уже чисто из эстетского любопытства. :о)

Тем более, что он (IE) ведь не добавляет новую строку (соответствующей высоты), а добавляет фикзнатчто размером в непонятные 3-4 пиксела.
.talisman Муж.
участник
84
Сообщения: 1562
Зарегистрирован: 13.01.05
Сообщение Добавлено: 27 Февраль 2006, 18:17:21 
Dimalish, если поманипулировать размером шрифта, можно добиться добавления и 1 пиксела, и 10, и 100.
tentoys Муж.
постоянный участник
121
Сообщения: 2940
Зарегистрирован: 06.08.02
Откуда: МКАДонутряк
Заголовок сообщения: Re: IE отрисовывает перевод строки в коде?
Сообщение Добавлено: 27 Февраль 2006, 21:52:10 

Dimalish писал(а):
Столкнулся тут по неопытности с таким закидоном:

Есть такой код:

<div style="width: 88px; height: 31px; background-color: gray;"><img src="ченить" width="88" height="31"></div>

работает, как ожидается.

А вот так если написать (просто добавить переводы строки для удобочитаемости)



Если не получается в одну строку, то тогда лучше переносить по тем местам, где пробелы, например:
Код:
<div style="width:
88px; height: 31px; background-color: gray;"><img
src="ченить" width="88" height="31">
</div>


Да и вобще, ширину и высоту картинки прописывать через стайл ;-)

_________________
Keep in touch. Andrey Alexeev.
Crazy Муж.
Модератор
107
Сообщения: 14561
Зарегистрирован: 23.12.01
Откуда: Moscow
Сообщение Добавлено: 27 Февраль 2006, 22:58:01 

.talisman писал(а):
стандарты — это не всегда правильно. иногда лучше воспользоваться логикой и здравым смыслом.



В бессмысленную полемику я вступать не буду.
.talisman Муж.
участник
84
Сообщения: 1562
Зарегистрирован: 13.01.05
Сообщение Добавлено: 28 Февраль 2006, 15:36:45 
Crazy, ок.
gregzem Муж.
новый человек
2
Сообщения: 252
Зарегистрирован: 29.04.03
Сообщение Добавлено: 1 Март 2006, 13:27:13 
Если учесть, что HTML (как один из представителей SGML) для браузера - поток данных, а в потоке никаких переводов строки нет и быть не может, то поведение эксплорера естественно неправильное. Пробел и перевод строки выступают в HTML только как разделители идентификаторов (исключение - контейнер <PRE> и <CODE>).

Кстати, наверняка никто сейчас не использует HTML страницы как таковые. Все генерят код на скриптах из шаблонов HTML. Так почему бы, например, не сделать перед выводом в поток браузера удаление CR и LF внутри <BODY> (исключая <PRE> и <CODE>) скриптом?
Crazy Муж.
Модератор
107
Сообщения: 14561
Зарегистрирован: 23.12.01
Откуда: Moscow
Сообщение Добавлено: 1 Март 2006, 15:09:20 

gregzem писал(а):
Если учесть, что HTML (как один из представителей SGML) для браузера - поток данных, а в потоке никаких переводов строки нет и быть не может, то поведение эксплорера естественно неправильное. Пробел и перевод строки выступают в HTML только как разделители идентификаторов (исключение - контейнер <PRE> и <CODE>).



Друг мой, вы определенно произносите что-то странное. Если для SGML переводы строк не значимы, то в PRE они в принципе не могли бы иметь специальной обработке.

Продолжайте учить матчасть.

P.S. Если желаете -- можете поискать в описании SGML фразу о незначимости переводов строк. Я ее там не видел -- но может быть, вам удастся найти.
gregzem Муж.
новый человек
2
Сообщения: 252
Зарегистрирован: 29.04.03
Сообщение Добавлено: 1 Март 2006, 17:48:08 

Crazy писал(а):
Друг мой,


Вы меня верно с кем-то путаете, маэстро.


Crazy писал(а):
вы определенно произносите что-то странное. Если для SGML переводы строк не значимы, то в PRE они в принципе не могли бы иметь специальной обработке.


Странно, что приходится это объяснять Вам. Но в HTML (XML, SGML) нет никаких строк. Есть поток данных, идущий в браузер и это его головная боль, как трактовать ту или иную последовательность.


Crazy писал(а):
P.S. Если желаете -- можете поискать в описании SGML фразу о незначимости переводов строк. Я ее там не видел -- но может быть, вам удастся найти.


Конечно не видели, я и говорю о том, что перевод строки не имеют никакого значения для производных SGML, так как это просто разделитель сущностей. А вот и выдержка:
http://xml.coverpages.org/sgmlsyn/sgmlsyn.htm#C6.2.1

Я Вам даже помогу с переводом:

Separator - "разделитель"
Entity - "сущность"

:gent:

В догонку, для тех, кто любит "потрещать ни о чем" http://www.citforum.ru/internet/html3.2ex/gl_12.shtml
Crazy Муж.
Модератор
107
Сообщения: 14561
Зарегистрирован: 23.12.01
Откуда: Moscow
Сообщение Добавлено: 1 Март 2006, 20:16:30 

gregzem писал(а):
Странно, что приходится это объяснять Вам. Но в HTML (XML, SGML) нет никаких строк.



В нашем деле важна внимательность (c)

В моем сообщении сказано не о наличии в SGML строк, а о символах перевода строк. Это CR и LF.


Цитата:
Конечно не видели, я и говорю о том, что перевод строки не имеют никакого значения для производных SGML, так как это просто разделитель сущностей.



Опять противоречие. "Никакого" и конкретное значение "разделитель сущностей" -- это вовсе не одно и то же. Не нужно пытаться играть словами, если не понимаете их семантики.


Цитата:
А вот и выдержка:
http://xml.coverpages.org/sgmlsyn/sgmlsyn.htm#C6.2.1



Твоя проблема, друг мой, в том, что мало найти через гугл цитату -- нужно еще и понять, что она означает. К сожалению, приведенный тобой текст имеет справочный характер -- для тех, кто знал, но забыл. Т.е. не твой случай.

Действительно, CR и LF могут рассматриваться как разделители. Однако они также входят в описание #PCDATA (да, на этой странице такой цитаты не было, поэтому ты не в курсе). Так что говорить о том, что CR (LF, пробел и т.п.) в SGML всегда являются разделителями -- значит публично декларировать непонимание контентной модели SGML.


Цитата:
В догонку, для тех, кто любит "потрещать ни о чем" http://www.citforum.ru/internet/html3.2ex/gl_12.shtml



Воистину, хорошее определение и хорошая ссылка. Ибо здесь сказано: "То есть любая последовательность пробелов, символов табуляции и пустых линий эквивалентна единственному пробелу в файле HTML."

Обращаю внимание: здесь вовсе не сказано об игнорировании пробелов или разделителей строк. Здесь сказано, что они при обработке редуцируются до одного.

Небольшим недостатком этого текста является то, что он невольно вводит неофитов в заблуждение: не SGML требует редуцировать все пробелы до одного, а семантика HTML допускает такое редуцирование в подавляющем большинстве тэгов. В тексте, разумеется, говорится только про HTML (видимо сбивает упоминание SGML по другому поводу абзацем ниже).

Причем в другом разделе этого же материала указано, что в HTML это правило имеет исключения. Т.е. автор понимает, что пишет.

Но в данном случае этот семантический нюанс для нас неважен. Отбросим твои попытки увести дискуссию в дебри теоретического обсуждения SGML и вспомним, с чего мы начали:


Цитата:
<div style="width: 88px; height: 31px; background-color: gray;"><img src="ченить" width="88" height="31"></div>

работает, как ожидается.

А вот так если написать (просто добавить переводы строки для удобочитаемости):

<div style="width: 88px; height: 31px; background-color: gray;">
<img src="ченить" width="88" height="31">
</div>

В IE снизу выползает несколько пикселей background-color



Итак, автор треда обратил внимание, что разделитель строк, будучи добавлен в div, не уничтожается (как это было бы сделано, к примеру, межде тэгами TR и TD, а обрабатывается и дает визуальный "фидбэк".

Откроем HTML DTD и посмотрим описание DIV:

Код:
<!ENTITY % inline "#PCDATA | %fontstyle; | %phrase; | %special; | %formctrl;">
<!ENTITY % flow "%block; | %inline;">
<!ELEMENT DIV - - (%flow;)* >


Итак, мы видим, что в контенте DIV однозначно заявлено #PCDATA. Это значит, что встречающиеся пробелы и разделители строк трактуются как обычные символы и не могут быть отброшены парсером.

Чтобы было понятнее -- возьмем для контраста пример с TR и TD:

Код:
<!ELEMENT TR       - O (TH|TD)+        -- table row -->


Т.е. внутри TR могут быть только тэги TH и TD и разделители (пробелы, разделители строк и т.п.)

Соответственно, если мы пишем перевод строки между TR и TD, то он трактуется как разделитель еще при парсинге и просто игнорируется.

Известно, что в IE с давних пор была удобная ошибка (багофича) -- игнорирование в ряде случаев переводов строк, если они находятся на границе тэга. Это действительно удобно для верстки. Хотя и нарушает стандарт.

В нашем случае -- пикселы появились только снизу -- мы видим, что IE сожрал пробельные символы после начала DIV (нарушение), но оставил их перед его окончанием (все корректно).

Но нам действительно хотелось бы другого поведения. Увы.
.talisman Муж.
участник
84
Сообщения: 1562
Зарегистрирован: 13.01.05
Сообщение Добавлено: 1 Март 2006, 20:43:18 

Цитата:
В нашем случае -- пикселы появились только снизу -- мы видим, что IE сожрал пробельные символы после начала DIV (нарушение), но оставил их перед его окончанием (все корректно).


если поставить фонт-сайз равным, скажем 100, то пустое место появится и сверху.
Crazy Муж.
Модератор
107
Сообщения: 14561
Зарегистрирован: 23.12.01
Откуда: Moscow
Сообщение Добавлено: 1 Март 2006, 21:11:39 
.talisman, may be.
TONIC XGM
старожил
8
Сообщения: 5708
Зарегистрирован: 20.05.05
Сообщение Добавлено: 1 Март 2006, 21:23:02 


Последний раз редактировалось TONIC XGM 26 Март 2008, 15:29:05, всего редактировалось 1 раз.
Crazy Муж.
Модератор
107
Сообщения: 14561
Зарегистрирован: 23.12.01
Откуда: Moscow
Сообщение Добавлено: 1 Март 2006, 21:29:18 
Я, грешен, иногда пишу так:

Код:
<div style="width: 88px; height: 31px; background-color: gray;"
  ><img src="ченить" width="88" height="31"
></div>


Согласен, извращение. Но привыкнуть легко. :)
tentoys Муж.
постоянный участник
121
Сообщения: 2940
Зарегистрирован: 06.08.02
Откуда: МКАДонутряк
Сообщение Добавлено: 1 Март 2006, 22:21:13 

Crazy писал(а):
Согласен, извращение. Но привыкнуть легко. :)


Именно в такой интерпретации -- ну, не извращение ;-) , но странновато. Хотя то, что привёл я, примерно то же самое, только чуть более читаемо. Это полезно, особенно, если достаточно длинные строки... и они часто повторяются/встречаются. :beer:

_________________
Keep in touch. Andrey Alexeev.
.talisman Муж.
участник
84
Сообщения: 1562
Зарегистрирован: 13.01.05
Сообщение Добавлено: 1 Март 2006, 22:46:32 
еще раз скажу, есть два варианта решения.

номер 1.
не используем обрамляющий блок, вполне можно обойтись без него:
Код:
<img src="ченить" style="display:block; width: 88px; height: 31px; background-color: gray; ">


номер 2.
указываем достаточно маленький фиксированный размер шрифта (font-size), либо высоту строки (line-height). Оптимальный размер можно определить опытным путём. Фиксированный, чтобы при увеличении не расползалось.
Код:
<div style="width: 88px; height: 31px; background-color: gray; font-size:3px; ">
   <img src="ченить" width="88" height="31">
</div>


чем это вас не устраивает? :)
Crazy Муж.
Модератор
107
Сообщения: 14561
Зарегистрирован: 23.12.01
Откуда: Moscow
Сообщение Добавлено: 1 Март 2006, 22:48:13 

tentoys писал(а):
Это полезно, особенно, если достаточно длинные строки... и они часто повторяются/встречаются. :beer:



Для JSP/PHP, увы, достаточно характерно... :insane:
Dimalish Муж.
Модератор
35
Сообщения: 3521
Зарегистрирован: 30.06.01
Откуда: Нижний Новгород
Сообщение Добавлено: 2 Март 2006, 08:19:48 
Crazy, большое спасибо, это именно то, что я надеялся узнать.

TONIC XGM, .talisman, то, что я привел - это не рабочий код, а иллюстрация вопроса. Никаких решений "проблемы" не требуется. Вопрос был исключительно эстетическо-познавательного свойства.
*   Список форумов / Начинка и техника / Программирование для WWW « | » » ответить » создать топик
 Страница 1 из 1 [ Сообщений: 33 ] 
Показать сообщения за:   Поле сортировки  
Найти:
Перейти:  
Уровень доступа: Вы не можете начинать темы. Вы не можете отвечать на сообщения. Вы не можете редактировать свои сообщения. Вы не можете удалять свои сообщения. Вы не можете добавлять вложения.
cron


ООО ДеФорум
При использовании материалов сайта ссылка на DeForum.ru — обязательна.
Проект Павла Батурина ©2001-2077; // Powered by phpBB © 2013 phpBB Group
Rambler's Top100