Статьи

11 классических техник CSS, упрощенных с помощью CSS3

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


Я уверен, что вы слышали о CSS в целом. Синтаксис CSS3 не сильно отличается; тем не менее, сила CSS3 намного больше. Как вы увидите из этих одиннадцати приемов, вы можете иметь несколько фонов, динамически изменять их размер, радиусы границ, тени текста и многое другое!

Вот что официальный (или, по крайней мере, то, что я считаю официальным) веб-сайт CSS3, css3.info , может сказать о CSS3:

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

Вот 11 техник, которые я покажу вам, как воссоздать с помощью CSS3. Я покажу вам, как создавать их с помощью CSS2 (или JavaScript), а затем со свойствами CSS3. Помните — эти эффекты будут работать только в современных браузерах, которые реализуют эти функции CSS3. Лучше всего просматривать их в Safari 4.

  1. Закругленные углы
  2. Box Shadow
  3. Тень текста
  4. Необычный шрифт
  5. помутнение
  6. RGBA
  7. Размер фона
  8. Несколько фонов
  9. Колонны
  10. Граница изображения
  11. Анимации
Закругленные углы

Вероятно, мой любимый в этом списке, закругленные углы предоставляют разработчику так много вариантов. Вы можете создать закругленную угловую кнопку за считанные секунды. Мое любимое занятие — установить градиентный фон для повторения вдоль оси x, а затем применить закругленные углы, чтобы сделать очень привлекательную кнопку Web 2.0.

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

01
02
03
04
05
06
07
08
09
10
11
<script type=»text/javascript» src=»http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js»></script>
<script type=»text/javascript» src=»js/jquery.corners.js»></script>
<script type=»text/javascript»>
$(function(){
    $(‘.box’).corners(’10px’);
});
</script>
 
<div class=»box»>
    <!—CONTENT—>
</div>

Классический метод использует jQuery вместе с плагином JavaScript под названием Corners .

01
02
03
04
05
06
07
08
09
10
11
<style type=»text/css»>
.box {
border-radius: 10px;
-moz-border-radius: 10px;
-webkit-border-radius: 10px;
}
</style>
 
<div class=»box»>
    <!—CONTENT—>
</div>

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

Посмотреть демо.

Box Shadow

Тени от ящиков дают вам очень мощный инструмент. 99% времени, когда я занимаюсь дизайном, я использую тени для чего-то. Еще раз, я буду использовать плагин jQuery, чтобы позаботиться о классическом подходе, потому что, честно говоря, попытка выяснить это только с помощью CSS сбивает с толку. Почему я должен тратить свое время, тратя время на отрицательные поля, когда уже написано что-то, что помогает мне? Пока мой дизайн выглядит хорошо, когда у людей отключен JavaScript, я отлично использую плагин jQuery.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
<script type=»text/javascript» src=»http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js»></script>
<script type=»text/javascript» src=»js/jquery.dropShadow.js»></script>
<script type=»text/javascript»>
$(function(){
    $(‘.box’).dropShadow({
        left: 5,
        top: 5,
        opacity: 1.0,
        color: ‘black’
    });
});
</script>
 
<div class=»box»>
    <!—CONTENT—>
</div>

Я использую плагин dropShadow . Просто и то, что я хотел; хотя я бы предпочел использовать только CSS;).

01
02
03
04
05
06
07
08
09
10
11
<style type=»text/css»>
.box {
box-shadow: 5px 5px 2px black;
-moz-box-shadow: 5px 5px 2px black;
-webkit-box-shadow: 5px 5px 2px black;
}
</style>
 
<div class=»box»>
    <!—CONTENT—>
</div>

Значения для свойств тени блока: X-Offset Y-Offset Blur. Гораздо проще, чем импортировать два файла JavaScript, и НАМНОГО проще, чем возиться с фоновыми изображениями и отрицательными полями.

Посмотреть демо.

Тень текста

Если вы когда-нибудь читали учебник о том, как создать эффект высокой печати в Photoshop, вы будете знать, что используется эффект тени. Создать печатный текст очень просто, просто следуйте этому уроку на Line25 Криса Спунера.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<style type=»text/css»>
.font {
font-size: 20px;
color: #2178d9;
}
.fonts {
position: relative;
}
.fonts .font {
position: absolute;
z-index: 200;
}
.fonts .second {
top: 1px;
color: #000;
z-index: 100;
}
</style>
 
<div class=»fonts»>
    <span class=»font»>The quick brown fox jumps over the lazy dog.
    <span class=»font second»>The quick brown fox jumps over the lazy dog.
</div>

Вместо того, чтобы использовать плагин jQuery на этот раз, я просто использовал несколько простых трюков CSS, чтобы абсолютно позиционировать текст за другой копией текста. Единственное плохое в том, что вы не используете CSS3 в этой ситуации, это то, что вы получите две копии текста, если CSS отключен.

01
02
03
04
05
06
07
08
09
10
11
<style type=»text/css»>
.font {
font-size: 20px;
color: #2178d9;
}
.font {
text-shadow: 0 1px 0 #000;
}
</style>
 
<span class=»font»>The quick brown fox jumps over the lazy dog.

Если вы планируете использовать размытые тени для текста (третий «параметр» в свойстве text-shadow), я не знаю, как бы вы достигли этого с помощью чистого CSS и без изображений.

Посмотреть демо.

Необычный шрифт

Мы давно об этом мечтали, но вы, наконец, можете отображать «причудливые шрифты» в Интернете, не полагаясь на JavaScript. Конечно, это вызывает некоторые проблемы с распространением платных шрифтов через Интернет. Во всяком случае, я представляю вам @ font-face.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
<script type=»text/javascript» src=»http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js»></script>
<script type=»text/javascript» src=»js/cufon.js»></script>
<script type=»text/javascript» src=»js/loyal.js»></script>
<script type=»text/javascript»>
$(function(){
    Cufon.replace(‘.classic .font’);
});
</script>
<style type=»text/css»>
.font {
font-size: 20px;
}
</style>
 
<span class=»font»>The quick brown fox jumps over the lazy dog.

Я решил использовать Cufón для замены текста. Я не собираюсь объяснять, как его использовать, потому что у Джеффри уже есть потрясающий скринкаст .

01
02
03
04
05
06
07
08
09
10
11
12
<style type=»text/css»>
@font-face {
font-family: ‘Loyal’;
src: url(‘loyal.ttf’);
}
.font {
font-family: Loyal;
font-size: 20px;
}
</style>
 
<span class=»font»>The quick brown fox jumps over the lazy dog.

Мы создаем семейство шрифтов с помощью @ font-face, а затем используем его как значение для font-family. Около месяца назад Майкл Оуэнс написал здесь статью, которая довольно хорошо объясняет @ font-face.

Посмотреть демо.

помутнение

Если вы недавно посещали редизайн сайта Envato, вы могли заметить, что в нем много прозрачных элементов. Хотя это достигается с помощью прозрачных PNG, вы можете добиться аналогичного эффекта, используя свойство непрозрачности. Теперь свойство opacity существует уже некоторое время, но у нашего любимого IE есть свои свойства.

01
02
03
04
05
06
07
08
09
10
11
<style type=»text/css»>
.box {
opacity: .6;
-ms-filter: «progid:DXImageTransform.Microsoft.Alpha(Opacity=50)»;
filter: alpha(opacity=60);
}
</style>
 
<div class=»box»>
    <!—CONTENT—>
</div>
1
2
3
4
5
6
7
8
9
<style type=»text/css»>
.box {
opacity: .6;
}
</style>
 
<div class=»box»>
    <!—CONTENT—>
</div>

В CSS3 мы просто исключили два свойства, которые были специфичны для IE, не правда ли?

Посмотреть демо.

RGBA

Все знают, что означает RGB (красный, зеленый, синий), но что означает A? Это означает альфа, что относится к прозрачности.

Помимо закругленных углов, RGBA — мое следующее наиболее используемое свойство CSS3. Иногда я просто хочу добавить несколько светло-белого / черного фона к ссылкам навигации, когда пользователь наводит на них курсор мыши. Это гораздо проще, чем создавать новое изображение для каждого цвета; однако, с небольшим количеством PHP это делает вещи намного проще.

Учитывая, что это не статья по PHP, я не буду переходить к PHP. Просто сохраните этот файл как rgba.php, а когда вам нужен определенный цвет RGBA, сделайте фоновый «цвет» как URL (rgba.php? R = R & g = G & b = B & a = A).

01
02
03
04
05
06
07
08
09
10
11
12
13
14
<?php
$image = imagecreatetruecolor(1, 1);
$r = (int)$_GET[‘r’];
$g = (int)$_GET[‘g’];
$b = (int)$_GET[‘b’];
$a = (float)$_GET[‘a’];
$white = imagecolorallocate($image, 255, 255, 255);
$color = imagecolorallocatealpha($image, $r, $g, $b, 127*(1-$a));
imagefill($image, 0, 0, $white);
imagefilledrectangle($image, 0, 0, 1, 1, $color);
 
header(‘Content-type: image/png’);
imagepng($image);
?>

Теперь просто примените это к div …

1
2
3
4
5
6
7
8
9
<style type=»text/css»>
.box {
background: url(rgba.php?r=239&g=182&b=29&a=.25);
}
</style>
 
<div class=»box»>
    <!—CONTENT—>
</div>
1
2
3
4
5
6
7
8
9
<style type=»text/css»>
.box {
background: rgba(239, 182, 29, .25);
}
</style>
 
<div class=»box»>
    <!—CONTENT—>
</div>

Посмотреть демо.

Размер фона

Свойство фонового размера — удивительная вещь, которую нужно иметь на поясе инструментов при создании жидкого макета. Примером этого может быть наличие фонового изображения для контейнера для боковой панели. Классический способ сделать это потребовал бы настройки, чтобы изображение повторялось вдоль оси y, но с CSS3 это все равно, что добавить еще одно свойство фона.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<style type=»text/css»>
.box {
position: relative;
overflow: hidden;
}
    .box img {
    position: absolute;
    top: 0;
    left: 0;
    width: 50%;
    height: 50%;
    z-index: 100;
    }
    .box .content {
    position: absolute;
    z-index: 200;
    }
</style>
 
<div class=»box»>
    <div class=»content»>
        <!—CONTENT—>
    </div>
    <img src=»http://nettuts.s3.amazonaws.com/423_screenr/200×200.jpg» alt=»» />
</div>
01
02
03
04
05
06
07
08
09
10
11
12
<style type=»text/css»>
.box {
background: #ccc url(http://nettuts.s3.amazonaws.com/423_screenr/200×200.jpg) no-repeat;
-webkit-background-size: 50%;
-o-background-size: 50%;
-khtml-background-size: 50%;
}
</style>
 
<div class=»box»>
    <!—CONTENT—>
</div>

К сожалению, это свойство не реализовано в Firefox (V3.5.2) на момент написания этой статьи.

Посмотреть демо.

Несколько фонов

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

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
<style type=»text/css»>
.box {
width: 200px;
height: 150px;
background: url(images/bg.png) repeat-x;
}
    .box2 {
    width: 100%;
    height: 100%;
    background: url(images/text.png) center center no-repeat;
    }
</style>
 
<div class=»box»>
    <div class=»box2″>
        <!—CONTENT—>
    </div>
</div>

Классический метод довольно очевиден, просто оберните div другим div и так далее для каждого фона, который вам нужен. Создает красивый код, не так ли?

01
02
03
04
05
06
07
08
09
10
11
<style type=»text/css»>
.box {
width: 200px;
height: 150px;
background: url(images/text.png) center center no-repeat, url(images/bg.png) repeat-x;
}
</style>
 
<div class=»box»>
    <!—CONTENT—>
</div>

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

Посмотреть демо.

Колонны

Это самое интересное свойство CSS3, которое я нашел. Это не то, что вы часто видите в веб-дизайне. Я сам видел только газетные колонки один или два раза; Однако мне нравится, как эффект выглядит, когда все сделано правильно. Обычно вы разделяете содержимое на div и перемещаете эти div, но я нашел плагин jQuery, который динамически отображает столбцы.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
<script type=»text/javascript» src=»http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js»></script>
<script type=»text/javascript» src=»js/jquery.columnize.js»></script>
<script type=»text/javascript»>
$(function(){
    $(‘.columns’).columnize({
        columns: 2
    });
});
</script>
<style type=»text/css»>
.column {
padding-right: 10px;
}
.column.last {
padding: 0;
}
</style>
 
<div class=»columns»>
    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.
    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.
</div>

Я добавил немного отступов к столбцам, чтобы текст не сталкивался друг с другом.

01
02
03
04
05
06
07
08
09
10
11
<style type=»text/css»>
.columns {
-moz-column-count: 2;
-webkit-column-count: 2;
}
</style>
 
<div class=»columns»>
    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.
    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.
</div>

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

Посмотреть демо.

Граница изображения

Я не имел ни малейшего представления о свойстве изображения границы, пока не обновил до Firefox 3.5 и не зашел на сайт Криса Спунера и не увидел, что его пост-изображения имеют границы изображения. Лично меня это не интересует, но это не помешает мне объяснить, как этого добиться.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
<script type=»text/javascript» src=»http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js»></script>
<script type=»text/javascript» src=»js/jquery.borderImage.js»></script>
<script type=»text/javascript»>
$(function(){
    $(‘.classic .box’).borderImage(‘url(images/border.png) 27 27 27 27 round round’);
});
</script>
<style type=»text/css»>
.box {
border-width: 20px;
}
</style>
 
<div class=»box»>
    <!—CONTENT—>
</div>

Вместо того, чтобы тратить время на создание нескольких элементов div и повторять фоновое изображение вокруг элемента div, я обнаружил плагин jQuery, который работает за меня. Он называется borderImage и работает так же, как и должен.

01
02
03
04
05
06
07
08
09
10
11
12
<style type=»text/css»>
.box {
border-width: 20px;
-webkit-border-image: url(images/border.png) 27 round;
-moz-border-image: url(images/border.png) 27 round;
border-image: url(images/border.png) 27 round;
}
</style>
 
<div class=»box»>
    <!—CONTENT—>
</div>

Как видите, свойство изображения границы немного странно. W3 объясняет, как он рассчитывается намного лучше.

Посмотреть демо.

Анимации

Хорошо, кто не любит видеть, как какой-то элемент плавно скользит влево или исчезает, когда вы наводите курсор на что-то? Анимации хороши для улучшения пользовательского интерфейса, но убедитесь, что вы не идете за борт! Единственными браузерами, которые поддерживают анимацию CSS3, являются браузеры на основе Webkit. Единственный другой способ отображения анимации — это использование JavaScript. Я буду использовать jQuery, потому что это моя любимая библиотека JavaScript (если вы еще не догадались).

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<script type=»text/javascript» src=»http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js»></script>
<script type=»text/javascript»>
$(function(){
    $(‘.box’).hover(function(){
        $(this).stop().animate({
            top: ’20px’
        }, 300);
    }, function(){
        $(this).stop().animate({
            top: ‘0’
        }, 300);
    });
});
</script>
<style type=»text/css»>
.box {
position: relative;
}
</style>
 
<div class=»box»>
    <!—CONTENT—>
</div>
01
02
03
04
05
06
07
08
09
10
11
12
13
<style type=»text/css»>
.box {
position: relative;
-webkit-transition: top 300ms linear;
}
.box:hover {
top: 20px;
}
</style>
 
<div class=»box»>
    <!—CONTENT—>
</div>

Оба этих фрагмента кода выполняют одно и то же: сдвигают div на 20 пикселей в течение 300 мс. Помните, код CSS3 работает только в браузерах Webkit!

Посмотреть демо.

Вот вам и 11 методов CSS, которые станут намного проще с CSS3 в (надеюсь, ближайшем) будущем. Очевидно, пройдет некоторое время, прежде чем мы сможем на 100% зависеть от этих свойств во всех браузерах.

Не забудьте просмотреть другие учебники Nettuts +, в которых обсуждается CSS3:

  • Подпишитесь на нас в Твиттере или подпишитесь на ленту Nettuts + RSS для ежедневных новостей и статей о веб-разработке.