Подтвердить что ты не робот

CSS (возможно, с компасом): кросс-браузерный градиент

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

Я смотрел Compass градиент mixin, но он не работает с Internet Explorer.

Любые идеи? (Он не должен быть компасом - я счастлив установить что-то еще.)

Изменить: То, что я пытаюсь получить, - это некоторая среда (например, Compass?), которая генерирует код, как то, что Blowsie отправил, который был протестирован в браузерах. В принципе, как Compass gradient mixin Я упомянул, но с поддержкой IE. (Я немного опасаюсь просто переместить мой собственный SCSS-микс и вставить в блоки, такие как Blowsie-код, потому что я его не тестировал и не имею ресурсов для этого.)

4b9b3361

Ответ 1

Я только заметил, что текущая бета-версия Compass (0.11.b.6) имеет поддержку для генерации градиентов IE в модуле compass/css3/images ( который заменяет предыдущий модуль градиента), поэтому вы можете генерировать ваши градиенты в общей сложности двумя короткими командами:

@import "compass/css3/images";
@import "compass/utilities/general/hacks";  /* filter-gradient needs this */

.whatever {
  /* IE; docs say this should go first (or better, placed in separate IE-only stylesheet): */
  @include filter-gradient(#aaaaaa, #eeeeee);
  /* Fallback: */
  background: #cccccc;
  /* CSS 3 plus vendor prefixes: */
  @include background(linear-gradient(top, #aaaaaa, #eeeeee));
}

Это генерирует следующее множество CSS:

.whatever {
  *zoom: 1;
  -ms-filter: "progid:DXImageTransform.Microsoft.gradient(gradientType=0, startColorstr='#FFAAAAAA', endColorstr='#FFEEEEEE')";
  filter: progid:DXImageTransform.Microsoft.gradient(gradientType=0, startColorstr='#FFAAAAAA', endColorstr='#FFEEEEEE');
  background: #cccccc;
  background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #aaaaaa), color-stop(100%, #eeeeee));
  background: -moz-linear-gradient(top, #aaaaaa, #eeeeee);
  background: -o-linear-gradient(top, #aaaaaa, #eeeeee);
  background: linear-gradient(top, #aaaaaa, #eeeeee);
}

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

Ответ 2

Код, который я использую для всех градиентов браузера.

            background: #0A284B;
            background: -webkit-gradient(linear, left top, left bottom, from(#0A284B), to(#135887));
            background: -moz-linear-gradient(top, #0A284B, #135887);
            background: -o-linear-gradient(#0A284B, #135887);
            filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#0A284B', endColorstr='#135887');
            zoom:1;

Вам нужно будет указать высоту или масштаб: 1 применить hasLayout к элементу, для которого это будет работать, т.е.

Ответ 3

Хотя градиенты имеют ограниченную сложность, они достаточно сложны, чтобы требовать, чтобы вы считали "много кода".

Рассмотрим:

  • начальный цвет, конечный цвет и шестнадцатеричная математика, необходимая для перехода между одним и другим
  • Количество "шагов"
  • Ширина/высота каждого шага
  • Поскольку для этого не существует чистого CSS-метода, это означает рендеринг HTML, один элемент для каждого цвета/шага, без испорчения существующего HTML

Итак, нет, без плагина, который делает все это для вас, для этого потребуется немного кода или изображения.