Энциклопедия мобильной связи

Параметры display css. Синтаксис свойства CSS visibility

.

А

какой-то текст

какой-то текст

  • если не задано значение width, элемент растягивается на весь родительский контейнер.

    какой-то текст

    какой-то текст

  • если задано значение width, ширина складывается из margin, border, padding, width (). Поэтому красная рамка выходит за пределы родительского блока при width: 100%.

    какой-то текст

    width: 100%;
    border: 4px double red;

    какой-то текст

  • если не задано значение height, элемент растягивается на высоту, необходимую содержимому блоку, иначе высота складывается из margin, border, padding, height.
  • при превышении указанной высоты/ширины содержимое отображается поверх блока, коли не указано иное с помощью свойства . В нашем случае красная рамка видна над голубой родительского блока.
  • Пример использования

    1. маленькая
    2. с длинным текстом
    Для того, чтобы вся строка была ссылкой
    Уберём ненужные отступы (padding, margin), маркер (list-style) и подчёркивание (text-decoration) и добавим рамку (border)

    display: inline;

    По умолчанию присвоен a, span, b, em и т.д.


    1. <span class="svetlyi">Аspan >

      какой-то текст прямоугольник А переносится на новую строку какой-то текст

    2. width и height игнорируются. Его ширина - это ширина содержимого плюс margin, border и padding.
    3. margin-top и margin-bottom игнорируются.
    4. совместно с padding-top и padding-bottom следует корректировать line-height, иначе строки будут "наезжать" друг на друга.

      какой-то текст прямоугольник А переносится на новую строку и наезжает на соседние строки из-за установленного значения padding какой-то текст

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

    Пробелы между тегами li нужно убирать. Когда разделяются слова пробелом, между ними появляется пустое пространство, здесь то же самое.

    1. маленькая
    2. с длинным текстом

    display: inline-block;

    По умолчанию присвоен img, input и т.д. По отношению к внешним элементам ведёт себя как inline, а внутренним block.

    Пример использования

    1. маленькая

    display: list-item;

    По умолчанию присвоен li. Элемент показан как блочный с маркером списка. Вид маркера изменяет свойство . В примере выше маркер отсутствует, поскольку у li display отличный от list-item.

    display: run-in;

    Если после элемента с display в значении run-in следует блок, то он становится в одну строку с ним и является его частью. Иначе элемент вызывает разрыв строки. Не поддерживается Mozilla Firefox.

    А
    какой-то текст

    display: run-in;
    вторая строка

    какой-то текст

    display: table;

    По умолчанию присвоен table.

    1. на строку, на которой расположилась таблица, уже нельзя добавить другой элемент.
    2. если не задано значение width, элемент растягивается по длине содержимого, иначе ширина складывается из margin, border, padding, width. При превышении указанной высоты/ширины содержимое отображается поверх блока.

      какой-то текст

      width: auto;
      display: table;

      какой-то текст

    3. не поддаются влиянию блоки, если у родителя , только их содержимое.
    4. не действуют такие свойства, как .
    5. применимы свойства .

    display: inline-table;

    Аналогичен display: inline-block.

    1. применимы свойства .

    display: table-row;

    По умолчанию присвоен tr. Объединяет группу ячеек, которые не будут перенесены на другую строку.

    1. на строку, на которой расположилась строка таблицы, уже нельзя добавить другой элемент.
    2. элемент растягивается по длине содержимого.
    3. width, border, padding, margin, vertical-align игнорируются.
    4. можно изменить значение height.
    5. не поддаются влиянию блоки, если у родителя , только их содержимое.

    display: table-cell;

    По умолчанию присвоен td и th. Я рассматриваю ситуацию, когда родитель имеет display: table-row.

    1. элементы следуют друг за другом.
    2. если не задано значение width, элемент растягивается по длине содержимого, иначе ширина складывается из border, padding, width. Но не более ширины контейнера и пропорционально всем длинам ячеек. Поэтому я советую, не задавать width для ячеек нижних строчек.
    3. высота всех ячеек в строке одинакова и составляет высоту самой высокой ячейки. Удобно при построении двух- и т.д. колоночных макетов, где требуются колонки одинаковой высоты.
    4. margin игнорируется. Это свойство заменяется border-spacing у родителя.
    5. на его содержимое можно воздействовать посредством и .
    111
    2
    33
    4
    55
    6

    Пример использования

    маленькая с длинным текстом в две строки
    цена цена

    display: table-caption (table-column, table-column-group, table-footer-group, table-header-group, table-row-group)

    По умолчанию присвоен caption (col, colgroup, tfoot, thead, tbody). Пока не вижу практической ценности.

    display: none;

    Элемент становится невидимым, не сохраняя занимаемое место.

    Пример использования

    1. маленькая
      1. подпункт1
      2. подпункт2
    2. с длинным текстом
    1. маленькая
      1. подпункт1
      2. подпункт2
    2. с длинным текстом
    1. маленькая
      1. подпункт1
      2. подпункт2 длинный
    2. с длинным текстом

    Каскадные таблицы стилей (CSS) позволяют организовать внешний вид и оформление интернет-страницы. Одним из наиболее часто употребляемых свойств и его значений является "display: none".

    Определение свойства

    Само свойство является многоцелевым и определяет тип отображения элемента в документе. В зависимости от выбранного значения определенный участок страницы может отображаться блочно, линейно, как пункты списка, как часть таблицы и т. д. Таким образом, благодаря свойству "display", можно изменять тип самого блока в документе.

    Что касается связки "свойство-значение display: none", то она позволяет удалить элемент или блок из документа. При этом место под данный кусок страницы не резервируется, то есть он выпадает из потока. Все элементы, которые находятся за «удаленным», попросту не видят его и игнорируют размеры и положение такого блока. Для возвращения скрытого объекта необходимо обратиться к документу через скрипты, которые просто изменят значение свойства на необходимый формат. При этом произойдет автоматическое форматирование страницы с учетом нового объекта на ней.

    Разница между свойствами "display" и "visibility"

    Несмотря на то что в итоге оба свойства скрывают элемент от пользователя, их принцип действия значительно отличается. Как уже было сказано выше, параметр "display: none" полностью удаляет элемент из документа. Блок выпадает из страницы, тем самым не занимая в ней место. При этом сам объект по прежнему остается в HTML-коде.

    В свою очередь, свойство "visibility: hidden" прячет элемент от пользователя, но не удаляет его из модели документа. Таким образом, на странице остается зарезервированное место под данный блок. То есть поток документа будет воспринимать и учитывать расположение и размеры элемента со свойством "visibility: hidden" ровно так же, как и без него.

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

    Использование CSS — display: none

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

    В заголовке документа

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

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

    Блок div. Display: none

    Еще одним способом является добавление непосредственно в тег элемента кода "style=display: none;". Подобный подход зачастую применяют при работе с различными фреймворками, цель которых - снижение числа свойств непосредственно в таблице стилей и отображение их в самом интернет-документе. Кроме того, подобная запись часто возникает при просмотре страницы «инспектором кода». Важно помнить, что используя этот подход, можно изменить свойство и его значение, прописанные в таблице стилей. Поэтому стоит быть осторожным, так как в итоге можно создать себе дополнительные проблемы и потратить некоторое время на поиск и устранение ошибки в коде страницы.

    JavaScript

    Стоит также упомянуть и о дополнительной возможности изменения этого свойства. Оно относится уже не к таблице стилей и html-коду, а к скриптовому языку. Поэтому для его применения необходимо иметь хоть какие-то знания в этой области. Для того чтобы убрать элемент из потока документа, можно использовать свойство JavaScript "display=none". Оно позволяет изменить структуру документа при наступлении определенного события. Также благодаря использованию скриптов можно динамически («на лету») изменить параметр свойства и тем самым обновить вид страницы без необходимости ее перезагрузки. Такой подход является полезным при организации выпадающих меню, модальных окон и форм.

    SEO

    В области оптимизации веб-контента под поисковые машины существует много суеверий и неясных моментов. Так, многие начинающие СЕОшники считают использование свойства "display" плохой манерой. Объясняют они это тем, что поисковики, видя скрытый контент, начинают считать страницу спамом. В их словах есть доля логики, но не более того. На данный момент времени свойство скрытия объекта используется достаточно часто для форматирования выпадающих меню и скрытия частей документа, которые в данный момент не интересны пользователю (например, при выборе одной категории информация о других удаляется). Такой подход используют достаточно мощные интернет-порталы (один из них — "Амазон"). Таким образом, не могут считать использование свойства "display: none" спамом.

    Другое дело, когда такой подход используется для скрытия отдельных слов и символов. Несмотря на то что сейчас поисковые роботы еще не имеют совершенных алгоритмов распознания подобного «спама» в документах, вероятность того, что страница будет поймана на этом, достаточно высока. Поэтому рекомендуется использовать свойство "display" строго по назначению — для изменения типа блока или его временного скрытия от глаз пользователя.

    Свойство display является одним из самых важных свойств CSS, которые используются верстальщиками для построения макета. Самыми популярными значениями этого свойства являются block , inline и none . Значения table и inline-block также довольно распространены. Но кроме этих значений есть еще масса других, которые можно и нужно использовать, и о которых вы, возможно, не знали. Поэтому, этот пост посвящен рассмотрению различных значений свойства display в CSS-стилях.

    Прежде чем мы поговорим о свойстве display , мы должны упомянуть «дерево блоков» (box tree).

    CSS берет исходный документ, организованный как дерево элементов и текстовых узлов, и отображает его на холст (например, экран монитора). Для этого он создает промежуточную структуру, дерево блоков , которая представляет собой структуру форматирования для готового (визуализированного) документа. Каждый блок в дереве блоков соответствует соответствующему элементу в пространстве и/или времени на холсте.

    Чтобы создать дерево блоков, CSS сначала использует каскадирование и наследование, чтобы назначить вычисленное значение для каждого свойства CSS каждому элементу в исходном дереве. Затем для каждого элемента CSS генерирует ноль или более блоков, как указано в свойстве display этого элемента. Другими словами, свойство display определяет тип отображения каждого блока в дереве блоков .

    Все элементы имеют значение display по умолчанию, но его можно переопределить, явно установив значение display на что-то другое. Значение по умолчанию в XML (а также для элементов SVG) является inline . А в HTML значения свойств display по умолчанию берутся из поведения, описанного в спецификациях HTML, или из таблицы стилей по умолчанию для браузера/пользователя.

    Основные значения свойства display в CSS

    Элемент генерирует «коробку» блочного уровня. Все элементы на этом уровне начинаются с новой строки (вертикально) и, если не указано иное, растягиваются до ширины своего контейнера. Элементы прилегают вплотную друг к другу, если для них не заданы отступы (margin).

    Удаляет элемент и его дочерние элементы из обычного потока документа. Документ отображается так, как будто этого элемента никогда не было, а занимаемое им место не резервируется. Считыватели экрана также игнорируют содержимое такого элемента.

    display: inline;

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

    display: list-item;

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

  • имеют значение по умолчанию для элемента списка (list-item). Значение обычно используется для возврата элементов
  • к их дефолтному поведению.

    display: inline-block;

    Элемент генерирует «коробку» блочного уровня, но весь блок ведет себя как встроенный (инлайновый) элемент. Т.е., он «обтекается» другими элементами веб-страницы.

    Табличный уровень

    Существует много значений display , которые позволяют элементам вести себя так же, как и HTML таблицы. В таблице ниже представлены значения «табличного уровня» и их краткое описание.

    table Соотносится с HTML элементом. Определяет «коробку» блочного уровня. HTML элементом. HTML элементом. HTML элементом. HTML элементом. HTML элементом. HTML элементом.
    table-header-group Соотносится с
    table-row Соотносится с
    table-cell Соотносится с HTML элементом.
    table-row-group Соотносится с
    table-footer-group Соотносится с
    table-column-group Соотносится с
    table-column Соотносится с
    table-caption Соотносится с
    HTML элементом.
    inline-table Это единственное значение, которое не имеет прямого сопоставления с HTML элементом. Элемент будет вести себя как элемент HTML таблицы, но как инлайновый блок, а не как элемент блочного уровня.

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

    Более современные значения

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

    А когда CSS ставал все более популярным, верстальщики перешли к плавающим макетам, размещая контент в разных плавающих div , чтобы добиться желаемого эффекта. Такая техника до сих пор очень распространена, но после появления flexbox (макета гибкой «коробки» в CSS), эта ситуация будет длиться все меньше. Когда макет гибкой «коробки» будет полностью поддерживаться всеми браузерами, гибкие макеты станут преобладающим методом верстки. Тем не менее, не все браузеры поддерживают спецификацию flexbox , и это сильно тормозит ее развитие.

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

    Объявляя display: flex; для элемента, он становится flex (гибким) контейнером, а его дочерние элементы становятся гибкими элементами этого контейнера. Свойства flex не распространяются на внуков этого элемента. Как гибкий контейнер, так и гибкие элементы имеют свои собственные гибкие свойства.

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

    Обратите внимание, что CSS-сетка официально не реализована ни в одном браузере. Чтобы поддерживать ее, браузерам нужно указывать префиксы поставщиков и устанавливать флаги.

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

    display: run-in;

    Теоретически, если вы устанавливаете свойство display элемента в run-in , он отображается как блок внутри другого блока. Вариант использования этого свойства заключается в том, чтобы иметь собственный метод для создания заголовков, которые визуально располагаются в той же строке, что и последующий контент.

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

    Обратите внимание, что это значение поддерживается только в Internet Explorer 11 и Opera Mini.

    Элемент ведет себя как инлайновый и выдает свое содержимое в соответствии с моделью форматирования элемента HTML. Если вкратце, то это позволяет отображать аннотации рядом с базовой линией текста (обычно для помощи в произношении). Такая техника довольно распространена в китайском и японском языках.

    display: contents;

    Суть этого значения заключается в том, что когда вы его используете для элемента, он исчезает из DOM, но все его потомки остаются и занимают свое пространство. Эта спецификация на данный момент поддерживается только в Firefox >59, Chrome >65, Safari 11.1.

    Краткий итог

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

    Разрешите представить вам перевод статьи «Cross-Browser Inline-Block», написанной Райном Доэрти холодным февралем 2009 года. В статье рассказывается о верстке элементов списка с установкой для свойства display значения inline-block . Статья об этом, а также о трудностях, возникающих в процессе достижения результата и о методах их «лечения».

    Inline-block , заманчивое значение для свойства display , которое обещает очень много, а выполняет совсем мало. Очень часто я получал PSD-файлы, подобные этому:

    И плакал.

    Обычно такой способ отображения не вызывает проблем. Фиксированная ширина, фиксированная высота, float: left и готово. Если бы не одно, но! Дизайн должен отображаться корректно при любом количестве содержимого. В нашем случае, если в одном из блоков окажется чуть больше данных, то он «сломает» всю сетку.

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

    Начнем с простого примера, где у пунктов списка для свойства display установлено значение inline-block :

    • This is awesome

    • ...

        Результат выглядит корректно в Firefox 3, Safari 3 и в Opera:

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

        А происходит здесь следующее, базовая линия (baseline) каждого элемента

      • выравнивается с базовой линией родительского элемента
          . Вы спросите, что такое базовая линия? Лучше один раз увидеть, чем сто раз услышать:

          Базовая линия на рисунке выше обозначена линией, идущей через основание символов. Значением по-умолчанию для свойства vertical-align у inline и inline-block элементов является baseline . Это значит, что базовая линия элементов выравнивается с базовой линией родителя. На рисунке ниже представлен пример такого выравнивания:

          Как видите, каждая базовая линия блоков на рисунке выше выравнена по базовой линии текста «This is the baseline», который не является элементом

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

              Получить желаемый изначально вариант выравнивания довольно просто, достаточно для свойства vertical-align указать значение top и получить в результате отличную сетку:

              Вот только это не работает в Firefox 2, IE 6 и 7:

              Для начала займемся Firefox 2.

              Firefox 2 не поддерживает значение inline-block , зато отлично понимает специфичное для Мозиллы значение -moz-inline-stack для свойства display . Оно приводит к результатам, подобным действию inline-block . Когда мы добавляем его перед display: inline-block , то Firefox 2 игнорирует вышеуказанное, так как не понимает его, и использует -moz-inline-stack . Другие браузеры используют inline-block , игнорируя непонятное для них -moz-inline-stack .

              К сожалению, это вызывает небольшой баг:

              Честно, я не знаю, что является его причиной. К счастью, лечится он довольно просто обертыванием всего содержимого элемента

            • дополнительным
              .

            • This is awesome

            • Теперь перейдем к IE 7. Он тоже не поддерживает inline-block , но мы можем использовать трюк, благодаря которому элементы

            • будут выводиться на экран так, будто используют значение inline-block . Как? Будем использовать hasLayout , волшебное свойство IE, делающее доступными многие манипуляции. Вы не можете явно указать для элемента hasLayout: true или сделать это каким-либо подобным простым образом, однако можете запустить механизм, указав zoom: 1 .

              Технически элементы с hasLayout , установленным в значение true сами отвечают за рендеринг самих себя и дочерних элементов. Объедините это с min-height и width , и получите результат, очень близкий к display: block . Это как магический порошок, заставляющий исчезать все появляющиеся при отображении проблемы.

              Когда мы добавим zoom: 1 и *display: inline (звездочка является хаком для IE 6 и IE 7) для элементов

            • , то научим IE 7 отображать их совсем как inline-block :

              Почти готово. Остался лишь IE 6:

              IE 6 не поддерживает min-height , но взамен мы можем использовать его неверное обращение к свойству height . Установим для _height (обратите внимание на подчеркивание спереди) значение в 250px и получим все элементы

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

              Финальный CSS и HTML выглядит так:

            • This is awesome

            • Свойство CSS Display нужен для установки типа html элемента относительно других элементов. Проще говоря это опция отвечает за то, как отображать элемент относительно других. Благодаря ему можно добиваться нужных "спецэффектов".

              Синтаксис CSS Display

              display : value ;

              Где value может принимать значения: