3

I have we component lets say called orderFlow. Inside there is obviously orderFlow.html template file, orderFlow.js and also I have added orderFlow.css file. Additionally I have created few html templates inside that folder that I render depending on the state of the app lets say. My problem is that when I define some styling rules inside that css file i created, only the default template (with the same name) renders the styles. all the other templates don't apply the styling when they are rendered. If I have created separate css files for each template matching the names of the file it would be ok.

However I have some generic styles that I want to actually to all of the templates and duplicating all these styles for each template seems bad to me. Is there any wy that I could use single css file and target all the templates within my component folder?

2 Answers 2

3

From winter'20, you can Share CSS style rules.

  1. Create a Lightning web component that contains only a CSS file.

cssLibrary component (with only CSS file):

cssLibrary
   └──cssLibrary.css

/* cssLibrary.css */

h1 {
    font-size: xx-large;
}

In the CSS file of another Lightning web component, import the style rules.

myComponent:

myComponent
   ├──myComponent.html
   ├──myComponent.js
   ├──myComponent.js-meta.xml
   └──myComponent.css

/* myComponent.css */

@import 'cssLibrary.css';

Imported style rules are applied to the template just like non-imported style rules. In the myComponent.html template, the text in the tag uses the xx-large style defined in cssLibrary.css.

<template>
  <h1>Words to the Wise</h1>
  <slot></slot>
</template>
4
  • Thanks for your response. I understand your point, but wold your solution would target other templates within component. They have different name obviously so if I have imported styles in myComponent.css, the otherTepmlate.html would be targeted as well? Commented Aug 20, 2019 at 10:36
  • no. It would affect only the component in which it is downloaded, not its child components or parents. This is new feature in winter'20, not my point :) Commented Aug 20, 2019 at 10:37
  • I see. in that component I have couple of other html files (templates). I thought the component.css file would affect all these html files when one of them is rendered since they are just html that reside within myComponent folder or rather they belong to it Commented Aug 20, 2019 at 10:44
  • Every component has shadow DOM by default - created by LWC. So, unless you import the CSS, they will not be affected. Commented Aug 20, 2019 at 10:45
0

In case you are still wondering, you need to create additional css files for each of the html ones.

From Developer Guide:

To reference CSS from an extra template, the CSS filename must match the filename of the extra template. For example, templateTwo.html can reference CSS only from templateTwo.css. It can’t reference CSS from miscMultipleTemplates.css or templateOne.css.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .