Хранение плавающих элементов div внутри ограничений страницы

0

Я не уверен, что это можно сделать без javascript, но я надеюсь, что у него есть решение. Рассмотрим эту скрипту: http://jsfiddle.net/PPeYH/

* {
    -webkit-box-sizing: border-box;
    -moz-box-sizing: border-box;
    box-sizing: border-box;
}
.content {
    border: 1px solid;
    min-height: 3em;
}
.container {
    max-width: 600px;
    margin: 0 auto;
    overflow: hidden;
    clear: both;
}
#placeholder-body {
    position: relative;
    border: 0;
}
.split-tile {
    float: left;
}
.split-left {
    width: 60%;
}
.split-left .content {
    margin-left: auto;
    margin-right: 0;
    max-width: 360px;
}
.split-right {
    width: 40%;
}
.split-right .content {
    margin-left: 0;
    margin-right: auto;
    max-width: 240px;
}

<div><div class="content container">Header</div></div>
<div id="placeholder-body">
    <div><div class="content container">Some content</div></div>

    <div class="tile-1 split-tile split-left">
        <div class="content">60% width.</div>
    </div>
    <div class="tile-2 split-tile split-right">
        <div class="content">40%</div>
    </div>

    <div><div class="content container">Some content</div></div>
</div>
<div><div class="content container">Footer</div></div>

Структура, которую вы видите здесь, представляет собой упрощенную версию структуры RWD. Нам нужен весь макет, чтобы оставаться внутри его границ. Если вы измените ширину браузера вверх или вниз, вы увидите, что разделители, отмеченные "60%" и "40%", не соблюдают границы остальных разделов.

"Почему бы вам просто не упаковать 60% и 40% div в контейнере?", Спросите вы. Ну, структура DOM, представленная здесь, выложена с использованием CMS в уже сложной системе. Для этого потребуется больше, чем просто рефакторинг. Мне придется жить, когда плитки выкладываются так, как они есть.

Поэтому мой вопрос: есть ли способ достичь разделения 60/40 на средних divs таким образом, чтобы они сохраняли левый и правый края остальной части макета, используя ТОЛЬКО css?

UPDATE: я не могу сдерживать # placeholder-body до максимальной ширины, потому что мой дизайнер хочет, чтобы я сделал полноцветные фоновые цвета для некоторых из div в структуре.

  • 0
    Я считаю, что он нуждается в контейнере ... Просто если у вас есть ширина, установленная на любой%, отличный от 50:50, разрыв между двумя полями всегда будет смещаться в сторону меньшего размера, когда страница увеличивается. - за исключением, если вы можете сделать решение Лоло и просто ограничить ширину всего до 600
  • 0
    Да, я знаю. :( Но, к сожалению, я не могу создать контейнер для div, если я не создам для него какое-то решение JS. Чего я надеялся избежать.
Теги:

2 ответа

5
Лучший ответ

Если вы можете изменить стиль #placeholder-body, то решение прост:

#placeholder-body {
    max-width: 600px;
    margin: auto;
}

Рабочий образец: http://jsfiddle.net/PPeYH/1/

Другая возможность:

.split-tile {
    margin: auto;
    max-width: 600px;
    width: 100%;
}
.split-left .content {
    width: 60%;
}
.split-right .content {
    margin-left: auto;
    width: 40%;
}
.split-left {
    height: 0;
}

Здесь не используется float, но левый заголовок имеет высоту, равную 0, но переполнение видимо, поэтому выглядит отлично. Проблема в том, что контент больше, чем в правом названии. Вы также можете установить отрицательное верхнее поле на split-right вместо того, чтобы устанавливать высоту в 0 на split-left, но вы должны знать точную высоту.

Рабочий образец: http://jsfiddle.net/PPeYH/3/

Кроме того, возможен медиа-запрос и calc из CSS3:

@media screen and (min-width: 638px) {
    .split-left {
        width: 360px;
        margin-left: calc(50% - 300px);
    }
    .split-left .content {
        width: 360px;
    }
    .split-right {
        width: 240px;
        margin-right: calc(50% - 300px);
    }
    .split-right .content {
        margin-left: 0;
        width: 240px;
    }   
}

Рабочий образец: http://jsfiddle.net/PPeYH/5/

  • 0
    Да, это было бы хорошим решением. Но, к сожалению, мой дизайнер хочет, чтобы я также предоставил серый фон на всю ширину для некоторого содержимого, поэтому я также не могу ограничить # placeholder-body. Это было неясно в вопросе. Я обновлю это.
  • 0
    Я добавил еще 2 решения, вы можете посмотреть.
Показать ещё 3 комментария
-2

скрипка, если вставить сплит-плитку внутри другого контейнера он работает.

<div class="container">
    <div class="tile-1 split-tile split-left">
        <div class="content">
            60% width.
        </div>
    </div>
    <div class="tile-2 split-tile split-right">
        <div class="content">
            40%
        </div>
    </div>
</div>
  • 0
    черт возьми, сри полностью переоценил одну часть.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню