الوصول إلى لون الفئة في SCSS

Hi there,

this is my first try at creating a custom theme, so please be understanding.

I’m trying to customize the category list page, so it should look like this:

image

The idea is to remove the left border and to add “pills”.
SCSS for adding pills is quite easy:

.category-list tbody .category {
    border-left: none;
    position: relative;
    padding-left: 50px;

    &::after {
        content: "";
        width: 20px;
        height: 80%;
        position: absolute;
        background-color: red;
        border-radius: 20px;
        top: 50%;
        transform: translateY(-50%);
        left: 10px;
    }
}

but I’m unable to access the category color that is available here: discourse/index.html.erb at 1472e47aae5bfdfb6fd9abfe89beb186c751f514 · discourse/discourse · GitHub
image

is there an easy way to access that color from CSS?

3 إعجابات

At the moment there’s not an easy way to do this.

What we could do is move these colors to CSS custom properties instead of setting them inline, which would make the colors easily accessible in any CSS/SCSS. I don’t know when we’ll be able to get to that, but I’ll keep it on my list of to-dos.

7 إعجابات

That would be awesome :slight_smile:
BTW is there any other way to achieve the view I want?
I’ve read that I can override templates for specific parts of Discourse, which template file I must override and how should I do that in my custom theme?

إعجاب واحد (1)

My current workaround is to override components/parent-category-row template.
I’m adding extra div element like this:

{{#unless noCategoryStyle}}
<div class="pill" style="background-color:#{{category.color}}"></div>
{{/unless}}

I’d like to avoid overriding templates because they might change in the future.

@awesomerobot a build-in way to access category color would be awesome :slight_smile:

إعجابَين (2)

@tjot،

من الممكن القيام بحيلة CSS باستخدام حدود العنصر الزائف ::after للحصول على التأثير الذي تريده.

.category-list tbody .category {
    border-left: none;
    position: relative;
    padding-left: 50px;

    > h3:first-child {
        border-width: 0;
        border-style: solid;
        border-color: inherit;

        &::after {
            content: "";
            width: 0px;
            height: 70%;
            position: absolute;
            border-radius: 20px;
            border-width: 10px;
            border-style: solid;
            border-color: inherit;
            top: 50%;
            transform: translateY(-50%);
            left: 10px;
        }
    }
}

لاحظ أنني طبقت النمط مباشرة على عنصر h3 الخاص بالعنوان لأنه ابن مباشر لـ td الذي تم تطبيق النمط المضمن عليه. لذا، إذا تخلص القالب منه في أي وقت، فسيتعين عليك تعديل CSS الخاص بك.

ولكن يمكنك تخطي تجاوز components/parent-category-row كما أردت.

3 إعجابات