La réponse est simple : vous ne pouvez pas le faire parce que Sass ne peut pas (ou ne veut pas) composer le sélecteur correspondant. Vous ne pouvez pas être à l'intérieur d'une requête média et étendre quelque chose qui est à l'extérieur d'une requête média. Ce serait certainement bien s'il pouvait simplement en prendre une copie au lieu d'essayer de composer les sélecteurs. Mais ce n'est pas le cas, donc vous ne pouvez pas le faire.
Utiliser une mixine
Si vous avez l'intention de réutiliser un bloc de code à l'intérieur et à l'extérieur des requêtes média et que vous voulez quand même pouvoir l'étendre, écrivez à la fois un mixin et une classe extend :
@mixin foo {
// do stuff
}
%foo {
@include foo;
}
// usage
.foo {
@extend %foo;
}
@media (min-width: 30em) {
.bar {
@include foo;
}
}
Étendre le sélecteur dans une requête média depuis l'extérieur
Cela ne vous aidera pas vraiment dans votre cas, mais c'est une autre option :
%foo {
@media (min-width: 20em) {
color: red;
}
}
@media (min-width: 30em) {
%bar {
background: yellow;
}
}
// usage
.foo {
@extend %foo;
}
.bar {
@extend %bar;
}
Attendez que Sass lève cette restriction (ou corrigez-la vous-même).
Un certain nombre de discussions sont en cours à ce sujet (veuillez ne pas contribuer à ces fils de discussion à moins d'avoir quelque chose de significatif à ajouter : les mainteneurs sont déjà conscients que les utilisateurs souhaitent cette fonctionnalité, il s'agit juste de savoir comment l'implémenter et quelle doit être la syntaxe).