0

I'm trying to nest a bunch of font awesome styles into a single css class I can use whenever I'd like. However, I'm getting an error with "Undeclared Mixin".

My .less file looks something like this:

@import (reference) "../Content/bootstrap/font-awesome/font-awesome.less";

.step-current {
    .fa;
    .fa-play;
    .text-success;
}

In this case all I'd like to do is apply the styles .fa, .fa-play, and .text-success whenever I use the class step-current on an element. However, I'm getting an error when I try to compile this less file (using Web Compiler 2015).

.fa-play is an Undeclare Mixin.

Obviously I could just go like this: class="fa fa-play text-success" within my tag but I'd really like to know if it's possible to do the above.

Thanks

henry
  • 4,244
  • 2
  • 26
  • 37
Booster
  • 140
  • 9
  • @dippas thanks for unflagging this. I had upvoted the comment that said it might be a duplicate, but then looked a little further and realized it wasn't. You were so on-the-ball that it was marked as a duplicate before I undid my vote - can't fault you for being speedy! – henry Sep 01 '16 at 20:37

1 Answers1

2

LESS is tripping up because Font Awesome doesn't style .fa-play, only .fa-play:before. Get around this by using LESS's :extend syntax (see also this css-tricks write-up/tutorial). The key is the all keyword, which will bring in the :before styles.

.custom-class {
    &:extend(.fa, .fa-play all);
    .text-success
}

(Just guessing about what to do with your .text-success - that doesn't appear to be part of Font Awesome… but then it wasn't part of your problem, so I guess it doesn't matter. You might need to use :extend to pull it in, or you might be able to just use it as a normal old LESS mixin as I did above.)

henry
  • 4,244
  • 2
  • 26
  • 37