Необычные медийные запросы с некоторой МЕНЬШЕЙ магией
Было бы неплохо обернуть CSS-стили для разных разрешений внутри некоторых css-классов, используя меньше.
Я хотел бы сделать что-то вроде:
footer {
width: 100%;
}
.tablet {
footer {
width: 768px;
}
}
.desktop {
footer {
width: 940px;
}
}
В конце должно получиться следующее:
footer {
width: 100%;
}
@media screen and (min-width: 768px) {
footer {
width: 768px;
}
}
@media screen and (min-width: 992px) {
footer {
width: 940px;
}
}
.tablet может выглядеть примерно так:
@media screen and (min-width: 768px) {
.tablet {
}
}
Надеюсь, у кого-то есть хорошая идея!
Ответы
Ответ 1
Вот что я сделал в своих проектах:
@desktop: ~"only screen and (min-width: 960px) and (max-width: 1199px)";
@tablet: ~"only screen and (min-width: 720px) and (max-width: 959px)";
@media @desktop {
footer {
width: 940px;
}
}
@media @tablet {
footer {
width: 768px;
}
}
Это позволяет вам определять только ваши медиа-запросы один раз, и вы можете использовать его в своих меньших файлах. Также немного легче читать.:)
Ответ 2
Я полностью согласен с ответом Hai Nguyen (который был принят), но вы можете немного почистить его, сделав что-то вроде этого:
@desktop: ~"only screen and (min-width: 960px) and (max-width: 1199px)";
@tablet: ~"only screen and (min-width: 720px) and (max-width: 959px)";
footer{
width: 100%;
@media @tablet {
width: 768px;
}
@media @desktop {
width: 940px;
}
}
Это, по сути, то же самое, но позволяет вставлять ваши медиа-запросы внутри исходного селектора. Он сохраняет все css для определенного элемента вместе и делает ваши стили более модульными (по сравнению с разделенным методом точки останова).
Ответ 3
+1 для Nguyen и Yancey - и еще одно дополнение.
Если вы хотите явное определение для ширины, вы можете выполнить это с помощью string interpolation
и переменных для ваших контрольных точек. Здесь, например, с настройками бутстрапа - строгие правила - это предотвращение перекрытия определения.
/*
setup
*/
@xs-min: 480px;
@sm-min: 768px;
@md-min: 992px;
@lg-min: 1200px;
@xs-max: (@sm-min - 1);
@sm-max: (@md-min - 1);
@md-max: (@lg-min - 1);
@phone: ~"only screen and (min-width: @{xs-min})";
@phone-strict: ~"only screen and (min-width: @{xs-min}) and (max-width: @{xs-max})";
@tablet: ~"only screen and (min-width: @{sm-min})";
@tablet-strict: ~"only screen and (min-width: @{sm-min}) and (max-width: @{sm-max})";
@desktop: ~"only screen and (min-width: @{md-min})";
@desktop-strict: ~"only screen and (min-width: @{md-min}) and (max-width: @{md-max})";
@large: ~"only screen and (min-width: @{lg-min})";
/*
usage
*/
footer{
width: 100%;
@media @tablet {
width: 768px;
}
@media @desktop {
width: 940px;
}
}
Ответ 4
И вы также можете комбинировать медиа-запросы, подобные этому
@media @desktop, @tablet, @ipad{
//common styles...
}
Ответ 5
Мы используем такую установку:
@vp_desktop: 801px;
@vp_tablet: 800px;
@vp_mobile: 400px;
.OnDesktop(@rules) { @media screen and (min-width:@vp_desktop){ @rules(); } };
.OnTablet(@rules) { @media screen and (max-width:@vp_tablet){ @rules(); } };
.OnMobile(@rules) { @media screen and (max-width:@vp_mobile){ @rules(); } };
Вам нужно только установить переменные, mixins обрабатывают все остальное, поэтому он очень прост в обслуживании, но все же гибкий:
div {
display: inline-block;
.OnTablet({
display: block;
});
}
Стоит отметить, что, хотя этот метод очень прост, если использовать плохо, то ваш вывод CSS будет наполнен медиа-запросами. Я пытаюсь ограничить свои медиа-запросы до 1 точки прерывания, для каждого файла. Где файл будет header.less или search.less.
N.B. Этот метод, вероятно, не будет компилироваться, если вы не используете компилятор javascript.
Ответ 6
Я использую эти mixins и переменные
.max(@max; @rules){@media only screen and (max-width: (@max - 1)){@rules();}}
.min(@min; @rules){@media only screen and (min-width: @min){@rules();}}
.bw(@min; @max; @rules){@media only screen and (min-width: @min) and (max-width: (@max - 1)){@rules();}}
@pad: 480px;
@tab: 800px;
@desktop: 992px;
@hd: 1200px;
Итак, это
footer{
width: 100%;
.bw(@tab,@desktop,{
width: 768px;
});
.min(@desktop,{
width: 940px;
});
}
становится
footer {
width: 100%;
}
@media only screen and (min-width: 800px) and (max-width: 991px) {
footer {
width: 768px;
}
}
@media only screen and (min-width: 992px) {
footer {
width: 940px;
}
}