Type Selector
A CSS type selector
is used to target DOM elements according to their tag name.
This page goes over how Stylable handles type selector
, for more details about the language feature itself, checkout MDN type selector.
Syntax
Native element
A native element behaves exactly as it does in CSS, and requires no special treatment in Stylable.
/* scoped under local class */
.root div {}
/* scoped to local class */
div.root {}
Component element
Use a capital first letter to refer to a default import of a stylesheet root.
@st-import Comp from './comp.st.css';
/* style all Comp nested under root */
.root Comp {}
Scoping
Stylable validates that a type selector is scoped to the stylesheet it is in. To target a type selector, compound it or scope it under a local class in order to avoid styling unrelated elements outside the scope of the stylesheet.
/* error - unscoped selector */
div {}
/* valid */
.root div {}
div.root {}
Scope rules with the @st-scope
at-rule to minimize selector verbosity.
@st-scope .root {
div {}
}
Import and Export
Component elements, with capital first letter, can be exported from a stylesheet if used in a selector. You can import them within the @st-import
named import brackets.
@st-import Button from './button.st.css';
@st-import Menu from './menu.st.css';
.root Button {}
.root Menu {}
@st-import [Button, Menu] from './index.st.css';
@st-scope .root {
/* customize all buttons nested in theme root */
Button {}
/* customize all menus nested in theme root */
Menu {}
}
Runtime
Elements are not available on the Stylable stylesheet runtime.
Namespace
Native elements are not namespaced. However, if an element originates from a class, like a component element default import, then it is transformed during build.
@st-import Button from './button.st.css';
.root Button {}
.root div {}
/* OUTPUT */
.entry__root .button__root {}
.entry__root div {}