Contents
  1. The short answer: no
  2. How a favicon is actually declared
  3. Where CSS does come in: inside an SVG favicon
  4. Changing the favicon after the page loads
  5. ICO vs SVG: what the format means for your logo artwork
  6. Gaps in this assessment

The short answer: no

You cannot set a favicon with CSS. A favicon is page metadata that the browser reads from the document head, not a styled element on the page. No CSS property controls the icon shown in a browser tab, bookmark list or history entry. Properties such as background-image or content only affect elements rendered inside the page, so a stylesheet rule cannot replace or assign the site icon.

How a favicon is actually declared

Favicons are declared in HTML with link elements that use rel="icon". You can list more than one file and indicate its format with the type attribute, so a browser can pick a version it supports.

<head>
  <link rel="icon" href="favicon.ico" sizes="any">
  <link rel="icon" href="icon.svg" type="image/svg+xml">
</head>

When a page declares no icon at all, many browsers fall back to requesting a file named favicon.ico from the root of the site. That fallback is a browser convention, not something a stylesheet can trigger or redirect.

Where CSS does come in: inside an SVG favicon

The one meaningful link between CSS and favicons is the SVG format. An SVG file can contain its own style element. A common use is a prefers-color-scheme media query, which lets one icon file switch colors when the user's system is in dark mode. That CSS lives inside the icon file, not in the website's stylesheet, so it changes how the icon looks, not which icon is used.

<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
  <style>
    path { fill: #1a1a1a; }
    @media (prefers-color-scheme: dark) {
      path { fill: #ffffff; }
    }
  </style>
  <path d="M4 4h24v24H4z"/>
</svg>

Browsers generally load an SVG favicon the same way they load an SVG used as an image. In that mode, scripts do not run and external resources such as linked stylesheets or web fonts are not loaded. Keep styles inline in the file and convert any lettering to outlined paths rather than depending on an installed or linked font.

Changing the favicon after the page loads

If you need the icon to change, for example to show a notification state, the tool is JavaScript, not CSS. A script can update the href of the existing icon link element or insert a new one, and the browser will then load the new file.

ICO vs SVG: what the format means for your logo artwork

Format | What the file contains | Practical notes
ICO | One or more raster bitmaps at fixed pixel sizes | Widely recognized fallback; cannot hold editable vector paths
SVG | XML markup that can describe vector shapes and embedded styles | Scales cleanly and supports inline CSS such as dark-mode rules; browser support should be checked for your audience
PNG | A single raster bitmap | Common for specific sizes; no vector data or internal CSS

An .svg extension does not prove that a file contains real vector artwork. An SVG can simply wrap an embedded raster image, in which case it will blur when scaled and its colors cannot be restyled with CSS. To check, open the file in a vector editor or a text editor and look for path or shape elements rather than an image element carrying bitmap data. Likewise, a thumbnail or preview of a logo is a raster rendering and is not the editable source.

As an editorial recommendation rather than a measured rule, a full logo often reads poorly at favicon sizes. A simplified mark, monogram or symbol drawn with clean vector paths usually translates better to both the SVG favicon and the small raster sizes exported into an ICO file.

Gaps in this assessment

No specific browser-support data, version numbers or test results were supplied for this article, so it does not state which browsers render SVG favicons or their embedded media queries. Test in the browsers your audience uses and keep an ICO or PNG fallback. Icons for home-screen shortcuts and web app manifests follow separate declarations and are outside the scope of this question.