CSS `font-display: swap` is it possible to choose the fallback-font? - css

I do use font-display: swap to prevent the FOIT- Flash of invisible Text-Effekt.
But if I do so, I see first a serif font (used as first loaded font) and finally I see the webfont tha was loaded:
I'd like to use arial as default for the swap-functionality as this might not be so notable as it is with the serif-font-family.
Is there a way to force the font-family which is used for swap-Fallback?

Related

Pre-loading fonts

Do i need to use both rel="preload" and font-display="swap". Since rel="preload" prefetches the required font, is it necessary to add font-display attribute too?
<link rel="preload stylesheet" href="https://fonts.googleapis.com/css2?family=Magra&display=swap" as="font">
It depends on the intended result.
With font-display: swap, text is immediately rendered using the fallback typeface specified in your font stack while the request is made for your font. The fallback is whatever system font comes next in your font stack as listed in your font-family property.
Once the font is downloaded, it will be swapped in for the fallback.
This is just one option and you don't need to use it. For example, the immediate rendering of text when using font-display: swap creates a flash of unstyled text (FOUT) for the user and possible shifts in layout when the fonts swap, which can be undesirable.
You could opt for font-display: fallback, which attempts to account for this by hiding any text on screen for the first 100ms, optimistically hoping that your font downloads in that time frame.
If your font downloads within the first 100ms, it gets applied to the first visible text shown to the user (no FOUT).
If not, at 100ms the text gets rendered with the fallback typeface and the same pattern as font-display: swap resumes with your font getting swapped in once it eventually downloads.

Font Not Installed on Client Machine

I used some special fonts in my asp.net web application .Which are not found on every machine (which use that web application) and due to which that font is not visible to client.how can i resolve it
As mentioned in this W3Schools article you should always specify fallbacks when specifying a font-family:
The font-family property should hold several font names as a
"fallback" system. If the browser does not support the first font, it
tries the next font, and so on.
Start with the font you want, and end with a generic family, to let
the browser pick a similar font in the generic family, if no other
fonts are available.
You can do this in CSS with the font-family property, simply by specifying a comma separated list of different fonts. As mentioned above it should end with a generic family.
The following example prefers Arial, but falls back to the Helvetica "font-family" when Arial is not found. If neither of both is available it then falls back to a font of the sans serif "generic-family".
font-family: Arial, Helvetica, sans-serif;
You should use a webfont in this case. The browser will download your specific font and display the page as you want.
See for instance (never used, first hit in Google search): https://www.web-font-generator.com/ Mind the second checkbox!
Or see https://www.google.com/fonts

Setting a specific font using CSS

The Liberation Sans Narrow font is included with many versions of Microsoft Windows. It is a discrete font, defined by the file LiberationSansNarrow-Regular.ttf.
How, in CSS, can this font be specified? Simply specifying:
font-family: "Liberation Sans Narrow";
will not work.
Note that specifying:
font-family: "Liberation Sans";
will work to specify the Liberation Sans font, which is defined by a different TrueType font file.
I only need the CSS code to work in Firefox. It is perfectly acceptable (and expected) that it will only work in browsers running on systems that have that specific font installed.
Note that I don't want to approximate Liberation Sans Narrow; I want that specific font to be used due to the clarity of rendering.
I want to specify this font for modifying the chrome within Firefox using userChrome.css.
it depends on how the file has been included in the page.
1) font included through url then the file would have the font name used for it. we need to use the same font name
2) font included locally through the font-face then we need to use the name we mention to that font

Fallback fonts on special characters

I was wondering if it's possible to, when using #font-face, have a fallback setup so that if the text on my page contains characters that are not accounted for within the font (Japanese characters for example), only those characters are presented in a basic font and every other character remains as the custom font?
I'm imagining that potentially there'd be a mix of two fonts within one paragraph on occasion.
What you described is the default behaviour of a browser - it should naturally fall back to basic font for missing characters.
However, sometimes custom fonts use blank characters, in that case you can try using the unicode-range
For example:
#font-face {
font-family: BBCBengali;
src: url(fonts/BBCBengali.ttf) format("opentype");
unicode-range: U+00-FF;
}
Taken from this interesting article: Creating Custom Font Stacks with Unicode-Range
Unfortunatelly there are browser support issues.
CSS has default fallback to the system font if the specified font doesn't contain a character.
You can also specify which font to fall back to.
Example for a serif font:
body {
font-family: "MyNiceFontWithoutJapanesChars", "common serif font", serif;
}
As long as the fallback font has those characters your default font misses, you should be all right.

How to change default font before font-face loads?

In Firefox when a page loads it shows a default font (such as Times New Roman) for a moment (depending on connection speed) before it renders using the specified font-face. I understand this cannot be faster but how can I set, for example, Arial as the default font before it changes when the font-face loads?
Specifying an extra font in your font-family property will solve your problem.
font-family: "YourFontFaceFont", arial;
This will cause arial to be used until "YourFontFaceFont" is available.

Resources