Меню

Как изменить под иконками цвет



Делаем разноцветные иконки с помощью SVG-символов и CSS-переменных

Давно прошли те дни, когда для иконок в вебе использовались картинки и CSS-спрайты. С развитием веб-шрифтов номером 1 для отображения иконок на сайтах стали иконочные шрифты.

Шрифты — векторные, так что вам не нужно беспокоиться о разрешении экрана. Для них можно использовать те же CSS-свойства, что и для текста. В результате вы имеете полный контроль над их размером, цветом и стилем. Вы можете добавлять к ним эффекты, трансформировать или декорировать их. Например, повернуть ( rotate ), подчеркнуть ( underline ) или добавить тень ( text-shadow ).

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

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

TL;DR: этот пост позволяет вникнуть в то, как и почему. Если вы хотите понять весь процесс, читайте дальше. В противном случае вы можете посмотреть окончательный код на CodePen.

Настройка символов SVG-иконок

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

Использование SVG-символов позволяет иметь лишь один экземпляр каждого SVG-элемента и использовать его где угодно с помощью ссылки.

Начните с добавления встроенного SVG, спрячьте его, оберните содержимое в тег symbol и задайте ему id .

Полная разметка SVG-элемента пишется один раз и скрывается.

Затем все, что вам нужно сделать, это создать копию иконки с помощью элемента use .

Получится точная копия вашей оригинальный SVG-иконки.

Вот она! Довольна милая, правда?

Вы вероятно заметили атрибут xlink:href — это и есть ссылка между вашей иконкой и оригинальным SVG-изображением.

Важно отметить, что xlink:href — устаревший атрибут SVG. Даже если большинство браузеров все еще поддерживает его, вместо него нужно использовать href . Но дело в том, что некоторые браузеры, например, Safari, не поддерживают ссылки на SVG-ресурсы через атрибут href , поэтому вам все равно нужно указывать xlink:href .

Для безопасности используйте оба атрибута.

Добавление цвета

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

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

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

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

Мы пытаемся задать стили для .path1 , .path2 и .path3 так, если бы они были вложены в .icon-colors , но технически это не так. use элемент это не плейсхолдер, который заменяется на определенный SVG. Это ссылка, которая копирует содержимое того, на что указывает, в shadow DOM.

Читайте также:  Проект что означает синий цвет

И что нам тогда делать? Как мы можем повлиять на содержимое детей, когда говорят, что детей нет в DOM?

CSS-переменные помогут

В CSS некоторые свойства наследуются детьми от предков. Если вы укажете цвет текста для body , то весь текст на странице унаследует этот цвет, пока он не будет переопределен. Предок не знает детей, но наследуемые свойства все равно передаются.

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

Но вот проблема: мы хотим передать разные цвета для разных частей оригинальной SVG-иконки, но есть только один атрибут fill , который мы можем наследовать.

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

Все дети .parent будут иметь текст красного цвета.

Все .child , вложенные в .parent , будут иметь текст красного цвета.

Теперь давайте применим эту концепцию для нашего SVG-символа. Мы будем использовать атрибут fill для каждой части path в определении нашей SVG-иконки и зададим им разные CSS-переменные. Затем мы назначим им разные цвета.

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

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

Свойство fill будет работать, потому что атрибут fill исходного SVG задан с неопределенными значениями CSS-переменных.

Как назвать мои CSS-переменные?

Обычно используют один из двух способов именования в CSS: описательный или семантический. Описательный — это значит назвать переменную по названию самого цвета: если ваш цвет #ff0000 , вы называете переменную —red . Семантический — это значит назвать переменную по ее назначению: если вы используете цвет #ff0000 для ручки чашки, вы называете переменную —cup-handle-color .

Возможно вашим первым желанием будет использовать описательный способ наименований. Это кажется естественным, поскольку цвет #ff0000 может использоваться и для других вещей, помимо ручки чашки. CSS-переменную —red можно использовать и для других частей иконки, которые должны быть красными. В конце концов, так работает методология utility-first CSS и она хороша.

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

Использование семантического способа наименований, как например, —cup-handle-color , в нашем случае более уместно. Когда вам нужно изменить цвет какой-то части иконки, вы точно знаете, что и как вам нужно переопределить. Имя класса останется актуальным независимо от того, какой цвет вы назначили.

По умолчанию или не по умолчанию

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

Читайте также:  Симптом понос зеленого цвета

Добиться этого можно двумя способами: через :root или через var() default.

Вы можете определить все ваши CSS-переменные в селекторе :root . Это позволит держать их все в одном месте и «делиться» схожими цветами. :root имеет самую низкую специфичность, поэтому его легко переопределить.

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

В большинстве случаев, когда в иконке используется только один цвет, я называю переменную —fill-color . Это просто, понятно и позволяет использовать это наименование для всех одноцветных иконок. Если я определю все переменные в селекторе :root , я не смогу иметь несколько переменных —fill-color . Я буду вынуждена определять —fill-color-1 , —fill-color-2 или использовать пространства имен такие, как —star-fill-color , —cup-fill-color .

var() default

Функция var() , которую вы используете для назначения CSS-переменной для свойства, может принимать значение по умолчанию в качестве второго аргумента.

Пока вы не определите —color-1 , —color-2 и —color-3 , иконка будет использовать значения по умолчанию, установленные для каждого path . Это решает проблему глобального определения, которую мы имеем при использовании :root , но будьте осторожны: теперь у вас есть значение по умолчанию, и оно выполняет свою работу. Таким образом, вы больше не можете написать только одно свойство fill , чтобы сделать иконку монохромной. Вам нужно назначать цвет для каждой CSS-переменной, используемой в иконке, по отдельности.

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

Как это все поддерживается браузерами?

CSS-переменные поддерживаются всеми современными браузерами, но, как вы вероятно догадались, IE не поддерживает их, совсем. Даже IE11, и поскольку его развитие было прекращено в пользу Edge, нет никаких шансов, что он когда-либо будет их поддерживать.

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

Все, что вам нужно сделать, — это добавить определение цвета, которое будет работать только, если CSS-переменные не поддерживаются. Этого можно добиться, указав свойству fill резервный цвет. Если CSS-переменные поддерживаются, это объявление не будет учтено. Если же это не так, оно сработает.

Если вы используете Sass, вы можете записать эту проверку в @mixin .

Теперь можно определять цветовые схемы, не беспокоясь о поддержке браузеров.

Передача CSS-переменных в mixin через @content необязательна. Если вы сделаете это снаружи, скомпилированный CSS будет таким же. Но может быть полезно держать все это в одном месте.

Вы можете проверить этот пример в разных браузерах. В последних версиях Firefox, Chrome и Safari последние две чашки будут соответственно красной с серым паром и синей с серым паром. В Internet Explorer и Edge ниже 15 версии третья иконка будет вся красная, а четвертая — вся синяя.

Источник

Как сделать прозрачным фон значков (ярлыков) на рабочем столе

Если на Вашем рабочем столе текст под иконками (ярлыками) не прозрачный, а имеет вид цветного прямоугольника, то следуйте советам ниже.

Таблички под иконками на рабочем столе уже давно стали синими.

Версия операционной системы: Windows XP Professional Версия 2002 Service Pack 3

Читайте также:  После окраски волос цвет зеленый

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

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

Сегодня на сайте IT-уроки в рубрике «Вопрос-Ответ» мы разберемся, как вернуть прозрачность под ярлыками в Windows XP.

Для начала проверьте параметры цветопередачи:

1. Зайдите по пути: «Пуск => Панель управления => Экран» («Пуск => Панель управления => Производительность и обслуживание => Экран»)

2. Перейдите на вкладку «Параметры»

3. В разделе «Качество цветопередачи» должно быть значение «Самое высокое (32 бита)»

Затем по очереди проверьте следующие настройки:

1. Визуальные эффекты:

1.1 Зайдите по пути «Пуск => Панель управления => Система» (или «Пуск => Панель управления => Производительность и обслуживание => Система)

1.2 Перейдите на вкладку «Дополнительно», в разделе «Быстродействие» нажмите кнопку «Параметры»

1. 3 В появившемся диалоговом окне на закладке «Визуальные эффекты» найдите пункт «Отбрасывание теней значками на рабочем столе»

1.4 Поставьте галочку напротив пункта «Отбрасывание теней значками на рабочем столе»

1.5 После этого нажмите кнопку «ОК» во всех открытых диалоговых окнах

Если проблема не решилась, движемся дальше:

2. Веб-элементы на рабочем столе:

2.1 Нажмите на рабочем столе правой кнопкой мыши

2.2 Выберите пункт «Упорядочить значки»

2.3 В открывшемся меню уберите галочку возле пункта «Закрепить веб-элементы на рабочем столе»

Если и эти действия не привели к нужному результату, то следующий вариант решения:

Вносим изменения в реестр

Скачайте архив по ссылке: «shadows-icon-lables.zip» и запустите файл внутри «shadows-icon-lables.reg».

После этого перезагрузите компьютер.

Для тех, кто разбирается в структуре реестра, содержимое файла:

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer]
«ForceActiveDesktopOn»=dword:00000000
«NoActiveDesktop»=dword:00000001

Но если вдруг появились новые проблемы

В очень редких случаях могут возникнуть дополнительные проблемы, это в первую очередь касается так называемых «сборок Windows» (Zver и ему подобных). Чтобы Вы всегда могли вернуть состояние реестра в первоначальное состояние, я подготовил спасательные файлы реестра.

Для этого скачайте архив по ссылке: «RESTORE-shadows-icon-lables.zip».
Внутри архива три файла. Можно всё вернуть в три этапа, проверяя решение проблемы, а можно в один этап сразу.

Если в один этап сразу:

Запустить из архива файл «R3-shadows-icon-lables.reg», перезагрузить компьютер, — всё в изначальном виде!

Если в три этапа:

В архиве находится три файла, нужно поочередно выполнить следующую процедуру:

  • запустить «R1-shadows-icon-lables.reg», перезагрузить компьютер, проверить решение проблемы,
  • если не помогло, запустить «R2-shadows-icon-lables.reg», перезагрузить компьютер, проверить решение проблемы,
  • если не помогло, запустить «R3-shadows-icon-lables.reg», перезагрузить компьютер, — всё в изначальном виде!

Причин проблем может много, как и вариантов решения, если есть возможность, лучше переустановить ОС Windows, при этом использовать не сборку (зверь и прочие), а оригинальный дистрибутив.

Если возникли сложности, пишите в комментариях, постараюсь помочь!

Чтобы задать вопрос в рубрике «Вопрос-Ответ» необходимо подписаться на новости сайта IT-уроки и отправить сообщение на этой странице.

Источник