Include font file(s) when defining a Sass variable that represents a CSS
font-family
property.
font_google(
family,
local = TRUE,
cache = sass_file_cache(sass_cache_context_dir()),
wght = NULL,
ital = NULL,
display = c("swap", "auto", "block", "fallback", "optional")
)
font_link(family, href)
font_face(
family,
src,
weight = NULL,
style = NULL,
display = c("swap", "auto", "block", "fallback", "optional"),
stretch = NULL,
variant = NULL,
unicode_range = NULL
)
font_collection(..., default_flag = TRUE, quote = TRUE)
is_font_collection(x)
A character string with a single font family name.
Whether or not download and bundle local (woff2) font files.
A sass_file_cache()
object (or, more generally, a file
caching class with $get_file()
and $set_file()
methods). Set this
argument to FALSE
or NULL
to disable caching.
One of the following:
NULL
, the default weight for the family
.
A character string defining an axis range
A numeric vector of desired font weight(s).
One of the following:
NULL
, the default font-style
for the family
.
0
, meaning font-style: normal
1
, meaning font-style: italic
c(0, 1)
, meaning both normal
and italic
A character vector for the font-display
@font-face
property.
A URL resource pointing to the font data.
A character vector for the src
@font-face
property. Beware
that is character strings are taken verbatim, so careful quoting and/or URL
encoding may be required.
A character (or numeric) vector for the font-weight
@font-face
property.
A character vector for the font-style
@font-face
property.
A character vector for the font-stretch
@font-face
property.
A character vector for the font-variant
@font-face
property.
A character vector for unicode-range
@font-face
property.
a collection of font_google()
, font_link()
, font_face()
, and/or character vector(s) (i.e., family names to include in the CSS font-family
properly). Family names are automatically quoted as necessary.
whether or not to include a !default
when converted to a Sass variable with as_sass()
.
whether or not to attempt automatic quoting of family names.
test whether x
is a font_collection()
, font_google()
, font_link()
, or font_face()
object.
a sass_layer()
holding an htmltools::htmlDependency()
which points
to the font files.
These helpers must be used the named list approach to variable definitions, for example:
By default, font_google()
downloads, caches, and serves the relevant font
file(s) locally. By locally serving files, there's a guarantee that the font
can render in any client browser, even when the client doesn't have internet
access. However, when importing font files remotely (i.e., font_google(..., local = FALSE)
or font_link()
), it's a good idea to provide fallback
font(s) in case the remote link isn't working (e.g., maybe the end user
doesn't have an internet connection). To provide fallback fonts, use
font_collection()
, for example:
These font helpers encourage best practice of adding a !default
to Sass
variable definitions, but the flag may be removed via font_collection()
if
desired.
Non-Google fonts may also be served locally with font_face()
, but it
requires downloading font file(s) and pointing src
to the right location
on disk. If you want src
to be a relative file path (you almost certainly
do), then you'll need to mount that resource path using something like
shiny::addResourcePath()
(for a shiny app) or servr::httd()
(for static
HTML).
https://developers.google.com/fonts/docs/css2
https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face
https://developer.mozilla.org/en-US/docs/Learn/CSS/Styling_text/Web_fonts
library(htmltools)
my_font <- list("my-font" = font_google("Pacifico"))
hello <- tags$body(
"Hello",
tags$style(
sass(
list(
my_font,
list("body {font-family: $my-font}")
)
)
)
)
if (interactive()) {
browsable(hello)
}
# Three different yet equivalent ways of importing a remotely-hosted Google Font
a <- font_google("Crimson Pro", wght = "200..900", local = FALSE)
b <- font_link(
"Crimson Pro",
href = "https://fonts.googleapis.com/css2?family=Crimson+Pro:wght@200..900"
)
url <- "https://fonts.gstatic.com/s/crimsonpro/v13/q5uDsoa5M_tv7IihmnkabARboYF6CsKj.woff2"
c <- font_face(
family = "Crimson Pro",
style = "normal",
weight = "200 900",
src = paste0("url(", url, ") format('woff2')")
)