Градиент: CSS3 против CSS2 + картинка. Статьи. wb0.ru - Все для веб-мастера, on-line сервисы

Градиент: CSS3 против CSS2 + картинка

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

Основные типы градиентов:

  1. Линейный - переход происходит по прямой линии.
  2. Круговой - переход происходит от центра к краям в виде круга.
  3. Угловой - плавный переход вдоль длины окружности.
  4. Отраженный - состоит из линейного градиента и его воображаемого отражения в зеркале.
  5. Алмазный - напоминает собой алмаз.
На рисунке показаны основные виды градиентов, номер картинки соответствует номеру в списке.

Градиент на сайтах

Градиент позволяет сделать расцветку блока более объемной и стильной. И многие сайты этим пользуются.

На www.apple.com в главном меню находим легкий серый градиент. Градиент на входе в www.nike.com.

Не стал исключением и xiper.net. На главной странице сайта многие блоки имеют градиент:

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

Старое решение - градиент на CSS + картинка

До появления свойств CSS3 (об этом читайте ниже) активно использовался такой прием:

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

    1. .gradient{  
    2.     background: url(picture.png) repeat-x #ссс;  
    3. }
Тут #ссс - цвет нижнего пикселя полоски

Таким же образом можно градиент спозиционировать по нижней границе блока:

  1. .gradient{  
  2.     background: url(picture.png) left bottom repeat-x #ECF324;  
  3. }

теперь #ECF324 - цвет верхнего пикселя.

Надеюсь, понятно, что если градиент идет не сверху вниз, а справа налево, то repeat-x заменяем на repeat-y

Проверено в: IE 6-8, Firefox 2-3.5, Opera 9.5-10, Safari 3, Chrome 4.

Достоинства метода:

  1. Простота реализации - картинка + одно CSS правило.
  2. Работает во всех распространенных браузерах.
Недостатки:
  1. Использование фоновой картинки. Хоть мы и максимально уменьшили ее размер, но не избавились от нее вовсе. Соответственно имеем лишнее обращение к серверу, то есть затраты времени и трафика.
  2. Продолжением первого недостатка является то, что до загрузки картинки пользователь будет видеть блок залитый сплошным цветом фона.
  3. Этот способ можно использовать только для вертикального или горизонтального линейного градиентов. Для остальных градиентов не получится использовать repeat и придется загружать цельный фоновый рисунок.
Особенность. Градиент будет строго заданной высоты. Если блок растянется, вся зона ниже фоновой картинки будет залита равномерным цветом. т.е. сам градиент не масштабируется.

Новые стандарты - градиент только на CSS

W3C в готовящейся спецификации CSS3 предлагают использовать css свойства linear-gradient(); - линейный и radial-gradient(); - радиальный градиенты.

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

Набор параметров для CSS свойства linear-gradient()

ПараметрОписаниеПример
bg-positionЗадает позицию начала градиента в блоке. По умолчанию top 0px left 0px..gradient{ linear-gradient(right top, yellow, blue); }
.gradient{ linear-gradient(left 20px top 30px, yellow, blue);}
.gradient{ linear-gradient(-10px 20px, yellow, blue); }
angleЗадает угол распространения градиента. По умолчанию 0deg..gradient{ linear-gradient(right top, 30deg, yellow, blue); }
.gradient{ linear-gradient( 45deg, yellow, blue );}
color-stopЗадает цвета ключевых точек градиента. Обязательный параметр. Может содержать не меньше двух цветов..gradient{ linear-gradient(right top, 30deg, yellow, blue); }
.gradient{ linear-gradient(right top, 30deg, yellow 10%, #0f0); }
.gradient{ linear-gradient( yellow, blue 30px); }
.gradient{ linear-gradient(yellow 10px, blue 20%, #0f0); }

Набор параметров для CSS свойства radial-gradient()

ПараметрОписаниеПример
bg-positionЗадает позицию центра градиента в блоке. По умолчанию center center..gradient{ radial-gradient(right top, yellow, blue); }
.gradient{ radial-gradient(left 20px top 30px, yellow, blue);}
.gradient{ linear-gradient(-10px 20px, yellow, blue); }
angleЗадает угол распространения градиента. По умолчанию 0deg..gradient{ radial-gradient(right top, 30deg, yellow, blue); }
.gradient{ radial-gradient( 45deg, ellipse, yellow, blue );}
shapeЗадает форму градиента. Значения: circle - круглый, ellipse - елиптический.По умолчанию circle..gradient{ radial-gradient(circle, yellow, blue); }
.gradient{ radial-gradient(right top, 30deg, ellipse, yellow 10%, #0f0); }
sizeЗадает расположение градиента относительно сторон и углов блока. Можно определить через параметры: closest-side - ближняя сторона, closest-corner - ближний угол, farthest-side - дальняя сторона, farthest-corner - дальний угол, contain - синоним closest-side, cover - синоним farthest-corner..gradient{ radial-gradient(bottom left, farthest-side, red, yellow 50px, green); }
.gradient{ radial-gradient(20px 30px, contain, red, yellow, green) }
color-stopЗадает цвета ключевых точек градиента. Если позиция первой ключевой точки имеет отрицательное значение, центр градиента будет иметь переходной цвет точки с нулевим значением. Т.е. если первая ключевая точка черного цвета имеет позицию -10px, а вторая ключевая точка белого цвета имеет позицию 10px, то в результате мы получим круглое пятно цвета от переходного серого(половина между черным и белым) до белого радиусом 10px в центре блока..gradient{ linear-gradient(right top, 30deg, yellow, blue); }
.gradient{ linear-gradient(right top, 30deg, yellow 10%, #0f0); }
.gradient{ linear-gradient( yellow, blue 30px); }
.gradient{ linear-gradient(yellow 10px, blue 20%, #0f0); }

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

Насколько поддерживают градиенты браузеры и стоит ли их использовать?

Поддержка браузерами

Градиент и Mozzila Firefox

21 января 2010 года был выпущен Firefox 3.6. который поддерживает линейные -moz-linear-gradient() и радиальные -moz-radial-gradient() CSS градиенты.

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

  1. .gradient{    
  2.     background: -moz-linear-gradient(top, #0066FF, #83CA54);  
  3. }  
  4. .gradient{    
  5.     background: -moz-repeating-linear-gradient(top left -45deg, red, red 5px, white 5px, white 10px);  
  6. }  
  7. .gradient{  
  8.     background-image: -moz-radial-gradient(center 45deg, circle closest-side, orange 0%, red 100%);  
  9. }

Версии FF ниже 3.6 эти CSS3 свойства linear-gradient и radial-gradient не поддерживают!

Градиент в Chrome и Safari

Safari, начиная с версии 4.0 (Chrome с версии 2.0), поддерживает команду -webkit-gradient(), для создания линейных и радиальных градиентов.

  1. .gradient{    
  2.     background: -webkit-gradient(linear, left top, left bottom, from(rgb(0,102,255)), to(rgb(131,202,84)))  
  3. }

Градиент и Internet Explorer

В IE для градиентов используются фильтры. Начиная с IE 5.5 можно сделать градиент с помощью такого фильтра:

  1. .gradient{  
  2.     filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr=#0066FF, endColorstr=#83CA54);  
  3. }

Это линейный неповторяющийся градиент который может иметь два направления: GradientType=1 - горизонтальный и GradientType=0 - вертикальный.

Для Internet Explorer 8.0 можно написать индивидуальный фильтр:

  1. .gradient{  
  2.     -ms-filter: "progid:DXImageTransform.Microsoft.gradient (GradientType=0, startColorstr=#0066FF, endColorstr=#83CA54)";  
  3. }

Но и старую запись IE8 поймет прекрасно.

Градиент и Opera

На момент написания статьи Opera не поддерживает специальных свойств для создания градиента. Тем не менее, градиент можно сделать, если использовать JavaScript и работать с канвой элемента напрямую. Эта возможность HTML 5 уже поддерживается в Opera.

Достоинства реализации градиента с применением CCS3 свойств:

  1. Не используем фоновую картинку - выигрыш в быстродействии.
  2. Нет эффекта однотонной заливки при загрузке - градиент появляется сразу.
  3. Можем управлять градиентом - использовать различные типы заливок, многоцветность.
Недостаток: Поддержка браузерами. Вернее ее отсутствие. Вместо одной строки в CSS (как нам это обещает спецификация, например linear-gradient(right top, yellow, blue);), в настоящее врямя приходиться писать отдельные определения для FF и webkit-браузеров, а также фильтр для IE. Кроме того, все равно остается ряд браузеров, например, довольно популярная у нас Opera, которые не поймут этих свойств. Для них придется применять JavaScript, что, конечно, скажется на быстродействии.

Особенность: Градиент растягивается по высоте блока.

Различие в поведении градиента при разной высоте блока можно посмотреть на демо примере. В левой колонке примера будут градиенты с использованием CCS3, в правой - сделанные картинкой. Конечно, ты не увидишь заливок в левой колонке, если твой браузер не поддерживает градиент на CSS3.

Выводы

CSS свойства linear-gradient и radial-gradient, описанные в проектах спецификации CSS3 дают нам мощный механизм создания градиентов. Но, так как фактически данная спецификация еще не окончена пройдет, наверно, немало времени пока мы сможем использовать эту мощь в своей работе. Тем не менее все большее число браузеров в том или ином виде поддерживает CSS-градиенты. На момент написания статьи в этот список входят IE6-8, Firefox 3.6, Safari 4.0, Chrome 2.0.

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

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


Дата публикации: 07.07.2010
Александр Головко,
xiper.net

Статьи по теме:

   Ваш псевдоним:
Ваш комментарий:

Календарь событий


Новости Интернет


Поиск





Последний пересчет

тИЦ:07 Окт 15
PR:09 Дек 13

Наши партнеры

wservices.ru - регистрация доменов, Whois-сервисы Смайлы на все случаи жизни


 
Copyright © 2006-2024, wb0.ru