Error component/simple-element-selector
This error occurs when the framework is set to not allow to create components from simple element selectors. This is an intentional setting and a decision of the project maintainer.
You will never see this error in a default configuration! It is turned on by somebody in your team/project on purpose.
But it is highly recommended as a best practice to turn it on:
- _main.sass
@import "~spotcss"
+spot-set('disallow-simple-element-components', true)
// expceptions for some elements that are allowed to be a component:
+spot-set('exceptions-of-simple-element-components', 'html, body, button, select, textarea')
- my-component.sass
@import "main"
+component('a') // throws error
...
...
Throws error:
Error: SPOT CSS [component/simple-element-selector] - given selector is a simple element selector ('a') but the framework is currently set to not allow such selectors for components. Read more at https://spotcss.io/errors/component/simple-element-selector
on line 96 of src/_public.mixins.scss, in mixin `component`
from line 3 of my-code/my-component/my-component.sass
>> s a simple element selector ('"+$selector+"') but the framework is currently
------------------------------------------^
The mixins and functions used in the code above: spot-set, component, disallow-simple-element-components, exceptions-of-simple-element-components.
Solution
The best advice is: "do not create components from the simple HTML elements only". But all the options are:
- use a specific class for the component, e.g.
+component('a.link')
- or use a context selector, e.g.
+component('#content a')
- or add this
<a>
element into other component structure, e.g.+element('a')
- or add exception for this element if you know what you are doing, with
+spot-set('exceptions-of-simple-element-components'...
- or turn this feature off (if you really want), with
+spot-set('disallow-simple-element-components'...
Reason of this error
We have experience from many projects that creating components from the basic semantic elements such a <a>
, <p>
, <h1-h6>
, <img>
, <ol>
, <ul>
, <li>
, <strong>
, <table>
, etc. will lead to overload the component with many variants and contexts and it becomes unmanageable.
To prevent this undesirable result, the framework supports a setting to prevent the creation of such components.
Note: Of course you can use custom html elements such a +component('my-button')
.
You can find more about this topic in the documentation of the Best practices - Do not style standard HTML elements as components.