@Dimon123
Новичок, разбираюсь в веб-программировании

Что представляет из себя пространство между данными объектами?

Привет.

Один вопрос мне не понятен. На примере будет понятно. Создаю блочный элемент заданного размера и накидываю в него другие элементы такого заданного размера, чтобы они вплотную были внутри родителя. Причем все padding и margin обнуляю, хочу, чтобы объекты были "впритирку". Получаю это то, что на рисунке 1.

Удаляю текстовые объекты-узлы DOM, которые браузер самовольно запихнул между моими дивами. Если их удалить, то дивы будут расположены "бок к боку", как на рисунке 2. Но остается зазор между верхней и нижней "строкой".

Вопросы:

1. Что это за зазор? Все лишние текстовые узлы я убрал. Как убрать этот зазор между "строками"?

2. Зачем браузер запихивает лишние текстовые узлы между моих узлов? Зачем-то же это придумали разработчики.
fac89d38f46a4c479724b8127595accb.jpg
  • Вопрос задан
  • 133 просмотра
Решения вопроса 2
serjikz
@serjikz
web-developer
line-height возможно нужно обнулить. А вообще в таких случаях надо не картинку давать а код, который можно щупать. К примеру на codepen
Ответ написан
@Dimon123 Автор вопроса
Новичок, разбираюсь в веб-программировании
На первую часть вопроса мне помогли ответить толковые ребята с тостера. На вторую часть вопроса, а именно
2. Зачем браузер запихивает лишние текстовые узлы между моих узлов? Зачем-то же это придумали разработчики. я отвечу сам.

Браузер расценивает любые символы (числа, буквы, пробел, перевод строки, табуляцию…), которые не лежат в элементе, как текстовый узел. В моем документе HTML ВСЕ ВЫВОДИТСЯ НА ЭКРАН (кроме служебных элементов), и, когда я ввожу символы какие-то ВНЕ служебных элементов, то браузер думает «Ага, он хочется, чтобы я их вывел. Стоп, но они же не внутри элемента, тогда выведу их, как обычный текстовый узел (у которого объектом-прототипом является объект-прототип Text)». Я раньше сталкивался с подобной ситуацией, но не понимал, почему так. Например, я пишу код:
…
<body>
	Привет
	<div>123</div>
…

Вот этот текст «Привет» как раз и запихнули в такой объект-узел текстовый. Поэтому «Привет» и вывелся на экран, хотя я думал «Почему он выводится, он же не в элементе?». Но помни, что текст-тексту рознь (про это написано в следующем курсе по JavaScript). У этого объекта-узла «Привет» объект-прототип Text. Если же я создаю джаваскриптом переменную-объект с использованием функции-конструктора String(), то у этого объекта объект–прототип (а значит, свойства и методы совсем другие) совсем другой – String{…}.
То есть, ВСЯ РАЗМЕТКА НЕСЛУЖЕБНОЙ ЧАСТИ МОЕГО ХТМЛ-ДОКУМЕНТА ВМЕСТЕ С СИМВОЛАМИ МЕЖДУ САМИМИ ЭЛЕМЕНТАМИ РАЗМЕТКИ (пробел, табуляция, перевод строки…) расценивается браузером как то, ЧТО Я ХОЧУ ВЫВЕСТИ НА ЭКРАН, преобразуется в объекты-узлы дерева DOM (подчеркиваю, что именно объекты-УЗЛЫ – они ВЫВОДЯТСЯ НА ЭКРАН, а не просто объекты дерева BOM) и ВПЛЕТАЮТСЯ в BOM. Я написал «вплетаются», так как создаются еще и промежуточные объекты-контейнеры («неузлы») – например, если пишу элемент <div id=”first”></div>, а в него кидаю еще два элемента <div></div>, то в BOM два СООТВЕТСТВУЮЩИХ объекта div будут лежать не на первом уровне вложенности, а на ВТОРОМ по отношению к первому объекту div – в «более упорядоченном» объекте-посреднике, на который ссылается свойствоdocument.getElementById(“first”).childNodes; . Плюс, стилевая часть содержимого моего хтмл-документа образует другое дерево – дерево CSSOM, которое также «вплетается» (вкладывается) в BOM. Это дерево объектов, которые НЕ ОТОБРАЖАЮТСЯ на экране (а помогают понять браузеру, как отобразить объекты-узлы DOM, которые отображаются на экране). Деревья DOM и CSSOM входят в общее дерево BOM.
Когда я пишу разметку, то для ЧИТАБЕЛЬНОСТИ я ее форматирую – делаю табуляцию, пробелы могу поставить и переводы строк МЕЖДУ ЭЛЕМЕНТАМИ. Эти табуляции, пробелы и переводы строк браузер и перегоняет в текстовые узлы DOM. Например, если я напишу такой код:
<!DOCTYPE HTML><html><head><style>.qq{width:100px;height:100px;border:1px solid black;}</style></head><body><div class="qq" id="first">1</div><div class="qq" id="second">2</div></body></html>

То есть, код БЕЗ ТАБУЛЯЦИЙ И ПЕРЕВОДОВ СТРОК, то эти загадочные текстовые объекты-узлы дерева DOM ИСЧЕЗНУТ (если взять, например, и посмотреть «более упорядоченный» объект-список объектов-узлов-детей объекта-узла body из кода выше, то там будет только два объекта div, а текстовых объектов-узлов уже не будет). Но такой код нечитабельный совсем, поэтому надо их либо удалять, либо задавать им font-size:0px. Плюс, еще надо помнить, что, если у меня объект-узел является inline-block, то он подчиняется ЗАКОНАМ СТРОК – этот объект рассматривается, КАК БУКВА. Например, у него появляется верхний отступ межстрочный, и, чтобы его убрать, надо написать line-height:0px.
Ответ написан
Пригласить эксперта
Ответы на вопрос 4
@iFlashka
Не должно быть таких проблем
Видимо у вас со стилями что то не так
Ответ написан
alsopub
@alsopub
Если у "квадратов" нет float, то, подозреваю, у вас есть переводы строк, которые и создают "пробелы".
Ответ написан
Alexey_Suprun
@Alexey_Suprun
Web Developer Blog - ссылка в описании
Попробуйте отдельно решить проблему, создайте новый файл и посредствам reset.css обнулите все и еще раз попробуйте написать данный код. Должно сработать, удачи!
Ответ написан
@chanton91
Текстовые узлы между блоками применяются в технике justify выравнивания inline-block элементов, потому что text-align: justify растягивает пробелы между словами или же, между inline или inline-block элементами.

При использовании float у блоков, этой проблемы не будет. Если же, вам не нужно использовать float, то придется обнулять font-size и line-height в обертке этих блоков, а внутри блоков возвращать к нужным значениям.

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

Войдите, чтобы написать ответ

Похожие вопросы