Ви використовуєте застарілий браузер. Цей та інші сайти можуть відображатися в ньому некоректно. Необхідно оновити браузер або спробувати використовувати https://www.google.com/chrome/
Внутри ячейки - div.block с {position: relative; height: 100%;}
Внутрь - div уже размещай div.block__image (картинка) и div.block__desc (текст). Их позиционируй куда хочешь.
У каждого .block задавай модификатор (multiple class) -num_XX - где XX - будет номер твоей ячейки, чтоб ты мог идентифицировать каждую из них.
#ID не используй.
<td> нельзя оборачивать ничем кроме <tr>, смотри спеку.
В FF у тебя будет баг с тем что вложенный div не растянется по высоте ячейки, добавишь js-костыль.
Это понятно, но напрямую не сказано что нельзя чем-то еще обернуть
После оборачивания дивом td все также остается "child of a tr", и таблица нормально рисуется.
Как оказалось, нормально рисуется только если не устанавливать позицию элемента.
Вот пара примеров совершенно неправильной таблички с td обернутым дивами - хотя уже когда писал понимал что такой вариант работать не будет (но результат все равно удивил).
⚠ Тільки зареєстровані користувачі бачать весь контент та не бачать рекламу.
Как и задумывалось, картинки и текст перекрываются. Текст вылазит из ячейки - но это мелочи.
⚠ Тільки зареєстровані користувачі бачать весь контент та не бачать рекламу.
Даже если установить координаты 0 пикселов right - элемент улетает из таблицы в правый край окна (если установить какое-то значение right, позиция осчитывается от правого края окна).
Аналогично если координаты установить bottom - элемент прыгает в нижнюю часть окна, и позиция осчитывается снизу.
Довольно любопытное поведение
Причем так себя ведут эти примеры в разных браузерах.
Это и есть - "сказано напрямую что нельзя". Валидатор вам подтвердит (выдаст ошибки).
То что блок с pos:abs улетает к краю страницы при указании left/right,top,bottom - абсолютно нормальное и ожидаемое поведение - у вас же наверняка нет выше блоков с pos:rel
То что блок с pos:abs улетает к краю страницы при указании left/right,top,bottom - абсолютно нормальное и ожидаемое поведение - у вас же наверняка нет выше блоков с pos:rel
Странно мне показалось то, элементы в которых не указывается позиционирование выводятся так, будто тега td нет, получается правильный див с позиционированием относительно родительского элемента.
Но если указать элементу position: right: 0px; этот элемент ведет себя так, будт родительского элемента нет вовсе.
Хотя я совсем чайник в html, возможно это действительно норма.
Да и неважно, я уже исправил свои ошибки.
Теперь дивы в ячейке таблицы правильно работают. Написал так:
Ошибок там было больше двадцати
Благодарю за информации о наличии такой хорошей штуки как валидатор.
Я думал что раз все работает в разных браузерах, то все ОК, оказалось что очень много ошибок допустил (помимо оборачивания td дивами).
Решил что буду регулярно пользоватся валидатором, думаю начинающему это очень важно.
Кажется более правильным получать элемент по getElementById
Мне нужно обращаться к каждой ячейке индивидуально, а это вроде правильнее делать именно через ID (а классы лучше если нужно определить стили для группы элементов)
К тому же getElementsByClassName не работает в Эксплорерах младше 9-го и там нужны костыли в виде вызова getElementsByTagName и поиска в его результатах, что при большом количестве ячеек (а их может быть под тысячу) будет сильно тормозить?
getElementById по тем же Эксплорерам (плюс старым Операм) может вернуть элемент с сооствествующим атрибутом "name" вместо ID, но я не собираюсь использовать атрибут name (его в HTML5 уже не поддерживают) - так что проблемы не будет?
Именовать ID планирую в виде X_Y где X и Y - переведенные в строки номер колонки и ряда таблицы.
При вызове элемента - создаю идентификатор ячейки тем же способом (массив для ID создавать посчитал ненужным).
Опять таки, возможно я как чайник чего-то не понимаю...
Использование class для идентификации элемента в Dom является глупостью. class служит для
⚠ Тільки зареєстровані користувачі бачать весь контент та не бачать рекламу.
целей. Для поиска конкретного элемента
⚠ Тільки зареєстровані користувачі бачать весь контент та не бачать рекламу.
id.
Интересно сколько классов Del предложит нагородить, для того чтобы отрисовать такую таблицу и как обращаться из javasript к конкретным ячейкам (например, к кнопке в левой колонке).
P.S. В массиве лучше хранить помимо id ячейки и сам reference к ячейке. Потому, как по нескольку раз искать одно и тоже не комильфо. То есть если reference пустой, то дергаешь getElementById, записываешь значение в ячейку своего массива, а дальше уже берешь именно это значение, а не getElementById.
В вёрстке (CSS) использование ID является плохой практикой:
1. Из-за высокой специфичности веса селектора (главное)
2. Из-за того что запрещено повторять элемент с тем же #ID на странице (тоже немаловажно)
Если вам нужно работать с ним в JS - то да, но с таким же успехом вы можете использовать уникальные классы и выбирать элемент по ним. Производительность будет практически одинаковая.
Мне нужно обращаться к каждой ячейке индивидуально, а это вроде правильнее делать именно через ID (а классы лучше если нужно определить стили для группы элементов)
К тому же getElementsByClassName не работает в Эксплорерах младше 9-го и там нужны костыли в виде вызова getElementsByTagName и поиска в его результатах, что при большом количестве ячеек (а их может быть под тысячу) будет сильно тормозить?
getElementById по тем же Эксплорерам (плюс старым Операм) может вернуть элемент с сооствествующим атрибутом "name" вместо ID, но я не собираюсь использовать атрибут name (его в HTML5 уже не поддерживают) - так что проблемы не будет?
Использование class для идентификации элемента в Dom является глупостью. class служит для других целей. Для поиска конкретного элемента нужно использовать id.
Интересно сколько классов Del предложит нагородить, для того чтобы отрисовать такую таблицу и как обращаться из javasript к конкретным ячейкам (например, к кнопке в левой колонке).
Столько же сколько и id. Большое кол-во id вас же не пугает? Почему должно пугать большое кол-во .class?
Для этой таблицы:
- для каждой ячейки нужно задать = класс идентифицирующий столбец и класс идентифициирующий уникальную ячейку.
- для кнопки задать свой класс + модификатор состояния + уникальный идентификатор кнопки.
В вёрстке (CSS) использование ID является плохой практикой:
1. Из-за высокой специфичности веса селектора (главное)
2. Из-за того что запрещено повторять элемент с тем же #ID на странице (тоже немаловажно)
Если вам нужно работать с ним в JS - то да, но с таким же успехом вы можете использовать уникальные классы и выбирать элемент по ним. Производительность будет практически одинаковая.
- для кнопки задать свой класс + модификатор состояния + уникальный идентификатор кнопки.
Если не подвязывается css - то можно использовать id, тем более он бывает необходим, например линковка label и input - классический пример необходимости id.
Но зачем использовать id для привязки к элементу? Что вам мешает обращаться везде через .class?
Ещё раз - кто вам запрещает создавать уникальные классы? А на счёт уникальности блоков - так в Яндексе тоже думали что их строка поиска и лого - уникальные в пределах страницы. Але сталося як не гадалося.
Если не подвязывается css - то можно использовать id, тем более он бывает необходим, например линковка label и input - классический пример необходимости id. Но что вам мешает обращаться веpmlt через .class?
Ещё раз - кто вам запрещает создавать уникальные классы? А на счёт уникальности блоков - так в Яндексе тоже думали что их строка поиска и лого - уникальные в пределах страницы. Але сталося як не гадалося.
Я не понимаю зачем нужно использовать class не по назначению, когда для этого есть id. Более того, есть id, который для этого и предназначен и за уникальностью, которого следит браузер и другие инструменты, если используются (у меня, например, IDE и фреймворк ругаются). Опять таки они работают как раз с id, но не class.
Это не холивар, а давно решенный факт. Вы же обсуждения div vs table 10-летней давности за холивары уже не считаете? (холиварить можно там есть есть _адекватный_ выбор, а не где все и так ясно). С 2008 года активно обсуждают, уже давно все кто в теме их не юзают. Для тех кто нет - все современные CSS-методологии запрещают, даже в CSSLint встроена проверка чтоб не писали фигни.
Причины использования .class я уже расписал выше, не вижу смысла повторяться. Про использование ID в js only тоже написал - юзайте если нравится, просто зачем создавать себе проблемы, когда их можно не создавать. Class - гораздо удобней, гибче и не имеет проблем возникающих с id - поэтому его и юзают.
Если вы используете id в CSS - вы стреляете себе в ногу.
Я с тача, пруфы тут неудобно постить. Неверите - загуглите или проверьте сами.
.S. В массиве лучше хранить помимо id ячейки и сам reference к ячейке. Потому, как по нескольку раз искать одно и тоже не комильфо. То есть если reference пустой, то дергаешь getElementById, записываешь значение в ячейку своего массива, а дальше уже берешь именно это значение, а не getElementById.
Я так понял, будет достаточно создать массив для reference?
Как мне кажется хранить в массиве ID уже смысла нет, обращаемся к элементу по reference.
CLASS VS ID
Продолжаю склонятся к использованию ID для обращения к ячейке таблицы.
Преимущества ID: 1. Если по какой-то причине будет создан неуникальный ID - валидатор выдаст ошибку (в случаев классов это норма и у меня будут серьезные проблемы на странице). 2. "Идеологическая правильность" - стили у всех ячеек одинаковы!
Уникальное название класса или ID не будет использовано для стилевого оформления. Я не собираюсь через JavaScript задавать стилевое оформление для конкретной ячейки или писать в стилях нечто в виде #id {font-color:#fff}
ID будет использоваться исключительно для создания новых элементов в ячейке таблицы (элементов с заранее определенным, неуникальным стилевым оформленим или картинок - опять таки повторяющихся). 3. Поиск по ID будет работать на порядок быстрее в Эксплорерах младше 9-го (в которых нет getElementsByClassName и нужны костыли)
Да, нужно хранить reference. Это называется lookup-таблица.
1. Вы их руками будете писать? Нет конечно, будете генерировать. Так с чего им быть неуникальными?
2. Уже писали - да, так можно, просто вы сами себя заранее загоняете в ограничения вызванным использованием id.
3. С чего вы так решили? Не будет.