Только CSS: сворачивающееся выскакивающее окно
Трюк с использованием скрытой радио кнопки или чекбокса, селектора псевдо класса :checked и комбинатора смежных элементов (~) открывает доступ к реализации различных эффектов на чистом CSS. В качестве примера можно посмотреть на закладки, для реализации которых не использовалось ни строчки JavaScript.
Попробуем сделать сворачивающееся выскакивающее окно. Его можно использовать для кнопок/ссылок, чтобы вывести HTML содержание подсказки по нажатию.
Структура HTML
Нам нужен чекбокс для реализации функционала включения/выключения (он будет скрыт). Затем метка с атрибутом for
соответствующим атрибуту id
элементу ввода. Таким образом, мы сможем нажимать ее для переключения чекбокса.
Метка содержит в себе набор элементов span
. Элемент span
.box
является контейнером для HTML содержания выскакивающего окна. В него можно размещать любые строчные элементы. Попытки поместить элементы div
и заголовки приводили к тому, что некоторые браузеры выводили их содержание вне выскакивающего окна. Размещение элемента .box
вне метки также возможно, так как с помощью селектора ~
будет доступен метод его скрытия/вывода. Но, размещая элемент .box
внутри метки, можно сделать его позиционирование относительным к метке, как и следует для выскакивающего окна.
<input type="checkbox" id="popup" class="popUpControl"> <label for="popup"> Нажми меня! <span class="box"> Содержание выскакивающего окна </span> </label>
Основная часть CSS
Нашей целью является абсолютное позиционирование элемента .box
по отношению к метке, так что он будет выскакивать, привязанный к ней. По умолчанию элемент будет скрыт за счет полной прозрачности. Также мы добавим изменение масштаба до нуля, наклон и трансформации. А когда он выводится при нажатии на чекбокс, мы будем изменять масштаб обратно и делать его видимым.
.box { position: absolute; left: 0; top: 100%; z-index: 100; /* Предотвращаем мерцание в Safari 5.1 */ -webkit-backface-visibility: hidden; -moz-border-radius: 20px; -webkit-border-radius: 20px; border-radius: 20px; width: 260px; padding: 20px; opacity: 0; -webkit-transform: scale(0) skew(50deg); -moz-transform: scale(0) skew(50deg); -ms-transform: scale(0) skew(50deg); -o-transform: scale(0) skew(50deg); -webkit-transform-origin: 0px -30px; -moz-transform-origin: 0px -30px; -ms-transform-origin: 0px -30px; -o-transform-origin: 0px -30px; -webkit-transition: -webkit-transform ease-out .35s, opacity ease-out .4s; -moz-transition: -moz-transform ease-out .35s, opacity ease-out .4s; -ms-transition: -ms-transform ease-out .35s, opacity ease-out .4s; -o-transition: -o-transform ease-out .35s, opacity ease-out .4s; } .popUpControl { display: none; } .popUpControl:checked ~ label > .box { opacity: 1; -webkit-transform: scale(1) skew(0deg); -moz-transform: scale(1) skew(0deg); -ms-transform: scale(1) skew(0deg); -o-transform: scale(1) skew(0deg); }
Здесь содержится самая важная часть кода CSS, реальный пример будет содержать еще несколько правил для задания стилей. Смотрите исходники, прилагающиеся к уроку.
Изменяем текст кнопки
Идея не является жизненно необходимой, но добавляет шарм. Текст кнопки будет изменяться, когда открыто выскакивающее окно. Скрываем текст внутри кнопки, когда она имеет состояние :checked и вставляем новый текст:
<input type="checkbox"> <label> <span>Текст кнопки</span> </label>
[type=checkbox]:checked ~ label span { display: none; } [type=checkbox]:checked ~ label:before { content: "Текст в отмеченном состоянии"; }
Все прекрасно, но... JavaScript лучше
Не смотря на то, что решение задачи возможно реализовать на чистом CSS, лучше всего использовать JavaScript для таких случаев. Что нужно будет сделать в коде JavaScript:
- Переключить классы "open" и "closed" для элемента .box (это лучше, чем использовать чекбокс).
- Изменить текст без использования генерированного содержания CSS.
Но для всех остальных аспектов решения следует оставить использование CSS. Стили, переходы и трансформации принадлежат области стилей, а не функционала.
Источник: http://feedproxy.google.com/~r/ruseller/CdHX/~3/pqXFWfGsbU8/lessons.php
Дайджест новых статей по интернет-маркетингу на ваш email
Новые статьи и публикации
- 2024-04-17 » 23 сервиса для эффективного экспресс-аудита любого сайта
- 2024-04-08 » Яндекс переходит на новую версию Wordstat
- 2024-04-08 » Яндекс интегрировал в свой облачный сервис эмпатичную нейросеть
- 2024-04-08 » Новая версия нейросети Claude превзошла по мощности аналоги Google и OpenAI
- 2024-04-08 » Как пользоваться GPT 4 и Claude бесплатно и без VPN
- 2024-03-13 » Стратегии SEO на 2024 год
- 2024-03-13 » Как использовать анимацию с помощью JavaScript-библиотеки GSAP
- 2024-03-13 » Использование GSAP 3 для веб-анимации
- 2024-03-13 » Cогласование топографической съёмки с эксплуатирующими организациями
- 2024-02-19 » Теряются лиды? Как настроить сквозную аналитику
- 2024-02-17 » Мерч и IT: на что обратить внимание в 2024 году
- 2024-02-16 » Копируем с RSync: основные примеры синхронизации файлов
- 2024-02-15 » Лучшие noCode AI платформы для создания диалоговых ботов
- 2024-02-14 » Факторы ранжирования Google 2024 — исследование Semrush
- 2024-02-12 » Перенос сайта на другой хостинг
- 2024-02-05 » В России сформирован реестр хостинг-провайдеров
- 2024-02-04 » Использование SSH для подключения к удаленному серверу Ubuntu
- 2024-02-03 » Подключаемся к серверу за NAT при помощи туннеля SSH. Простая и понятная инструкция
- 2024-02-02 » Настройка CI/CD для Gitlab-репозитория: схемы и гайд по шагам
- 2024-02-01 » GitLab CI Pipeline. Запуск сценария через SSH на удаленном сервере
- 2024-01-29 » Introduction to GitLab’s CI/CD for Continuous Deployments
- 2024-01-26 » Настройка GitLab CI/CD
- 2024-01-25 » Установка shell gitlab runner
- 2024-01-25 » Установка и регистрация gitlab-runner в docker контейнере
- 2024-01-25 » Переменные Gitlab-Ci
- 2024-01-25 » Настройка CI/CD в GitLab для синхронизации проекта с веб-серверами
- 2024-01-25 » Копирование файлов scp
- 2024-01-21 » Бездепозитные бонусы от казино: обзор условий и правил использования
- 2024-01-18 » Современная обработка ошибок в PHP
- 2024-01-18 » Пример шаблона проектирования MVC в PHP
Если ты рождён без крыльев, не мешай им расти. (Коко Шанель / ЖИТЕЙСКАЯ МУДРОСТЬ ) |
Мы создаем сайты, которые работают! Профессионально обслуживаем и продвигаем их , а также по всей России и ближнему зарубежью с 2006 года!
Как мы работаем
Заявка
Позвоните или оставьте заявку на сайте.
Консультация
Обсуждаем что именно Вам нужно и помогаем определить как это лучше сделать!
Договор
Заключаем договор на оказание услуг, в котором прописаны условия и обязанности обеих сторон.
Выполнение работ
Непосредственно оказание требующихся услуг и работ по вашему заданию.
Поддержка
Сдача выполненых работ, последующие корректировки и поддержка при необходимости.