Как правильно определить контейнеры в Singularity для разных окон просмотра

Я попробовал Singularity для нового проекта. До сих пор я использовал Susy. Обычно я предпочитаю публиковать вопросы по отдельности, но в данном случае вопросы связаны с одной центральной точкой. Настройка следующая.

Моя главная страница представляет собой заголовок с фоновым изображением и нижний колонтитул с градиентом, а контейнер с содержимым должен быть окружен полями. Основной скелет разметки выглядит следующим образом:

<div class="mainwrap">
  <header class="container"></header>
  <div class="container"></div>
</div>
<div class="footwrap">
  <footer class="container">
</div>

Базовый стиль оберток и контейнеров выглядит следующим образом:

%wrap {
    width:100%;
    @extend %clearfix;
}

.mainwrap {
    @extend %wrap;
    background: image-url('texturetastic_gray.png') repeat top left;
    @include box-shadow(black 0.2em 0.2em 0.5em);
    margin-bottom:1em;
}
.footwrap {
    @extend %wrap;
    background-color: #484d51;
    @include background-image(linear-gradient(left, rgb(72, 77, 81), rgb(22, 25, 28)));
    @include filter-gradient(rgb(72, 77, 81), rgb(22, 25, 28), horizontal);
}

.container {
    @include background-grid;
    max-width:900px;
    margin: 0 auto;
    @extend %clearfix;
}

Теперь у меня две проблемы:

1) На странице два пробела

Два пробела

Первое можно исправить с помощью overflow-x: hidden; на %wrap или .mainwrap. Но второй разрыв между .mainwrap и .footwrap этим не исправить. Желаемый вид границы между .mainwrap и .footwrap должен выглядеть следующим образом. Нижний колонтитул визуально находится под основной оболочкой, а у основной оболочки есть видимая тень:

Желаемое состояние

Но с описанной настройкой html и css я всегда получаю пробел, как уже было показано выше:

Текущее состояние с пробелом

Есть идеи, почему? :(

2) Настройка контейнера. Это самая неопределенная часть, с которой у меня возникает большинство проблем, и я спрашиваю себя, как лучше всего справиться. Мои основные настройки:

$grids: 4;
$grids: add-grid(6 at 550px);
$grids: add-grid(9 at 750px);
$grids: add-grid(12 at 900px);
$grids: add-grid(16 at 1200px);
$grids: add-grid(18 at 1400px);

$gutters:0.25;
$gutters: add-gutter(.20 at 900px);
$gutters: add-gutter(.15 at 1200px);

и для .container я добавил:

padding-left: gutter-span();
padding-right: gutter-span();

как было предложено в одной из тем форума Singularity на Github. Но я все еще не уверен, какой может быть лучшая практика. По сути, у меня было бы минимальное заполнение, которое переключается на margin: 0 auto; когда достигнута определенная максимальная ширина контейнера. Подходит ли путь с padding-left/right и gutter-span, а также с максимальной шириной?

Означает ли это, что вам нужно определить базовый номер столбца и максимальную ширину контейнера. Когда эта максимальная ширина достигнута, вы увеличиваете максимальную ширину и переопределяете активную настройку сетки с помощью add-grid() и настраиваете заполнение. Вы продолжаете это до тех пор, пока максимальная ширина, скажем, 1400 или 1600 пикселей для контейнера не будет достигнута. А в точках останова для более широких окон просмотра вы должны использовать кратные промежутку промежутка. Подводя итог, это будет выглядеть, например. это?

$grids: 4;
$grids: add-grid(8 at 600px);
$grids: add-grid(12 at 900px);
$grids: add-grid(16 at 1400px);

$gutters:0.25;
$gutters: add-gutter(.20 at 600px);
$gutters: add-gutter(.15 at 900px);
$gutters: add-gutter(.10 at 1400px);

.container {
    @include background-grid;
    max-width:600px;
    @include breakpoint(600px) {
        max-width: 900px;
    }
    @include breakpoint(900px) {
        max-width: 1400px;
    }
    @include breakpoint(1400px) {
        max-width: 1600px;
    }

    margin: 0 auto;
    padding-left: gutter-span();
    padding-right: gutter-span();
    @include breakpoint(600px) {
        padding-left: gutter-span(2);
        padding-right: gutter-span(2);
    }
    @include breakpoint(900px) {
        padding-left: gutter-span(3);
        padding-right: gutter-span(3);
    }
    @include breakpoint(600px) {
        padding-left: gutter-span(4);
        padding-right: gutter-span(4);
    }
    @extend %clearfix;
}

Но в основном это привело бы к довольно большому количеству точек останова, если вы хотите детально контролировать вещи в контейнере? Или есть более элегантное решение?

С уважением Ральф


person rkoller    schedule 10.12.2013    source источник
comment
Не могли бы вы сократить свои стили до тех, которые имеют отношение к проблеме, а затем поделиться ими через sassbin.com ?   -  person Andrey Mikhaylov - lolmaus    schedule 11.12.2013
comment
Суть sassbin для решения проблемы пробела в первом пункте: sassbin.com/gist/7900290   -  person rkoller    schedule 11.12.2013


Ответы (1)


второй разрыв между .mainwrap и .footwrap с этим не исправить. Желаемый вид границы между .mainwrap и .footwrap должен выглядеть следующим образом. Нижний колонтитул визуально находится под основной оболочкой, а у основной оболочки есть видимая тень:

Вы применили margin-bottom: 1em к .mainwrap. Прокомментируйте это, и все готово.


я все еще не уверен, что может быть лучшей практикой. По сути, у меня было бы минимальное заполнение, которое переключается на margin: 0 auto; когда достигнута определенная максимальная ширина контейнера.

  1. Почему вы дублируете медиа-запросы? Вы можете написать стили max-width и padding в одних и тех же вызовах breakpoint. Но дело в том, что вам не нужно менять max-width. Установите максимальную ширину статически ТОЛЬКО на самое большое максимальное значение.
  2. Вы можете применить max-width, padding и margin 0 auto одновременно. Не нужно применять их выборочно. Просто будьте осторожны с тем, к каким элементам вы применяете эти стили.
  3. Если у вас все в порядке со статическим заполнением, например. грамм. padding: 0 1em, то вам даже не нужны точки останова. Если вам нужно дополнение относительно размера сетки, не стесняйтесь использовать точки останова. Если вы чувствуете, что они громоздкие, создайте миксин.
person Andrey Mikhaylov - lolmaus    schedule 11.12.2013
comment
Argh, я проглядел нижний край в .mainwrap. Спасибо! Теперь поведение снова имеет смысл. Сначала я думал, что это вызвано моей HTML-разметкой в ​​сочетании с Singularity. Позор мне ;) Но что касается пробелов по бокам контейнера контента и того, как с ними обращаться, я до сих пор не согласен и не чувствую себя комфортно. Что контейнер остается статичным, например. padding: 0 1em до тех пор, пока не будет достигнута максимальная ширина, например, 1400px. - person rkoller; 12.12.2013
comment
Учитывая этот сценарий, если вы пытаетесь сохранить максимальное количество символов в строке от 45 до 75, и у вас есть макет с одним столбцом, например. сообщение в блоге, вы можете получить длинную длинную строку. И в этом суть моей неуверенности в определении полей пробелов и изменении ширины контейнера от мобильного до рабочего стола, вообще говоря. Как решить это элегантно. - person rkoller; 12.12.2013
comment
И по поводу вашего первого пункта. Я в основном думал, что Sass и/или точка останова будут объединять идентичные точки останова в одном и том же селекторе. Но лучше мне проверить результат самостоятельно, прежде чем ожидать чего-то подобного. Виноват. Я буду писать их как один с этого момента. Спасибо - person rkoller; 12.12.2013
comment
@rpk о пробелах по бокам контейнера с содержимым – я не вижу лишних вертикальных пробелов: sassbin.com/gist/7933564 Вы имеете в виду что-то другое? - person Andrey Mikhaylov - lolmaus; 12.12.2013
comment
@rpk Учитывая этот сценарий, если вы пытаетесь сохранить максимальное количество символов в строке от 45 до 75 и у вас есть макет с одним столбцом, например, для сообщение в блоге, вы можете получить длинную длинную строку. Определите ширину строки из 75 символов и установите для параметра max-width это значение. - person Andrey Mikhaylov - lolmaus; 12.12.2013
comment
В сущности нет лишних пробелов по горизонтали - я сократил основной пример, касающийся проблемы с пробелом, прежде чем опубликовать его. По сути, я просто имел в виду тот факт, как действовать в диапазонах ширины области просмотра, где максимальная ширина еще не достигнута. То, что вам не нужно придерживаться одних и тех же тонких отслаивающихся полос пробелов слева и справа, которые вы изначально определили для вашего наименьшего базового окна просмотра, но теперь вам нужно иметь дело с ними на более широких окнах просмотра до тех пор, пока не будет разорвана максимальная ширина. не достигнут. - person rkoller; 13.12.2013
comment
Как вы предложили, определите ширину 75-символьного... думаю, я мог бы попробовать двойной подход для контейнера. Пока не будет достигнуто значение максимальной ширины, используйте padding-left padding-right: gutter-span(); решение в одной или двух контрольных точках, а затем установите максимальную ширину в более ранней точке. Надо будет попробовать на странице проекта, а потом посмотреть, как получится на реальном контенте. - person rkoller; 13.12.2013