Это ваше использование @extend
, или, скорее, неспособность Sass иметь дело с сопоставлением групповых символов, что довольно неудивительно, поскольку оно становится довольно сложным.
Bootstrap использует ряд методов, которые я мог бы назвать «нестандартными» для решения некоторых классов. Вы упомянули один из них в своем посте выше - [class*="span"]
.
Естественно, когда вы используете @extend x
, Sass расширяет класс x
. К сожалению, он (в настоящее время) не может знать, что сопоставление с подстановочными знаками также влияет на вывод класса. Так что да, в идеальном мире [class*="span"]
также будет расширен для определения [class*="span"], .user-filter
, но в настоящее время Sass не может этого сделать.
При расширении .row-fluid
достаточно включить в него правила, вложенные в него. классы span, как указано выше, не будут настраивать подстановочные знаки для расширенных интервалов.
bootstrap-sass уже имел миксин для столбцов / строк фиксированной ширины, makeRow()
и makeColumn()
. Я только что нажал makeFluidColumn()
миксин, который, ну, в общем, делает жидкий промежуток. Ваш код станет:
.user-container {
@extend .row-fluid;
}
.user-filter {
@include makeFluidColumn(2);
}
.user-list {
@include makeFluidColumn(10);
}
К сожалению (как обычно) все не так просто. Bootstrap использует этот фрагмент для сброса поля в первом классе spanx, который является дочерним элементом строки.
> [class*="span"]:first-child {
margin-left: 0;
}
Однако мы не можем переопределить это для каждого вызова makeFluidColumn
, и поэтому мы должны вручную установить значение margin-left для любого элемента, который будет первым дочерним элементом в текущей строке. Стоит также отметить, что смешивание классов spanx и makeFluidColumn
классов приведет к тому, что первый класс spanx будет сброшен с запасом, независимо от того, является ли он первым столбцом в строке.
Следовательно, ваш код будет
.user-container {
@extend .row-fluid;
}
.user-filter {
@include makeFluidColumn(2);
margin-left: 0; // reset margin for first-child
}
.user-list {
@include makeFluidColumn(10);
}
Это не очень красивое решение, но оно работает, и все это связано с тем, как Bootstrap использует сопоставление с подстановочными символами, как вы собрали в своем обновлении вопроса. Я только что перенес это в ветку 2.0.2, так что вам придется использовать Bundler с Git для его установки, но я надеюсь на выпуск в ближайшие пару дней.