Display none css: Все значения свойства display

css — Способы анимации «display: none» без JS

Задать вопрос

Вопрос задан

Изменён 2 года 11 месяцев назад

Просмотрен 6k раз

Сделаю минимальный пример:

input, div {
  display: none;
}

label:before {
  content: 'Показать';
}

#toggle:checked + label:before {
  content: 'Скрыть';
}

#toggle:checked ~ div {
  display: block;
}
<input type="checkbox" name="toggle" />
<label for="toggle"></label>

<div>Скрытый контент</div>

Вопрос именно про display: none, поэтому способы прозрачности и нулевой высоты взамен данного свойства не предлагать.

Анимация конечно же может содержать в себе opacity, height, width, transform и прочие стили. При помощи JS, особенно с помощью jQuery, это тоже без труда реализуется, но, вопрос именно по CSS.

Если таковых нет, поделитесь, что используете и почему? Например, при сокрытии и отображении подробной информаци или обрезки текста.

  • css
  • css3

8

«Вопрос в том, как сделать плавность появления, когда у элемента есть переключение с display: none на display: block.» Пример с display: none на display: block с методом keyframes:

input {
  display: none;
}

label:before {
  content: 'Показать';
}

#toggle:checked + label:before {
  content: 'Скрыть';
}

#toggle:checked ~ div {
  animation-name: open;
  animation-duration: 2s;
  animation-iteration-count: 1;
  animation-direction: normal;
  animation-timing-function: ease-out;
  animation-fill-mode: forwards;
  animation-delay: 0s;
}
#toggle:not(:checked) ~ div {
  display: none;
}
@keyframes open {
  0% {
    display: block;
    opacity: 0;
    visibility: hidden;
  }
  100% {
    display: block;
    opacity: 1;
    visibility: visible;
  }
}
<input type="checkbox" name="toggle" />
<label for="toggle"></label>

<div>Скрытый контент</div>

PS: лично я использую метод toggle на JS/jQuery — добавление/удаление дополнительного класса и комбинирую его с CSS так как хочу. Если на чистом CSS, то данный пример. В остальном зависит от идеи, конкретики того, что и как нужно, метод реализации — уже второй вопрос.

10

Зарегистрируйтесь или войдите

Регистрация через Google

Регистрация через Facebook

Регистрация через почту

Отправить без регистрации

Почта

Необходима, но никому не показывается

Отправить без регистрации

Почта

Необходима, но никому не показывается

Нажимая на кнопку «Отправить ответ», вы соглашаетесь с нашими пользовательским соглашением, политикой конфиденциальности и политикой о куки

Как display: none для изображений влияет на скорость загрузки страницы

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

Работая с ресурсами наших клиентов мы стали замечать, что время загрузки изображений в три раза превысило средние значения, определяемые для сходных сайтов. Анализ кода показал, что большое количество изображений скрывалось с помощью медиа-запросов и CSS-свойства display: none.

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

Следует помнить, что свойство display: none, установленное для изображений или для контейнера, содержащего изображения, не блокирует загрузку этих изображений браузером.


Как это работает?

Как Вы заметили, свойство display: none влияет на изображения так же, как и на другие элементы: изображение не отображается, но остается на своем месте в объектной модели документа (DOM), хотя и не расходует ресурсы браузера.

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

Посмотрим на пример:

<!doctype html>
<html lang="en">
<head>
</head>
<body>
    <h2>Header</h2>
    <div>
        <img src="/images/img1.jpg" alt="image 1">
        <img src="/images/img2.jpg" alt="image 2">
        <img src="/images/img3.jpg" alt="image 3">
    </div>  
</body>
</html>

В коде, приведенном выше, мы установили свойство display: none для блока, который оборачивает три изображения, скрывая их.

Однако, если мы посмотрим, какие сетевые ресурсы будут загружаться при обращении к этой HTML-странице, мы увидим, что браузер обращается и к скрытым изображениям. Такой же результат получится и в том случае, когда свойство display: none будет установлено для каждого элемента img.

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

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


Решение

  1. Вместо использования display: none Вы можете исключить изображения из состава HTML-документа, а значит и из DOM, и добавить их при необходимости. Сделать это очень легко, как в случае, когда Вы используете в своем проекте различные JS-фреймворки или библиотеки (например: Angular или React), так и в случае, когда можно воспользоваться только Vanilla JS. Во всех этих случаях вывод изображений можно заблокировать с помощью известного всем условного оператора if.
  2. Изображения, которые нужно скрыть, можно использовать как background-image, так как фоновые изображения для скрытых элементов не загружаются.

Заключение

Если Вы используете для изображений CSS-свойство display: none, они все равно будут загружены.

Существуют как минимум два способа (перечисленных выше) для решения этой проблемы. Если Вы не собираетесь вносить изменения в объектную модель документа (DOM), необходимо использовать вариант с фоновыми изображениями (2).


Спасибо за внимание.


Перевод статьи Santiago García da Rosa “How CSS display:none Affects Images on Page Load”.

В чем разница между visible:hidden и display:none ?

Улучшить статью

Сохранить статью

  • Последнее обновление: 07 окт, 2021

  • Читать
  • Обсудить
  • Улучшить статью

    Сохранить статью

    Свойство visibility и display весьма полезно в CSS. Видимость : «скрыта»; Свойство используется для указания того, является ли элемент видимым или нет в веб-документе, но скрытые элементы занимают место в веб-документе. видимость — это свойство в CSS, определяющее поведение видимости элемента. Свойство display в CSS определяет, как компоненты (такие как div, гиперссылка, заголовок и т. д.) будут размещены на веб-странице. Свойство

    display: «none» используется для указания того, существует ли элемент на веб-сайте или нет.

    Свойство видимости: Это свойство используется для указания того, является ли элемент видимым или нет в веб-документе, но скрытые элементы занимают место в веб-документе.

    Синтаксис:

     видимость: видимая| скрытый | коллапс | начальная | наследовать; 

    Значения свойств:  

    • visible: Используется для указания видимого элемента. Это значение по умолчанию.
    • hidden: Элемент не виден, но влияет на макет.
    • свернуть: Скрывает элемент, когда он используется в строке таблицы или ячейке.
    • начальный: Устанавливает для свойства видимости значение по умолчанию.
    • наследовать: Это свойство наследуется от своего родительского элемента.

    Свойство Display: Свойство Display в CSS определяет, как компоненты (div, гиперссылка, заголовок и т. д.) будут размещены на веб-странице.

    Синтаксис:

     отображение: нет | встроенный | блок | встроенный блок; 

    Значения свойств:

    • нет: Элемент не отображается.
    • встроенный: Это значение по умолчанию. Он отображает элемент как встроенный элемент.
    • блок: Визуализирует элемент как элемент уровня блока.
    • inline-block: Отображает элемент как блочный блок внутри встроенного блока.

    Итак, разница между отображением : «нет»; и видимость: «скрыта» ; прямо из самого названия мы можем сказать разницу, поскольку display: «none»

    ; полностью избавляется от тега, так как его никогда не было на HTML-странице, тогда как видимость: «скрыта» ; просто делает тег невидимым, он по-прежнему будет занимать место на HTML-странице, он просто невидим.

    Пример: Этот пример иллюстрирует использование свойства видимости и свойства отображения в CSS.

    HTML

    < html >

    < head >

         < title >

             Разница между display:"none"; и видимость: «скрыта»;

         title >

    head >

       

    < body >

         < центр >

             < h2 стиль = " :зеленый" >

                 GeeksforGeeks

             h2 >

             < h4 >

                 display:"none"; и

                 видимость: «скрыта»;

             h4 >

             < div class = "display" >

                 < b >

                     дисплей:

                     < span style = "display:none" >

                         display:none

                     span > "none";

                 b >

             div >

             < br >

             < div class = "visibility" >

                 < b >

    видимость:

                    < span стиль = "visibility9:hidden"0132 >

    Видимость: скрытая

    SPAN > "Hidden";

                 b >

             div >

             < p >

                 Вы можете видеть, что на дисплее: "нет";

                 нет пустого места и 

                 видимость: "скрытый": есть пробел.

             p >

       

         center >

    body >

    .

    Отображение и видимость в JavaScript:

     Синтаксис:

    отображение = «нет»;

     document.getElementById("Id").style.display = "нет"; 

    видимость = «скрытый»;

     document.getElementById("Id").style.visibility = "скрытый"; 

    Пример: Этот пример иллюстрирует использование свойств отображения и видимости в Javascript.

    HTML

    < html >

    < head >

    < Стиль >

    . container {

    Width: 800PX;

             высота: 200 пикселей;

             граница: 2 пикселя сплошного черного цвета;

    }

    . Пойр {

    поплавок: правый;

             поле: 10 пикселей;

    }

    .LEFT {

    132;

             поле: 10 пикселей;

    }

    #Geek {

    0132 ширина: 200 пикселей;

             высота: 55 пикселей;

             цвет фона: желтый;

    }

    #GEEK1 {

    ;

             высота: 55 пикселей;

             цвет фона: фиолетовый;

         }

         style >

    head >

       

    < body >

    < Центр >

    < H2 Стиль = . 0131 "color:green" >

                 GeeksforGeeks

             h2

             < b >

                 Effect из < код >дисплей: "нет" код

                        и < code >visibility="hidden" code >

             b >

             < br >

    < div class = "container" >

                 < div class = "right" >

                     < div id = "geek1" >

                         On clicking the below button this div

                         Тег все еще существует, но невидим.

                     деление >

                     < br >

                     < button onclick = "visibility()" >

                         visibility="hidden"

                    кнопка >

                    

    132 p > Эта строка будет неподвижной и не будет подниматься вверх, поскольку тег

                                 < br > выше.

                     p >

       

                 div >

                 < div class = "left" >

                     < div id = "geek" >

                         On clicking the below button этот тег div не будет существовать.

                    дел.0132 br >

                     < button onclick = "display()" >display="none" button >

                     < p >Эта строка будет отображаться как указанный выше тег div none. p >

       

      0132 div >

             div >

         center >

           

         < script >

         function display() {

             document.getElementById("ngeek").one.style.one

    }

    Видность функции () {

    .

         }

         script >

    body >

    html >

    Вывод: Из приведенного ниже вывода, когда нажимается кнопка отображения , вся страница сдвигается вверх и занимает место удаленного тега

    119, а когда

    кнопка видимости нажата, она не смещается, так как тег

    все еще существует в невидимой форме.


    Следующий

    Скрытие или отображение элементов в HTML с помощью свойства отображения

    Статьи по теме

    Могу ли я отправить электронное письмо… display:none

    Могу ли я отправить электронное письмо… display:none

    Gmail

    Настольная веб-почта

    2019-02

    iOS

    2019-02

    Андроид

    2019-02

    Мобильная веб-почта

    2020-02

    Перспектива

    Окна

    2007 г.

    1 2

    2010

    1 2

    2013

    1 2

    2016

    1 2

    2019

    1 2

    Почта Windows

    2019-09

    1 2

    macOS

    2019-02

    Outlook.com

    2019-02

    iOS

    2019-02

    Андроид

    2019-02

    Яху! Почта

    Настольная веб-почта

    2019-02

    iOS

    2019-02

    Андроид

    2019-09

    АОЛ

    Настольная веб-почта

    2019-02

    iOS

    2019-02

    Андроид

    2019-02

    Мозилла Тандерберд

    ПротонПочта

    Настольная веб-почта

    2020-03

    iOS

    2020-03

    Андроид

    2020-03

    Быстрая почта

    Настольная веб-почта

    2021-07

    ПРИВЕТ

    Настольная веб-почта

    2020-06

    Апельсин

    Настольная веб-почта

    2019-08

    2021-03

    iOS

    2019-08

    Андроид

    2019-08

    LaPoste.

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *