Как в php сделать диалоговое окно

Добавил пользователь Евгений Кузнецов
Обновлено: 18.09.2024

Элемент HTML5 dialog обеспечивает выполнение функции в диалоговом окне на веб-странице. Диалоговое окно элемента dialog находится в дереве DOM, и может быть оформлен с помощью обычных CSS.

Простые примеры элемента dialog

Сам по себе элемент dialog визуально ни чего не покажет, нужно использовать JavaScript API, чтобы открыть и закрыть диалоговое окно.

.show() и .close() API

Закрыть Открыть диалоговое окно!

Стиль для диалогового окна

Добавить произвольный стиль к элементу dialog, можно так же как и к другим элементам блока: nav, div, footer и т.д.

Стили для элемента dialog так же легко как и для div !

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

Функция .showModal() API

Что бы сделать диалоговое окно модальным, нужно вызвать функцию .showModal() вместо .show() . Заметьте, вы не можете выделить текст в фоновом режиме или нажать кнопку для выбора кнопок в открытом диалоговом окне.

Этот слой поверх окон других элементов, независимо от значений z-index , в том числе ранее открытых модальных диалоговых окон.

Добавление фона для диалогового окна

Что бы залить фон цветом, можно использовать псевдо-элемент ::backdrop .

Тусклый фон, с использованием ::backdrop . Он выделяет диалоговое окно скрывая остальное!

Закрыть Открыть диалоговое окно с фоном

Возврат значений из диалогового окна

Вы можете передать аргумент для .close() . Диалоговое окно возвращает заданное значение свойства .returnValue .

Диалоговое окно получает аргумент close(). Это будет отражено в .returnValue

Преимущества элемента

Конечно, можно использовать библиотеку jQuery или другие JavaScript для получения такого результата. Но dialog является элементом HTML и для него не нужно подключать сторонние библиотеки что бы сделать всплывающее диалоговое окно.

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

Позиционировать

Диалоги имеют какое-то особые характеристики позиционирования. По умолчанию когда вы вызываете dialog.show() диалоговое окно располагается по центру окна просмотра. Конечно, вы можете изменить это, используя обычные позиционирование в CSS, например top: 15px .

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

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

Открыть несколько окон диалога

Если диалоги не модальные, они ведут себя как несколько элементов

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

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

Проблема

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

Вы можете найти решение с помощью плагинов. Но есть так много вариантов и вопросов, которые следует учитывать:


Практический курс по верстке адаптивного сайта с нуля!

Изучите курс и узнайте, как верстать современные сайты на HTML5 и CSS3

Зависимости. Возможно, вам не нужны jQuery, React или подобное.

Поддержка. Кто его поддерживает? Как скоро решаются вопросы?

Расширяемость. Насколько легко настроить и добавить новые функции?

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

Решение

Введите элемент HTML dialog! Представленный в HTML 5.2 (2018), dialog является оригинальным элементом браузера для создания всплывающих окон и модалов.

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

HTML5 и CSS3 позволяют создавать модальные окна с необычайной легкостью.

demo
sourse

Разметка HTML

Первый шаг на пути к созданию модального окна - простая и эффективная разметка:

Мы просто создаем ссылку “Открыть модальное окно”, которая указывает на элемент div openModal, который размещен ниже. Внешний вид формируется стилями в классе modalDialog.

Внутри элемента div размещается содержание модального окна. Также нужно организовать ссылку для закрытия окна. Для примера разместим простой заголовок и несколько параграфов. Полная разметка для нашего примера будет выглядеть следующим образом:

Стили

Создаем класс modalDialog и начинаем формировать внешний вид:

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

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

В завершении устанавливаем переходы для вывода нашего модального окна и скрываем его в неактивном состоянии.

Может быть вы не знаете свойство pointer-events, но оно позволяет контролировать как элементы будут реагировать на нажатие кнопки мыши. Мы устанавливаем значение его значение для класса modalDialog, так как ссылка не должна реагировать на нажатие кнопки мыши когда активен псевдо класс “:target”.

Теперь добавляем псевдо класс :target и стили для модального окна.

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

Мы определяем ширину модального окна и положение на странице. Также определяем градиент для фона и скругленные углы.

Закрываем окно

Теперь нужно реализовать функционал закрытия окна. Формируем внешний вид кнопки:

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

5 последних уроков рубрики "CSS"

Забавные эффекты для букв

Небольшой эффект с интерактивной анимацией букв.

Реализация забавных подсказок

Небольшой концепт забавных подсказок, которые реализованы на SVG и anime.js. Помимо особого стиля в примере реализована анимация и трансформация графических объектов.

Анимированные буквы

Эксперимент: анимированные SVG буквы на базе библиотеки anime.js.

Солнцезащитные очки от первого лица

Прикольный эксперимент веб страницы отображение которой осуществляется “от первого лица” через солнцезащитные очки.


создайте скрипт и в url передавайте ему путь и имя файла $file = "path/to/file";

пример и друпала

HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker


Цитата (Nogard7491 @ 9.03.2013 - 13:52)
Можно ли посредством JS открыть окно на скачивание файла?

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

хром молча скачает в папку по умолчанию.

а пример php - щас проверю

HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker

HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker


Цитата (Игорь_Vasinsky @ 9.03.2013 - 14:03)
хром молча скачает в папку по умолчанию.

HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker


Цитата (Игорь_Vasinsky @ 9.03.2013 - 14:07)
хром - гомно?
Цитата
а открывать файл, или сохранять браузер решает сам, на основании полученных заголовков.

чё за заголовок?

HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker


Цитата (Игорь_Vasinsky @ 9.03.2013 - 14:16)
чё за заголовок?


killer8080
просто открывает файл для проигрывания, но не открывает окно сохранения
P.S. сделать всё нужно на чистом JS, без PHP


Цитата (Nogard7491 @ 9.03.2013 - 14:22)
killer8080
просто открывает файл для проигрывания, но не открывает окно сохранения
Цитата (killer8080 @ 9.03.2013 - 14:01)
а открывать файл, или сохранять браузер решает сам, на основании полученных заголовков.

я думал есть ещё какой то заголовок основываясь на твоей цитате

Цитата
а открывать файл, или сохранять браузер решает сам, на основании полученных заголовков.

HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker


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


Цитата (Nogard7491 @ 9.03.2013 - 14:27)
я плагин пишу для chrome

Подписаться на тему
Уведомление на e-mail об ответах в тему, во время Вашего отсутствия на форуме.

Читайте также: