Expand my Community achievements bar.

Don’t miss the AEM Skill Exchange in SF on Nov 14—hear from industry leaders, learn best practices, and enhance your AEM strategy with practical tips.
SOLVED

getting AEM to recognize styles

Avatar

Level 1

I created a new style for my content fragment component. It appears to be well-formed. =) And i have added it to teh Policies of teh compinent included in my template. When I create the page using my template and style-enabled component, the page does not "apply" to the style. Even though I inspect the page for teh class it still doesn't reference it in the stylesheet. How do I app it to the css on a global level?

1 Accepted Solution

Avatar

Correct answer by
Level 10

Ah I see, well if you are using the We.Retail-style structure then my previous answer is not applicable. You can undo the import you made in your main.less file.

Here is a part of your screenshot:

1827262_pastedImage_1.png

The css.txt file (1) should contain a line referencing the hlarticle.less file (2). This is done with the following line:

less/hlarticle.less

If that doesn't work, could you please post your hlarticle.less file?

View solution in original post

7 Replies

Avatar

Level 10

Hi

"Even though I inspect the page for teh class it still doesn't reference it in the stylesheet" - It sounds like the policy is working, so may your styles are not properly set up? Here is how it should work:

  1. You should have a CSS/LESS file for your specific component style (eg: default.less)
  2. That file should be imported into the component styles file (eg: contentfragment.less)
  3. The component styles file should be imported into the main styles file (main.less)

Here's what that looks like (example based on the popular WKND Tutorial):

1825229_pastedImage_1.png

Avatar

Level 1

Thank you!  I am using the We.retail demo to build off the existing Athlete styles, and the folder structure is different than the WKND tutorial.

If I follow your instructions.

I added the call to the style (hlarticle.less) for my content fragment into the main.less file:

@import "@{sitePath}/components/content/contentfragment/clientlibs/";

The css.txt file has the call out to my hlarticle.less

And I created a client libs folder for my contentfragment component.

But it still isn't work. What I am I missing?

Screen Shot 2019-09-03 at 9.24.54 AM.png

Avatar

Community Advisor

If you don't see your style then following could be the issue-

1. Browser or AEM clientlib caching

2.  hlarticle.less has some error, add directly where main.less is added.



Arun Patidar

Avatar

Correct answer by
Level 10

Ah I see, well if you are using the We.Retail-style structure then my previous answer is not applicable. You can undo the import you made in your main.less file.

Here is a part of your screenshot:

1827262_pastedImage_1.png

The css.txt file (1) should contain a line referencing the hlarticle.less file (2). This is done with the following line:

less/hlarticle.less

If that doesn't work, could you please post your hlarticle.less file?

Avatar

Level 1

Thank you for your help on this matter. Yes sadly, I already had the call to the less/hlarticle.less inside the css.txt file. So in a last effort here is the code for my hlarticle.less file.

.cmp-contentfragment--hlarticle {

    .cmp-contentfragment {

        .cmp-contentfragment__element {

            .cmp-contentfragment__element--ArticleName {

            .cmp-contentfragment__element-label {

                display:none;           

            }

        }

        }

    }

}

Avatar

Level 10

Okay so I think I see the issue.

Your LESS

Simplified LESS

.cmp-contentfragment--hlarticle {

    .cmp-contentfragment {

          ...

    }

}

LESS selector in English

"This style applies to elements with a cmp-contentfragment class which are inside an element with a cmp-contentfragment--hlarticle class"

Example target of the LESS selector

<div ... class="cmp-contentfragment--hlarticle">

    <div ... class="cmp-contentfragment">...</div>

</div>

What the LESS should be

Simplified LESS

.cmp-contentfragment {

    &.cmp-contentfragment--hlarticle {

          ...

    }

}

LESS selector in English

"This style applies to elements with both a cmp-contentfragment and a cmp-contentfragment--hlarticle class"

Example target of the LESS selector

<div ... class="cmp-contentfragment cmp-contentfragment--hlarticle">...</div>

Explanation

The reason that the your LESS selector is wrong is because applying a style using the style dropdown simply appends the associated class to the end of the class attribute of the component's root div.

So a normal Content Fragment component with just the default style will look like this:

<div ... class="cmp-contentfragment">...</div>

A Content Fragment component  with your hlarticle style would look like this:

<div ... class="cmp-contentfragment cmp-contentfragment--hlarticle">...</div>

Practical example

Have a look at the We.Retail List component. It has 4 optional styles:

1828609_pastedImage_12.png

You can find those styles in /apps/weretail/components/content/list/clientlibs/less/list.less. Have a look at this file for more info on how to organise your LESS file.

For more information on LESS selector nesting see this page: Features In-Depth | Less.js

If that still doesn't work...

Check if your styles are even being compiled into the clientlib-base.css file. You can check this at http://localhost:4502/etc.clientlibs/weretail/clientlibs/clientlib-base.css