Htmlcss — Открытие статьи в окне


Содержание

Плавное открытие/закрытие окна (CSS свойство clip)

Довольно часто на web-страницах возникает потребность в диалоговых окнах. В начале мы используем «родные» javascript-овые Alert , Confirm , Prompt , но желание большего контроля над окном, рождает, со временем, окна на основе слоев. Своё окошко можно «вылизать» по своему усмотрению и показать пользователю во всей красе и не просто показать, а показать красиво — плавно развернуть окно, а затем свернуть.

Текст сообщения для пользователя. Закрыть окно

Как плавно развернуть и свернуть окно (слой)?

Для простоты попробуем свернуть/развернуть окно по горизонтали (по вертикали выполняется аналогично).

Первым делом создадим слой:

А сейчас, как я и обещал в комментарии, расмотрим свойство clip , изменение которого и дает нужный нам эффект сворачивания/разворачивания. Данное свойство определяет, так называемую, облать усечения. Что же это такое? Обратимся к спецификации CSS2, где сказано: Область усечения определяет, какая часть отображаемого содержимого элемента является видимой. По умолчанию размер и форма области усечения совпадают с размером и формой блока, порожденного элементом. Область усечения может быть изменена при помощи свойства clip .

Рассмотрим пример: пусть задан параграф P шириной 50px высотой 55px. Изначально область усечения совпадает с размером всего параграфа и параграф виден полностью, но если мы зададим свойству clip параграфа значение

то получим следующую картину —

где серая область ограниченная сплошной черной линией — это область которую занимает параграф (P’s block box), а белый прямоуголиник ограниченный пунктирной линией — это область усечения (clip region) заданая свойством clip . Так вот, в отличии от рисунка, на самом деле, все что не попадает в область усечения обрезается и становиться невидимым. Нажмите сюда чтобы применить свойство clip к нашему изображению и сюда чтобы восстановить исходное состояние.

Cсвойству clip параграфа из примера выше задано значение в форме rect (top right bottom left) , где:

  • top — величина отступа верхней стороны области вырезки от верхней стороны элемента
  • right — величина отступа правой стороны области вырезки от левой стороны элемента
  • bottom — величина отступа нижней стороны области вырезки от верхней стороны элемента
  • left — величина отступа левой стороны области вырезки от левой стороны элемента

Также top right bottom left вместо длины отступа могут принимать значение auto, которое означает что данная сторона области вырезки совпадает со стороной элемента. т.е. clip: rect (auto auto auto auto); или просто clip: auto; — все стороны области вырезки совпадают со сторонами элемента, и элемент полностью виден.

Обратиться к свойству clip элемента через javascript можно следующим образом:

ВНИМАНИЕ. IE, включая версию 7, не понимает присвоения значения auto напрямую:

Поэтому для правильной работы во всех браузерах нужно писать:

Ну, вроде бы разобрались со свойством clip и теперь можем вернуться к нашим диалоговым баранам, в смылле диалоговым окнам. При описании стилей слоя dialogWindow мы задали clip: rect(auto 150 auto 150) . Таким образом мы оставили верх и низ элемента без изменений, а правую и левую стороны обрезали каждую по 150px, что в сумме составляет полную ширину элемента — 300px. Т.е. мы просто скрыли элемент.

Попробуем развернуть скрытое окно по горизонтали. Что для этого нужно? Нужно циклически изменять значения right и left соответственно прибавляя и удаляя некоторое значение от текущих значений до тех пор пока left больше нуля, или right мешьше полной ширины слоя (досточно одного из условий). При этом top и bottom не трогаем, они у нас равны auto. Для получения эффекта постепенного появления или скрытия необходимо изменять clip с временными задержками между итерациями, ибо если их не делать то слой появиться очень быстро, и эффекта разворачивая не будет видно (разве что у вас Intel 386 на 20 MHz на который вы поставили Windows 98 — какой ужас). Заметьте, что подобный процесс сворачивания и разворачивания слоя похож на открытие и закрытие занавеса в театре. Поэтому я в названиях функций использую слово Curtain, что в переводе с англ. — зановес, штора.

Аналогично пишем функцию сворачивания слоя:

Ну, вот и все! Однако на этом можно не останавливаться. Аналогично делается сворачивание по вертикали и одновременно по вертикали и по горизонтали.

Самое простое модальное окно на HTML и CSS

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

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

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

Это при проверке, что все отлично работает:

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

ZorNet.Ru — портал вебмастера×

.butksaton-satokavate <
display: inline-block;
text-decoration: none;
margin-right: 7px;
border-radius: 5px;
padding: 7px 9px;
background: #199a36;
color: #fbf7f7 !important;
>

.anelumen <
display: flex;
position: fixed;
left: 0;
top: -100%;
width: 100%;
height: 100%;
align-items: center;
justify-content: center;
opacity: 0;
-webkit-transition: top 0s .7s, opacity .7s 0s;
transition: top 0s .7s, opacity .7s 0s;
>

Цукерберг рекомендует:  Javascript. - С какой книги начать изучение веб-разработки

.anelumen:target <
top: 0;
opacity: 1;
-webkit-transition: none;
transition: none;
>

.anelumen figure <
width: 100%;
max-width: 530px;
position: relative;
padding: 1.8em;
opacity: 0;
background-color: white;
-webkit-transition: opacity .7s;
transition: opacity .7s;
>

.anelumen.lowingnuska figure <
background: #f9f5f5;
border-radius: 7px;
padding-top: 8px;
border: 3px solid #aaabad;
>

.anelumen.lowingnuska figure h2 <
margin-top: 0;
padding-bottom: 3px;
border-bottom: 1px solid #dcd7d7;
>

.anelumen:target figure <
opacity: 1;
>

.anelumen.lowingnuska .compatibg-ukastywise <
text-decoration: none;
position: absolute;
right: 8px;
top: 0px;
font-size: 41px;
>

.anelumen .nedismiseg <
left: 0;
top: 0;
width: 100%;
height: 100%;
position: fixed;
background-color: rgba(10, 10, 10, 0.87);
content: «»;
cursor: default;
visibility: hidden;
-webkit-transition: all .7s;
transition: all .7s;
>

.anelumen:target .nedismiseg <
visibility: visible;
>

Также нужно знать, что стилистика CSS и псевдокласс, это одна из тех которых не полностью используются по функций CSS с множеством интересных потенциальных приложений.

Он запускается когда URL адрес страницы соответствует идентификатору своему элементу или можно высказать по другому, это когда пользователь перескакивает на определенный элемент на странице.

Как сделать чтобы каждая ссылка открывалась в новом окне в WordPress и с помощью HTML

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

Зачем это нужно

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

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

Ссылка в новом окне с помощью WordPress.

Для того, чтобы заставить ссылку открываться в новой вкладке при публикации статьи через WordPress в меню вставки ссылки необходимо поставить галочку напротив «Открывать в новой вкладке».

Ссылка в новом окне html

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

Необходимо в код ссылки добавить атрибут target со значением blank.

Вот как должна выглядеть ссылка:

Как видите, когда речь идет о html не возникает никаких сложностей. Тем не менее, сделать то же самое в WordPress еще легче.

Dobrovoi Master

Модальные всплывающие окна с помощью CSS3 без Javascript

В очередной раз обращаюсь к теме создания модальных(всплывающих) окон. В последнее время меня все больше интересуют, различные техники исполнения всплывающих окон, без использования javascript, плагинов jQuery и т.д. Больший интерес вызывает возможность применения чистых стилей и неисчерпаемого потенциала новых функций CSS3.
Основываясь на разработках некоторых уважаемых буржуинов, они в этом плане ребята ушлые, получаются неплохие результаты, в плане создания модальных окон с помощью CSS3. Задача, в первую очередь состоит в том, чтобы добиться более-менее устойчивой кросбраузерности конечного результата, ну и конечно же, с наименьшими потерями, уменьшить общее количество кода, как в HTML так и в CSS, дабы облегчить жизнь многострадальным труженикам сайтостроения.
Что получается в итоге, у меня в этом плане на сегодняшний день, мы с вами и посмотрим, а заодно, и научимся делать всплывающие модальные окна с помощью «магии» CSS3.

Обновлено: 27.10.2020

Для начала, все те кого заинтересовала эта тема, можете взглянуть на пример работы модальных окон в различных вариантах и скачать исходники:

Не стоит воспринимать данный урок, как руководство к действию, так как на этом этапе удалось добиться уверенной поддержки лишь современными браузерами ( IE 9+, Firefox, Safari, Opera, Chrome ). С оглядкой на то, что древние версии браузера IE еще достаточно популярены среди пользователей, рекомендую рассматривать эту статью в виде некоего эксперимента, демонстрации возможностей CSS3.

Шаг 1. HTML

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

Далее приведу пример базовой html-разметки всплывающих окон и ссылок активации:

Заголовок

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

Шаг 2. CSS

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

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

А может и это вам будет интересно:

Дополнения:

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

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

В обновлении к статье Модальный блок видео на CSS3 расписал способ остановки видео с подключением в работу jQuery и YouTube JavaScript Player API. Видимо стоит продублировать и здесь.

Метод отлично срабатывает для встроенного видео с YouTube. В первую очередь, вам понадобится подключить библиотеку jQuery (если таковая у вас отсутствует), например, с сервиса Google Code:

С помощью API JavaScript, вы сможете управлять проигрывателем Chromeless Player и встроенным проигрывателем YouTube с помощью javaScript кода. Для нашего модального блока с встроенным видео, исполняемый js будет таким:

Цукерберг рекомендует:  Вакансии Playground.ru

Далее, фрейму(iframe) с видео, необходимо присвоить идентификатор, пусть это будет .

Кнопке закрытия модального окна, так же прописываем свой id:

При клике по кнопке с будет вызвана функция player.stopVideo () , окно закроется и воспроизведение видео остановится.
Однако следует понимать, что для других видео-сервисов и танцы с бубнами будут другими))). Хотя всегда есть выбор — это использовать готовые специализированные плагины.

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

Буду признателен, если поделитесь ссылкой на запись в своих соц-сетях:

Как открыть ссылку в новом окне

Как открыть ссылку в новом окне с точки зрения html? Давайте рассмотрим этот вопрос детально.

target=»_blank» — атрибут означает, что ссылка откроется в новой вкладке. По умолчанию все ссылки открываются в той же вкладке.

Открываем новое окно через JavaScript

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

  • Toolbar=yes включает панель закладок, кнопки вперед, назад
  • Location=yes включить адресную строку
  • ScrollBars=yes разрешает скролл


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

Делаем на CSS модальное окно за 3 шага

Здравствуйте, дорогие друзья и коллеги!

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

Благодаря великому и могучему CSS3 мы можем создать на чистом css модальное окно, не прибегая к дополнительным скриптам, модулям и плагинам.

Выглядеть такое модальное окно будет вот так:

Посмотреть пример работы и скачать исходники можно по ссылкам ниже.

Прелесть этого способа заключается в том что он подойдёт абсолютно для любого сайта, не зависимо от того работает ли он на какой то CMS или вообще без неё.

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

Шаг 1. Создаём разметку для модального окна

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

Желательно вставить его в начале или в конце страницы.

Что лучше для сайта: открывать другую страницу сайта в новом окне или в текущем?

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

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

Всплывающее окно для сайта

Дата публикации: 2020-05-19

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

Способ №1 – на чистом html5 и javascript

Как ни странно, сегодня такое окно можно сделать без всяких jquery плагинов. Для этого нам потребуется элемент из html5 – dialog.

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

JavaScript. Быстрый старт

Изучите основы JavaScript на практическом примере по созданию веб-приложения

Обязательно во всплывающем окне должна быть кнопка его закрытия. Хорошо, с разметкой разобрались, а вот и скрипт:

Открытие окон и методы window

Материал на этой странице устарел, поэтому скрыт из оглавления сайта.

Более новая информация по этой теме находится на странице https://learn.javascript.ru/popup-windows.

Всплывающее окно («попап» – от англ. Popup window) – один из старейших способов показать пользователю ещё один документ.

В этой статье мы рассмотрим открытие окон и ряд тонких моментов, которые с этим связаны.

…При запуске откроется новое окно с указанным URL.

Большинство браузеров по умолчанию создают новую вкладку вместо отдельного окна, но чуть далее мы увидим, что можно и «заказать» именно окно.

Блокировщик всплывающих окон

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

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

Как же браузер понимает – посетитель вызвал открытие окна или нет?

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

А если код был на странице и выполнился автоматически при её загрузке – у него этого флага не будет. Попапы будут заблокированы.

Полный синтаксис window.open

Функция возвращает ссылку на объект window нового окна, либо null , если окно было заблокировано браузером.

url URL для загрузки в новое окно. name Имя нового окна. Может быть использовано в параметре target в формах. Если позднее вызвать window.open() с тем же именем, то браузеры (кроме IE) заменяют существующее окно на новое. params Строка с конфигурацией для нового окна. Состоит из параметров, перечисленных через запятую. Пробелов в ней быть не должно.

Значения параметров params .

  1. Настройки расположения окна:

left/top (число)

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

Ширина/высота нового окна. Минимальные значения ограничены, так что невозможно создать невидимое окно с нулевыми размерами.

Если координаты и размеры не указаны, то обычно браузер открывает не окно, а новую вкладку.

  1. Свойства окна:
Цукерберг рекомендует:  Как освоить Python-разработку

menubar (yes/no) Скрыть или показать строку меню браузера. toolbar (yes/no) Показать или скрыть панель навигации браузера (кнопки назад, вперёд, обновить страницу и остальные) в новом окне. location (yes/no) Показать/скрыть поле URL-адреса в новом окне. По умолчанию Firefox и IE не позволяют скрывать строку адреса. status (yes/no) Показать или скрыть строку состояния. С другой стороны, браузер может в принудительном порядке показать строку состояния. resizable (yes/no) Позволяет отключить возможность изменять размеры нового окна. Значение no обычно неудобно посетителям. scrollbars (yes/no) Разрешает убрать полосы прокрутки для нового окна. Значение no обычно неудобно посетителям.

  1. Ещё есть небольшое количество не кросс-браузерных свойств, которые обычно не используются. Вы можете узнать о них в документации, например MDN: window.open.

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

  • Если при вызове open указан только первый параметр, параметр отсутствует, то используются параметры по умолчанию. Обычно при этом будет открыто не окно, а вкладка, что зачастую более удобно.
  • Если указана строка с параметрами, но некоторые yes/no параметры отсутствуют, то браузер выставляет их в no . Поэтому убедитесь, что все нужные вам параметры выставлены в yes .
  • Когда не указан top/left , то браузер откроет окно с небольшим смещением относительно левого верхнего угла последнего открытого окна.
  • Если не указаны width/height , новое окно будет такого же размера, как последнее открытое.

Доступ к новому окну

Вызов window.open возвращает ссылку на новое окно. Она может быть использована для манипуляции свойствами окна, изменения URL, доступа к его переменным и т.п.

В примере ниже мы заполняем новое окно содержимым целиком из JavaScript:

Модальные окна на CSS

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

Внешний вид, размеры и оформление таких попапов совершенно разнообразными — с оверлеем, тенюшками, анимациями — всего не счесть. Объединяет их только, пожалуй, тот факт, что обычно они выводятся в самом центре страницы — как по горизонтали, так и по вертикали. И центрирование это производится средствами JS. Я не буду вдаваться в подробности этих расчетов, опишу их лишь вкратце:

HTML-код попапа обычно имеет такую структуру:

— Попап вместе с содержимым

И CSS (здесь и ниже я умышленно буду опускать написание некоторых свойств, необходимых лишь для некоторых браузеров и их версий, оставив лишь самое основное):

.popup__overlay <
position : fixed ;
left : 0 ;
top : 0 ;
background : #000 ;
opacity : . 5 ;
filter : alpha( opacity=50 );
z-index : 999
>
.popup <
position : absolute ;
width : 20% ;
z-index : 1000 ;
border : 1px solid #ccc ;
background : #fff
>

JS определяет браузер и версию браузера, и на основании этого высчитывает размеры рабочей области и размеры самого попапа (если они не заданы), а затем производятся нехитрые вычисления положения его левого верхнего угла (css-свойства left и top для .popup). Многие плагины также реагируют на изменение размеров страницы, пересчитывая всё это дело каждый раз, с тем, чтобы попап располагался точно в центре рабочей области.

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

Этим и займёмся.

Ниже я приведу пример попапа, работающего во всех мажорных версиях основных браузеров. Для корректной его работы в IE div class =»popup__overlay»>
div class =»popup»> div >
div >

.popup__overlay <
position : fixed ;
left : 0 ;
top : 0 ;
width : 100% ;
height : 100% ;
z-index : 999
>
.popup <
>

Фиксированные размеры

Самый простой вариант. Ничего нового изобретать не нужно:

.popup <
left : 50% ;
top : 50% ;
width : 400px ;
height : 200px ;
margin-left : -200px ;
margin-top : -100px
>

Отрицательные margin’ы в половину ширины и высоты — банально и скучно, ничего оригинального в этом нет. Идём дальше.

Размеры попапа зависят от содержимого

Сперва — выравнивание по горизонтали — это вроде бы проще. Если попап фиксированной ширины — то достаточно будет следующего:

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

Вертикальное выравнивание. Здесь уже становится интересно. С такой задачей, конечно, без проблем справилась бы таблица или эмуляция таблицы с помощью display: table & display: table-cell, но заставить такое работать в старых IE — себе дороже. Таблица также отпадает — по понятным причинам.

Итак, margin уже отпадает — размеров мы не знаем. Вспоминаем, что же есть из свойств с подобными эффектами. Ага, text-align. Но только для инлайновых элементов. ОК. Кажется, сам Бог велел использовать display: inline-block — блочный элемент, к которому можно было бы применить свойства для инлайновых элементов. С поддержкой этого свойства у всех браузеров тоже всё, можно сказать, в порядке. Код становится примерно таким:

.popup__overlay <
position : fixed ;
left : 0 ;
top : 0 ;
width : 100% ;
height : 100% ;
z-index : 999 ;
text-align : center
>
.popup <
display : inline — block ;
vertical-align : middle
>

Остаётся вертикальное выравнивание — нам подойдёт vertical-align. В любой другой ситуации было бы также уместно использовать line-height, но поскольку у нас нет фиксированной высоты страницы (line-height в данном контексте), здесь использовать её нельзя. На помощь приходит один трюк с вертикальным выравниванием элементов неизвестных размеров. Я точно помню, что нашел этот способ на Хабре, но, к сожалению, не смог найти ссылку на тот топик. Заключается этот способ в следующем: добавляется inline-block элемент нулевой ширины и 100%-ой высоты родителя, который «расхлопывает» высоту строки до 100% высоты родителя, то есть до высоты рабочей области страницы. Сделаем это изящнее — вместо лишней разметки воспользуемся псевдоэлементами:

.popup__overlay :after <
display : inline — block ;
width : 0 ;
height : 100% ;
vertical-align : middle ;
content : »
>

Осталось добавить полупрозрачное затемнение оверлея — с этим справится rgba. Всё! Теперь положение попапа регулируется только средствами браузера на уровне CSS.

Из замеченных минусов метода — порой возникают глюки с отображением в IE 6-7, в частности, при использовании флоатов.

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

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

Понравилась статья? Поделиться с друзьями:
Все языки программирования для начинающих