Create a Drupal theme
We will not focus on details here, but just have an overview of the two main methods to create a Drupal theme.
Starterkit
You can use a default Starterkit or your very own, to be reused between projects. The idea here is to not extend but just make a copy to start from so there is no need to worry if the source changes. It's still possible to track source changes.
Use the default Starterkit
Create it in the themes/custom/my_theme
directory
php core/scripts/drupal generate-theme my_theme --path themes/custom
Use a contributed or custom Starterkit
Replace source_theme_name
php core/scripts/drupal generate-theme --starterkit source_theme_name my_theme
Starterkit theme (opens in a new tab) - Drupal.org
Extend a base theme
You take most of the base theme and add your own customizations. Sub-themes inherit all the features of the base theme, the base can also inherit from another base theme.
In your my_theme.info.yml
file, use the following line and replace the base_theme_name
base theme: base_theme_name
Creating sub-themes (opens in a new tab) - Drupal.org
Add libraries: CSS and JS
Adding assets (CSS, JS) to a Drupal theme via *.libraries.yml (opens in a new tab) - Drupal.org
If Tailwind is your thing, make sure to read this fantastic post from Matt Glaman: Migrating to TailwindCSS, iteratively, in your Drupal theme (opens in a new tab) where he explains how to use TailwindCSS (opens in a new tab) with PostCSS and browserSync. Bundling and purging are handled by Laravel Mix (opens in a new tab), that removes the hassle of configuring Webpack.
Libraries override and extension
You can fully override (replace with your own), remove (not load) or extend (add some files) to an existing library.
Pitfall: this needs to be done in my_theme.info.yml
and not in my_theme.libraries.yml
.
Overriding and extending libraries (opens in a new tab) - Drupal.org
Setup for local development
See Configure your development environment
Read more
Theming Drupal (opens in a new tab) - Drupal.org