Блог Vaden Pro

Все о самостоятельном создании и продвижении сайтов

CSS прозрачность и особенности применения

Дата:28.12.15 в 13:04
Раздел: 

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

Особенности применения прозрачности к элементам верстки

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

Пример прозрачности блока на сайте

Теория и практика

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

HTML

<div class="block"> 
	<img width="400" src="img.jpg">
	<div class="fon"></div>
</div>

CSS

.fon {
	display:block;
	position:absolute;
	top:0px;
	width:400px;
	height:275px;
	background:#5a7faf;
	filter:progid:DXImageTransform.Microsoft.Alpha(opacity=90); /* IE 5.5+*/
       -moz-opacity: 0.9; /* Mozilla 1.6 и ниже */
       -khtml-opacity: 0.9; /* Konqueror 3.1, Safari 1.1 */
        opacity: 0.9; /* CSS3 - Mozilla 1.7b +, Firefox 0.9 +, Safari 1.2+, Opera 9+ */
 
}
.block {
	display:block;
	width:400px;
	margin:0px auto;
}

В браузере будет примерно такая картинка:

Практический пример прозрачности

Попрактиковались? Теперь подойдем ближе к теоретической стороне рассматриваемого вопроса.

Свойство opacity, которое отвечает за эффект CSS прозрачности, было создано на основе спецификации CSS3. В его значении указывается степень непрозрачности элемента в десятичных долях. Говоря более понятным языком, запись значения 0.9 для изучаемого свойства в нашем примере означает, что элемент, которому присвоено свойство, не прозрачен на 90%. Соответственно, если будет указан в значении 0, то наш блок станет полностью прозрачным и не будет заметен. Не смотря на это, он не исчезает со страницы, так как остается зарезервированное место для него среди элементов.

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

  • filter:progid:DXImageTransform.Microsoft.Alpha(opacity=90); - этот код предназначен для оптимизации работы IE. Именно таким способом формируется прозрачность блоков в этих браузерах. Этот фильтр относится к Alpha DirectX, в отличие от обычного свойства, в этом фильтре непрозрачность устанавливается не в десятичных долях, а в процентах.
  • -moz-opacity – вендорное свойство, которое отвечает за прозрачность блоков в старых версиях Firefox.
  • -khtml-opacity – этот вендор оптимизирует работу свойства в Safari и Konqueror.

К нежелательным эффектам использования этих вспомогательных свойств относится их неспособность пройти проверку на валидацию. Кстати само свойство opacity без проблем проходит проверку только в CSS Level 3 (так как свойство было включено именно в эту спецификацию).

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

CSS

zoom: 1; 

Это свойство должно относиться к стилю просвечиваемого блока.

На заметку

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

HTML

<div class="block"> 
	<p>Контент, который просвечивать не надо</p>
	<div class="fon"></div>
</div>

CSS

.fon {
	display:block;
	position:absolute;
	top:0px;
	width:400px;
	height:275px;
	background: #5a7faf;
	opacity:0.5;
        filter:progid:DXImageTransform.Microsoft.Alpha(opacity=50); 
        -moz-opacity: 0.5; 
        -khtml-opacity: 0.5; 
}
.block {
	display:block;
	width:400px;
	margin:0px auto;
}
p {
	text-transform:uppercase;
	text-align:center;
	position:relative;
	z-index:10;
	padding-top:100px;
}

Вот так будет выглядеть наше решение в браузере

Не просвечивающийся контент

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

Затемнение фона

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

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

Наш предыдущий код принимает вид (HTML оставляем без изменений):

CSS

.fon {
	display:block;
	position:absolute;
	top:0px;
	width:400px;
	height:275px;
	background: #5a7faf;
	opacity:0.5;
        filter:progid:DXImageTransform.Microsoft.Alpha(opacity=50); 
        -moz-opacity: 0.5; 
        -khtml-opacity: 0.5; 
}
.block {
	display:block;
	width:400px;
	margin:0px auto;
}
p {
	text-transform:uppercase;
	text-align:center;
	position:relative;
	z-index:10;
	padding-top:100px;
}

По итогу получим вот такое затемнение

затемненный фон

В каких браузерах работает?

6.0+ 1.0+ 9.5+ 3.1+ 2.0+

Оценок: 2 (средняя 5 из 5)

Оценка: 
Ключевые слова: 
Понравилась статья? Расскажите о ней друзьям:

Курсы по CSS (в открытом доступе)