Add custom styles

Overview

All components contain own templates and some style. Of course, you may want to use your custom styles in your component or module. In this guide, we got you covered on how to add those custom styles to your components.

Prerequisites

However, this guide does not explain how to create a custom component, so head over to the official guide about creating a custom component to learn this first.

In addition, you need to have a basic knowledge of CSS and SCSS in order to use custom styles. This is though considered a basic requirement and won't be taught in this guide.

Example: Custom cms block

We will base our guide on an example: Let's use a custom component printing out "Hello world!". So first of all, create a new directory for yoursw-hello-world. As said before, more information about that topic, such as where to create this directory, can be found in Add a custom component.

In your component's directory, create a new index.js file and register your custom component sw-hello-world:

Shopware.Component.register('sw-hello-world', {
template
});

Just like most components, it has a custom template. First we create the template file named sw-hello-world.html.twig:

This template now has to define the basic structure of your component. In this simple case, you only need a parent container and two sub-elements, whatever those are.

{% block example_block %}
<div class="sw-hello-world">
<p>Hello world!</p>
</div>
{% endblock %}

You've got a parent div containing the content of your template, an abstract with the text "Hello world!" in this case. Next up, you need to import that template in your index.js file of your component:

// Import for your template
import template from './sw-hello-world.html.twig';
Shopware.Component.register('sw-sw-hello-world', {
template
});

Add custom styles to your component

Your component should come with a custom .scss file, which you need to create now. Don't forget to import it in your index.js file, if not done yet:

import template from './sw-hello-world.html.twig';
// Import for your custom styles
import './sw-hello-world.scss';
Shopware.Component.register('sw-sw-hello-world', {
template
});

In there, simply use a grid to display your elements next to each other. You set a CSS class for your block, which is named after the component. In there, you can set your styles as you need. To mention an example, we want the text in the div with the class sw-hello-world to have a blue color:

.sw-hello-world {
color: blue;
}

That's it for this component! This way, you're able to add your own styles to your component now.

Import variables

Because of Sass usage, you are able to import external variables and use them in your classes. Below you see an example which uses Shopware's SCSS variables to color the text of the component in shopware's shade of blue.

/* Import statement */
@import "~scss/variables";
.sw-hello-world {
/* Usage of variable */
color: $color-shopware-brand-500;
}

More interesting topics