I am looking for some sort of extend
to media queries but I know extend
is not the right thing here.
I have a mixin that is supposed to create classes and media queries for each. Unfortunately my current mixin will create those one by one as you would expect which causes specificity issues.
//create two classes and their media queries
._responsive-margins-top( 1, 6px );
._responsive-margins-top( 7, 60px );
//globals
@screen-xs: 480px;
@screen-sm: 768px;
@screen-md: 992px;
@screen-lg: 1200px;
//////////////////////////////////////| MARGINGS MIXIN
/*
* MARGINS-TOP
*
* @param @el {string} Element name appendix, We use numbers
* @param @value {margin} Space for this margin, We use px
*/
._responsive-margins-top( @el, @value ) {
@xs: ~"top-margin@{el}-xs";
@sm: ~"top-margin@{el}-sm";
@md: ~"top-margin@{el}-md";
@lg: ~"top-margin@{el}-lg";
.@{xs},
.@{sm},
.@{md},
.@{lg} {
&:extend(.no-top-margin-xs all);
}
//////////////////////////////////////| XS
.@{xs} {
margin-top: @value;
}
//////////////////////////////////////| SM
@media (min-width: @screen-sm) {
.@{sm} {
margin-top: @value;
}
}
//////////////////////////////////////| MD
@media (min-width: @screen-md) {
.@{md} {
margin-top: @value;
}
}
//////////////////////////////////////| LG
@media (min-width: @screen-lg) {
.@{lg} {
margin-top: @value;
}
}
}
The output of this is as follows:
.top-margin1-xs {
margin-top: 6px;
}
@media (min-width: 768px) {
.top-margin1-sm {
margin-top: 6px;
}
}
@media (min-width: 992px) {
.top-margin1-md {
margin-top: 6px;
}
}
@media (min-width: 1200px) {
.top-margin1-lg {
margin-top: 6px;
}
}
.top-margin7-xs {
margin-top: 60px;
}
@media (min-width: 768px) {
.top-margin7-sm {
margin-top: 60px;
}
}
@media (min-width: 992px) {
.top-margin7-md {
margin-top: 60px;
}
}
@media (min-width: 1200px) {
.top-margin7-lg {
margin-top: 60px;
}
}
However what I need is this:
.top-margin1-xs {
margin-top: 6px;
}
.top-margin7-xs {
margin-top: 60px;
}
@media (min-width: 768px) {
.top-margin1-sm {
margin-top: 6px;
}
.top-margin7-sm {
margin-top: 60px;
}
}
@media (min-width: 992px) {
.top-margin1-md {
margin-top: 6px;
}
.top-margin7-md {
margin-top: 60px;
}
}
@media (min-width: 1200px) {
.top-margin1-lg {
margin-top: 6px;
}
.top-margin7-lg {
margin-top: 60px;
}
}
Any help is appreciated. I suspect this might not be possible in Less?