Css одинаковая ширина колонок таблицы

Особенности таблиц

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

Ширина таблицы

Ширина таблицы, если она явно не указана, устанавливается браузером автоматически исходя из содержимого ячеек. Когда таблица применяется для создания опорной сетки на странице, такой подход нежелателен, поскольку зависит от переменных данных. Поэтому ширину таблицы указывают всегда — в процентах, если используется «резиновый» макет или в пикселах для макета фиксированной ширины.

Ширина ячеек

Ширина ячеек определяется атрибутом width тега

, причем устанавливать это значение требуется в том случае, если ширина ячейки должна быть задана.

Рассмотрим на примере тот случай, когда размер ячеек нужно указать. Предположим, что нам требуется создать на веб-странице две колонки, одна из них должна иметь размер 200 пикселов, а вторая занимать оставшееся место. Создаем таблицу с двумя ячейками и для левой ячейки задаем параметр width=»200″ (пример 1). Единицы измерения ставить не нужно, браузер сам понимает, что если задано число, значит, используются пикселы.

Пример 1. Ширина ячеек

Поскольку в данном примере ширина таблицы указана как 100%, таблица будет занимать всю свободную ширину окна браузера. При этом левая колонка берет под себя 200 пикселов, а правая — оставшееся свободное место.

Ширина ячейки иной раз может меняться, несмотря на то, что указана жестко. Это происходит, например, в том случае, если в ячейку добавили рисунок, размер которого превышает ширину ячейки. Чтобы вместить изображение, ячейка будет вынуждена раздаться. Также может повлиять на размер ячейки ее текстовое содержимое, которое содержит очень длинное слово.

Чтобы избежать указанной ситуации применяют несколько средств.

  • Не добавляют в ячейку фиксированной ширины те изображения, размер которых превышает ширину ячейки. Способ, конечно, звучит банально, тем не менее, зная особенности ячеек, можно избежать неприятностей с их отображением.
  • Для тега
    используют стилевое свойство table-layout со значением fixed . Применение этого свойства позволяет обрезать рисунок, если он не помещается целиком в ячейку (пример 2).

    Пример 2. Свойство table-layout

    Результат данного примера показан на рис. 1.

    Рис. 1. Отображение рисунка при использовании свойства table-layout

    Современные браузеры (Firefox 3+, Internet Explorer 8+, Chrome и Safari) несколько иначе показывают таблицу (рис. 2).

    Рис. 2. Отображение рисунка в браузере Safari

      Воспользоваться стилевым свойством overflow со значением scroll . Это свойство добавляет полосы прокрутки к содержимому, но из-за того, что он применяется к блочным элементам им нельзя воспользоваться для тега

    . Поэтому приходится вкладывать внутрь ячейки тег

    Пример 3. Полосы прокрутки в ячейках

    Результат данного примера показан на рис. 3.

    Рис. 3. Отображение рисунка при использовании свойства overflow

    Содержимое ячеек

    Браузеры иначе отображают ячейку, внутри которой ничего нет. «Ничего» в данном случае означает, что внутрь ячейки не добавили ни рисунок, ни текст, причем пробел в расчет не принимается. Естественно, вид ячеек различается только в том случае, если вокруг них установлена граница. При использовании невидимой рамки, вид ячеек, независимо от того, есть в них что-нибудь или нет, совпадает.

    Старые браузеры не отображали цвет фона пустых ячеек вида , поэтому в том случае, когда требовалось оставить ячейку без содержимого, но отобразить цвет фона, внутрь ячейки добавляли неразделяемый пробел ( ). Пробел не всегда подходит, особенно когда нужно установить высоту ячейки 1–2 пиксела, из-за чего широкое распространение получил прозрачный рисунок размером в один пиксел. Действительно, такой рисунок можно масштабировать на свое усмотрение, но он на веб-странице никак не отображается.

    К счастью эпоха однопиксельных рисунков и всяческих распорок на их основе прошла. Браузеры достаточно корректно работают с таблицами и без присутствия содержимого ячеек.

    Объединение ячеек

    Предположим, что нам потребовалось использовать объединение некоторых ячеек в таблице, как, например, показано ниже. Причем высота оранжевой и серой ячейки жестко задана и равна 30 пикселам.

    Ячейка 1 Ячейка 2
    Ячейка 3
    Ячейка 4

    Для наглядности код этой таблицы приведен в примере 4.

    Пример 4. Таблица с объединенными ячейками

    Хотя высота оранжевой ячейки вроде как указана фиксированной, она может произвольно меняться в зависимости от объема информации в других ячейках. Подобная неприятность замечена в некоторых браузерах.

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

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

    Скорость загрузки таблицы

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

    Исходя из этого факта, таблицы не используют для хранения большой информации (от 100 кБ). А чтобы ускорить загрузку табличного макета, его разбивают на отдельные таблицы или используют свойство table-layout , применение которого позволяет несколько повысить скорость отображения содержимого таблицы.

    Источник

    Одинаковая ширина ячеек таблицы

    Всем привет.
    Создаю таблицу через div-ы с использованием display: table и трёх таблиц display: table-cell

    Центральному div-у прописываю width:800px;
    А левому и правому ширину не прописываю.

    ВОПРОС: как сделать так, чтобы левый и правый div были равными, когда играешься с различной шириной браузера?
    Дело в том что у меня в первом диве почти нет никакой информации, а в третьем диве её полно. поэтому браузер сам решает дать правому диву больше ширину чем левому (
    Как сделать чтобы браузер давал одинаковое количество ширины крайним дивам, в независимости от того, сколько текста и информации в этих дивах?

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

    Динамическая таблица. Ширина ячеек таблицы?
    Привет форумчане. Сразу говорю, что я в HTML ноль, но нужна помощь. В инете нашел следующий код.

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

    Одинаковая ширина flex-элементов
    Доброго времени. Верстаю пока float’ами, решила изучить flex’ы. .flex-box < display: flex;.

    Одинаковая ширина у input и div
    Добрый день! Столкнулся с такой вот проблемой — есть два элемента: div и текстовый input, при.

    Источник

    Ширина столбца html

    Ширина столбца будем её выставлять нескольким способами. Ширина столбца в самой таблице, ширина столбца в процентах и пикселях, + ширина столбца через css.

    Напоминаю, что ширина обозначается английским словом:

    В чем измеряется ширина столбца!?

    Если мы помним, из предыдущих тем, то ширина таблицы измеряется в

    3. Есть еще много разных единицы измерений.

    Эти свойства наследуют столбцы! Чтобы задать ширину столбца, надо знать, как устанавливать свойства css — их всего три.

    Ширина столбца в процентах

    Давайте поэкспериментируем! С шириной столбца в процентах!

    Создадим таблицу с тремя столбцами!

    И присвоим им ширину 25% + 50% + 25% сумма должна быть равна 100%.

    Как видим, наша страница заполняет полное пространство на данной странице.

    Результат столбца с разной шириной, в процента:

    width=»25%» width=»50%» width=»25%»

    Теперь ширину столбца сделаем в пикселях.

    Общая ширина текстового поля, где вы читаете данный текст не равна 600 пикселям.

    Ширина столбца в пикселях

    Делим на 3 части 150px + 300px + 150px

    Смотрим наши получившиеся столбцы с разной шириной:

    width=»150″ width=»300″ width=»150″

    Ширина столбца через стили css

    Теперь ширину столбца пропишем через стили css.

    Сам столбец обозначается тегом «td»:

    Есть несколько вариантов, как прописать ширину столбцов.

    К примеру, если вы пропишите сам столбец и к нему прикрепите ширину.

    Но у этого способа есть один самый главный минус — все столбцы на странице будут иметь эту ширину и если эти стили прописаны в главном файл css? то все столбцы, на всем сайте будут иметь именно эту ширину!

    Поэтому, для каждого столбца нужно поставить отдельный класс или ид.

    Например — таблица с шириной через css.

    Обратите внимание, что на третьем столбце ширина не прописана — вопрос — какой ширины должен быть третий столбец!?

    class=»first» class=»second» no class
    class=»first» class=»second» no class

    Фиксированная ширина столбца

    Как сделать ширину столбца фиксированной!?

    Тут. у меня есть некое смущение! Почему!?

    Давайте данный пункт разделим еще на два подпункта:

    1). Теория и фиксированной ширине столбца, это свойство table-layout со значением fixed :

    Код страницы с фиксированной шириной столбца:

    Пример использования свойства CSS table-layout.

    Источник

    Гибкие таблицы на CSS Grid


    Просмотр списка лидов («холодных» контактов)

    Поскольку мы уже запустились, я, наконец, могу рассказать о секретном проекте, над которым работал последние два года. Одна из интересных функций Teamwork CRM — просмотр списка (list view).

    Это мощный компонент, который встречается в приложении семь раз. По сути, таблица на стероидах. Я мог бы много рассказать, но не хочу вас утомлять. Сосредоточусь на том, как мы реализовали подобную гибкость с помощью всего нескольких строк CSS (Grid). А именно, как мы выкладываем тяжёлые таблицы данных, как поддерживаем изменение размера столбцов и многое другое.

    Во-первых, нужно объяснить контекст, начиная с цели и задачи дизайна этих таблиц. Если это не интересует, не стесняйтесь перейти сразу к технической реализации.

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

    Абсолютно всё работает в адаптивном гибком дизайне. Мы начинаем с самого узкого варианта и настраиваем макет на основе контента, дизайна и вариантов использования (у нас нет брекпоинтов, ориентированных на устройство).

    На минимальной ширине экрана столбцы штабелируются вертикально, занимая всю ширину экрана.

    Как выглядит список на узком экране

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

    Как только у нас достаточно пикселей на экране, мы переключаемся на более типичный макет, так что колонки… ну, становятся колонками. Затем в макете не происходит никаких серьёзных изменений, но мы по-прежнему хотим отображать колонки как можно удобнее для клиента.

    Предположим, у нас много столбцов (позже рассмотрим, как пользователь может их настроить). Во-первых, таблица должна как минимум заполнить ширину экрана. Во-вторых, ширина столбцов должна определяться их содержимым и типом значений. Например, короткий/длинный текст, дата, номер, URL и т. д. Колонки с датой должны занимать меньше места, чем колонки длинного текста.

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


    Как макет зависит от ширины окна. Извините за дёрганую гифку, позже я приведу несколько интерактивных примеров

    Начнём с того, что мы по максимуму используем для таблицы обычный CSS старой школы. Затем улучшаем его с помощью CSS Grid. Потом я покажу, как средствами Grid пользователи изменяют размер столбцов, что было гораздо неудобнее с обычным CSS.

    Ну покажите уже CSS Grid

    Я не эксперт по CSS Grid, но он мне нравится. Это чрезвычайно мощный и простой инструмент, который реализует сложные макеты с минимальным количеством кода. Здесь я пропущу введение в технологию. Можете прочесть «Новые макеты CSS» Рейчел Эндрю или «Полное руководство по Grid». Когда закончите размышления о том, где же был этот инструмент всю вашу жизнь, возвращайтесь ко мне.

    Первым делом применяем display:grid к

    , чтобы превратить таблицу в сетку. Это ничего не сломает: если браузер не поддерживает Grid, то применит display:table . Дочерние элементы и становятся элементами сетки. Нам не нужно думать о , или даже . Мы хотим выложить на этой сетке наши будет независима от других, и это не хорошо (позже вы увидите, что такая же проблема с Flexbox).

    Обходной путь — использовать display:contents на

    , и . Это в основном удаляет их из макета сетки, выдвигая вперёд дочерние элементы (
    и , применив display:grid к каждому из них (т. е. сетки внутри сеток), но это не идеально. Каждая сетка
    и ).

    Затем мы используем волшебное правило grid-template-columns для управления элементами сетки. Да, всего одна строка CSS. Например, если у нас колонка даты и колонка URL, получится примерно так:

    Используем одинаковый минимальный размер для всех колонок, но максимальное значение ( fr ) определяется типом данных столбца. Я пробовал auto и max-content , но мы придумали лучший вариант. Вот упрощенный пример: интерактивная таблица с кодом. Попробуйте изменить размер окна.

    Изменение ширины колонок с помощью Grid

    Кроме того, в наших таблицах можно поменять местами, изменить ширину и скрыть столбцы. Последнее важно, потому что поддерживается очень много колонок с различными типами данных: это свойства самого элемента (например, лидов), свойства связанных элементов (например, компании, связанной с лидом) и кастомные поля.

    Например, пользователь может создать для контактов настраиваемое поле (дата) под названием «Дата рождения», которое будет отслеживаться в системе для каждого контакта.

    Поскольку при создании настраиваемого поля выбирается тип «Дата», система будет обрабатывать это поле с учётом такого типа. Сначала объясню, как происходит изменение ширины.

    1. Когда пользователь проводит курсором над заголовком столбца, справа отображается маркер изменения размера. Мы прослушиваем событие mousedown на ползунке изменения размера.
    2. Когда пользователь нажимает на ползунок, мы привязываем ещё несколько методов для прослушивания событий mousemove и mousedown (к window ). На этом этапе также добавляем некоторые классы для оформления.
    3. Когда пользователь перемещает мышь, мы вычисляем новую ширину столбца с учётом положения курсора, положения прокрутки таблицы и установленного минимума. Затем повторно устанавливаем правило grid-template-columns для
      (через атрибут style ), на этот раз заменив максимальное значение ( fr ) пиксельным. Например, grid-template-columns: minmax(150px, 1.33fr) 296px; . Это делается с помощью requestAnimationFrame , чтобы обеспечить как можно более плавную анимацию.
    4. Когда поступает mouseup , мы отменяем прослушиватели событий и удаляем классы.
    5. Попробуйте на этом упрощённом примере.

      Замечательно, что достаточно обновить только один элемент в DOM, а не каждую ячейку.

      Мы всегда разрабатываем UI с учётом сенсорного ввода, но в данном случае вполне нормально не поддерживать его. Это слишком точное действие. Даже если бы я хотел изменить размер столбца на тачскрине, вероятно, я ожидал бы другого взаимодействия, например, через мультитач-жест.

      Колонки фиксированной ширины

      Вы могли заметить, что кое о чём умолчал. На самом деле изменяется ширина не одного, а всех столбцов. Может, вы даже этого не заметили, потому что именно так оно и должно работать.

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

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

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

      Поэтому, если вы открываете приложение в первый раз, столбцы выкладываются оптимальным образом. Если изменить размер экрана, колонки тоже изменятся по тому же принципу. Как только вы касаетесь ползунка для изменения размера любого столбца, ширина всех видимых колонок фиксируется.


      До, во время и после изменения ширины столбца. Опять прошу прощения, что гифка немного дёргается

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

      Не могу точно вспомнить, почему мы решили установить фиксированное значение в пикселях, а не адаптивный вариант. Может, для простоты. Или потому что в отсутствие поддержки Grid и display:contents происходит откат на более архаичный подход к настройке ширины столбцов.

      Вероятно, адаптивный вариант в любом случае не будет соответствовать намерениям пользователя. Мы не можем предполагать, что для него самое главное — сделать все столбцы меньше, чтобы все они остались на экране. Если человек изменил ширину колонки, он хочет увидеть определённое количество содержимого в этом столбце. Если у нас адаптивный блок, а затем он сужается в окне меньшего размера, то мы игнорируем выбор человека. Ему придётся снова изменить ширину столбца, чтобы увидеть тот же контент. Вряд ли пользователь думает: «Хм, я хочу, чтобы этот столбец занимал 20% окна, даже если я его изменю». Впрочем, я слишком углубляюсь в пограничную ситуацию: на самом деле, пользователи редко изменяют размер окон.

      Перемещение и удаление столбцов


      Интерфейс для настройки отображаемых столбцов

      Представьте, что пользователь изменил набор столбцов через этот интерфейс. Если ни один из выбранных столбцов ранее не изменялся, то они отобразятся с использованием значений по умолчанию grid-template-column в зависимости от типа данных. Например, minmax(150px, 3.33fr) .

      Если ширина какой-то колонки зафиксирована в localStorage, мы фиксируем ширину всех выбранных столбцов и тоже сохраняем эти значения в localStorage.

      Со временем всё больше и больше столбцов сохраняют фиксированную ширину. Для пользователей единственный способ вернуться к адаптивному дизайну — сбросить колонки.

      Мы также храним в localStorage массив идентификаторов столбцов, отдельно от записей о ширине.

      «Почему вы просто не использовали <>?»

      С библиотекой JavaScript решение будет тяжёлым, дёрганым, не обеспечит интерактивность и может даже вообще не поддерживать

      . Мне также не хотелось писать что-то подобное. Я подумал: «Должен быть способ получше».

      «Почему вы просто не использовали Flexbox?»

      Каждая строка будет оцениваться/выводиться независимо друг от друга. Столбец может быть не выровнен относительно столбца выше из-за разного объёма содержимого.

      Я мог бы переключиться на

      ‘ы для столбцов с вертикальной группировкой ячеек внутри. Но не хотел этого делать. Я хотел использовать

      . Кроме того, мы легко могли столкнуться с другими проблемами: например, с несовпадением ячеек по высоте между столбцами.

      «Почему вы просто не использовали ?»

      Действительно, — удобный старый элемент. После определения столбцов с помощью стили, применённые к одному, будут эффективно применяться ко всем ячейкам в этом столбце.

      Но это оказалось слишком ограниченное решение. Мы попробовали, но очень быстро от него отказались. Настолько быстро, что я уже не могу точно вспомнить, в чём были проблемы. Почти уверен, что невозможно было достичь желаемого уровня адаптивности и оно не сработало с Flexbox и Grid.

      «Почему вы просто не использовали table-layout: fixed?»

      Я мог бы применить на

      правило table-layout: fixed и установить ширину столбцов в процентах. Но глядя на примеры и поиграв с этим правилом, создалось впечатление, что оно работает только на таблицах шириной 100%. Кроме того, изменение размера одного столбца приводит к изменению размера других столбцов для выхода на общие 100% ширины.

      «Но вы могли обойтись простыми таблицами!»

      Да, таблицы из коробки способны на много умных вещей, но не могут эффективно поддерживать всё, что я хотел реализовать. Не согласны? Хорошо, волшебник, научи меня.

      Не переборщите с display: contents

      Значение display: contents позволило сохранить разметку таблицы. Используйте его только тогда, когда это действительно нужно. В некоторых браузерах есть или, по крайней мере, были проблемы с доступностью и скрин-ридерами.

      Мы обнаружили странный баг display: contents с нативным драг-н-дропом в Firefox.

      К счастью, скоро выйдет функция подсеток (subgrid), которая позволит дочерним элементам корректно внедряться в сетки. В нашем приложении мы хотим лишь упростить разметку, но подсетки откроют двери в дикие многомерные сеточные оргии. См. «Почему display: contents не является подсеткой CSS Grid Layout».

      Кажется, была ещё проблема с переполнением текста при изменении размера столбцов, но я уже точно не помню.

      Для сохранения заголовков таблиц при прокрутке вниз мы используем position: sticky . Это прекрасное усовершенствование, и оно отлично деградирует в старых браузерах. Тем не менее, для пользователей IE11 у нас есть резервный JavaScript. На самом деле я бы не рекомендовал position: sticky из-за трудностей с горизонтальной прокруткой.

      Я даже не упомянул некоторые функции наших представлений списка. Например, пользователи могут применять, сохранять и обмениваться кастомными фильтрами (например, показать лиды выше $500 с потенциальными клиентами в Европе). В этих фильтрах можно запоминать набор столбцов, чтобы всегда отображать определённые столбцы для конкретного рабочего процесса.

      Вскоре мы собираемся реализовать массовое редактирование в представлении списка, а также экспорт кастомного представления в CSV.

      Источник

      Читайте также:  Как сделать беспроводные наушники проводными
      Оцените статью