TGViewer
<divelopers> <divelopers> @alexnozer_dev · 1.18K subscribers
Post #384 748
CSS Linked Parameters

При использовании встроенных SVG-иконок в HTML удобно то, что к ним есть доступ в CSS. Можно, например, изменять цвета, скрывать отдельные части иконки, менять толщину линий, радиус окружности, применять анимации и так далее.

<a href="...">
<svg
width="24"
height="24"
viewBox="0 0 24 24"
>
<path d="..."/>
</svg>
Назад
</a>
<style>
a {
color: var(--color-link);
transition: color .3s linear;

svg path {
fill: currentColor;
transition: fill .3s linear;
}
}

a:hover {
color: var(--color-link-hover);
}
</style>


Однако при использовании внешних SVG-иконок доступ в CSS теряется. Отчасти это можно обойти через SVG-спрайты, но у них есть свои нюансы. CSSWG выпустила черновик CSS Linked Parameters, который предлагает решение проблемы.

Суть предложения в том, чтобы передавать через URL специальные параметры и затем получать к ним доступ через переменные окружения в атрибутах и CSS. Так можно будет передать цвет во внешний SVG-файл, подключаемый через <img> или url().

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


<!--
#param() задаёт параметр
--color со значением grern
-->
<img src="icon.svg#param(--color,green)">

<img src="icon.svg">
<style>
img {
/*
Параметры можно задать в CSS
с помощью link-parameters.
Это добавит к src и
ссылкам на все ресурсы
#param(--color,green)
*/
link-parameters:
param(--color, green)
;
}

.icon {
/*
Параметры можно задать
в функции url() в CSS
*/
background-image:
url(
"icon.svg",
param(--color, green)
)
;
}
</style>

<!-- icon.svg -->
<svg>
<!--
env() считывает переданный
в URL параметр --color, и
устанавливает в атрибут fill,
значение по умолчанию black
-->
<path
fill="env(--color, black)"
d="..."
/>
</svg>

<!-- icon.svg -->
<svg>
<!-- можно задать в CSS -->
<style>
path {
fill: env(--color, black);
}
</style>
<path d="..."/>
</svg>


Можно передавать несколько параметров, перечислив их в URL через &, указав несколько param() через пробел в url() или через запятую в link-parameters. В качестве значения могут быть пользовательские свойства CSS.

<!-- параметры в URL через & -->
<img src="icon.svg#param(--color,green)&param(--stroke,1)">

<img src="icon.svg">
<style>
img {
/*
несколько param() в link-parameters,
доступны пользовательские свойства
*/
link-parameters:
param(--color, var(--color-primary)),
param(--stroke, 1)
;
}

.icon {
/*
несколько param() в url(),
доступны пользовательские свойства
*/
background-image:
url(
"icon.svg",
param(--color, var(--color-primary))
param(--stroke, 1)
)
;
}
</style>


Таким образом появляется возможность передавать данные во внешние файлы. Основное назначение — <svg>, но также упоминается возможность передачи для <iframe>. Синтаксис фрагментов используется для обратной совместимости.

#html #svg #css
  • 👍 13
  • 🔥 3
  • ❤ 2
  • 😍 2
More from @alexnozer_dev
  1. Sep 21, 2026Реализация пользовательских атрибутов Под конец прошлого года я рассказывал об API пользов…
  2. Sep 14, 2026Подклассы Event вместо CustomEvent Многие библиотеки предоставляют систему событий в качес…
  3. Sep 11, 2026Эволюция стилей в темах Shopify Адам Ватан на днях поделился новостью, что Shopify выкупил…
  4. Sep 9, 2026Persistent Widgets Многие сайты не должны быть SPA. Но иногда эта архитектура продиктована…
  5. Sep 7, 2026Processing Instructions и маркеры В DOM всё представлено в виде узлов (Node) разных типов.…
  6. Sep 1, 2026@scope и потоковая передача HTML Ноам Розенталь поделился интересной техникой, в которой с…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →