Sass/SCSS Mixin для Clearfix - лучший подход?
Я хочу удалить класс clearfix
из своего HTML и включить в my SCSS (приложение Rails 3.1) clearfix mixin. Каков наилучший подход к этому?
Я подумываю просто взять очиститель HTML 5 Boilerplate и превратить его в mixin, а затем @включив его в CSS для элементов, которые нуждаются в очистке.
Скопировано из HTML5 Boilerplate:
/* The Magnificent Clearfix: Updated to prevent margin-collapsing on child elements. http://j.mp/bestclearfix */
.clearfix:before, .clearfix:after { content: "\0020"; display: block; height: 0; overflow: hidden; }
.clearfix:after { clear: both; }
/* Fix clearfix: blueprintcss.lighthouseapp.com/projects/15318/tickets/5-extra-margin padding-bottom-of-page */
.clearfix { zoom: 1; }
Есть ли недостаток в этом? Есть ли способ лучше? Можно ли безопасно удалить clearfix из моей разметки HTML таким образом?
Ответы
Ответ 1
Я, наверное, добавил бы - это решение, с которым я столкнулся. Я все еще довольно новичок во всем этом, поэтому я не знаю, будет ли это на самом деле выполнять ту же работу, что и установка класса элемента для clearfix и использование шаблона HTML5 выше.
@mixin clearfix {
zoom:1;
&:before, &:after {
content: "\0020";
display: block;
height: 0;
overflow: hidden;
}
&:after {
clear: both;
}
}
Edit:
Лучше использовать @extend
вместо mixin, так как он будет генерировать гораздо меньше CSS-кода.
Кроме того, при использовании @extend
полезно использовать немой класс (обозначаемый %
). Это предотвращает неожиданные правила CSS и исключает правило, которое вы распространяете, если оно not непосредственно используется.
%clearfix {
zoom:1;
&:before, &:after {
content: "\0020";
display: block;
height: 0;
overflow: hidden;
}
&:after {
clear: both;
}
}
#head {
@extend %clearfix;
padding: 45px 0 14px; margin: 0 35px 0;
border-bottom: 1px solid $border;
}
Ответ 2
Чтобы получить меньше вывода кода с помощью @extend
, определите clearfix как placeholder (здесь только для современных браузеров без IE 6 +7):
Код Sass:
%clearfix {
&:after {
content: " ";
display: block;
clear: both;
}
}
/* Use above defined placeholder in the selector(s) of your needs via @extend: */
#container {
position: relative;
min-width: 42.5em;
@extend %clearfix;
}
Выход CSS будет:
#container:after {
content: " ";
display: block;
clear: both;
}
#container {
position: relative;
min-width: 42.5em;
}
Ответ 3
// source http://www.alistapart.com/articles/getting-started-with-sass/
// http://nicolasgallagher.com/micro-clearfix-hack/
@mixin clearfix {
// For modern browsers
&:before,
&:after {
content:" ";
display:table;
}
&:after {
clear:both;
}
// For IE 6/7 (trigger hasLayout)
& {
*zoom:1;
}
}
Ответ 4
Почему бы не использовать Compass framework? Он уже предоставляет mixins для clearfix среди множества других полезных миксинов и утилит. Всегда лучше искать существующие инструменты, а не самостоятельно поддерживать дополнительный код.