2014-04-22 2 views
7

Хорошо, прошу прощения, если это повторение, но я не мог найти никаких рабочих ответов нигде.Центрирование двух разделов динамической ширины на той же линии и

Я хочу иметь два divs (ширина 50% каждый) бок о бок ... так что левый и правый - внутри содержимого div (see photo below).

Я хочу, чтобы у них была минимальная ширина 300px, и когда страница становится меньше 600px (это когда оба divs достигают своих минимумов), я хочу, чтобы divs обертывались .. так один поверх другого.

Я попытался сделать это здесь: fiddle, но у меня проблемы.

Вот именно то, что я хочу:

enter image description here

+5

Вам следует выполнить быстрый поиск 'media query'. –

+1

Кроме того, какая удача вам досталась +5 upvote на ваш первый вопрос. Люди, которые публикуют диаграммы изображений, являются моими любимыми. –

ответ

5

вы делаете вещи трудно для себя! Это можно сделать быстро и легко с помощью inline-block. Приятного JSfiddle.

Позволяет объяснить код:

.wrapper 
{ 
    text-align: center; /* specifies that the inline-blocks (which are treated 
     like text here) will be centered. */ 

    font-size: 0; /* Explained later */ 
    max-width: 1000px; /* Your desired max-width */ 
    position: relative; /* These two lines center your wrapper in the page. */ 
    margin: 0 auto; 
} 

Теперь для внутренних 50% элементов:

.left, .right{ 
    display: inline-block; /* This will treat these divs like a text element. 
     This will work with the parent's "text-align: center" to center the element. */ 

    min-width: 300px; 
    width: 50%; 
    font-size: 16px; /* Explained below */ 
    vertical-align: text-top; /* Explained below */ 
} 

Вы можете быть удивлены, почему font-size включен. Это связано с тем, что с этим методом возникает небольшая причуда - если размер шрифта поддерживается по умолчанию, у div будет досадный разрыв между ними, который не может быть устранен с использованием поля.

enter image description here

Однако добавление font-size: 0; к родительскому элементу устраняет этот пробел. Это странно, и тогда вам нужно указать размер шрифта для ваших дочерних элементов, но это стоит того, чтобы простота использования.

Но все еще есть проблема - синий элемент сдвинут вниз и не заподлицо вверху. Это можно исправить с помощью vertical-align: text-top; Это позволит убедиться, что все элементы Div выровнены по вершинам, поэтому они лежат в более приятном узоре. Это еще одна небольшая причуда, которую следует помнить при использовании встроенных блоков. Я знаю, что кажется, что многие вещи исправить только для чего-то такого простого, но по сравнению с вашими другими вариантами, используя inline-block, это самый чистый и простой способ обойти это. (Хотя, если вы предпочитаете, jshanley предлагает очень хорошую альтернативу с помощью поплавковых элементов)

enter image description here

Кроме того, поскольку эти дети в настоящее время рассматривается как текст, они будут автоматически изменить себя, когда окно становится слишком мало! Никаких медиа-запросов не требуется. Ура.

Удачи.

+1

Я действительно думаю, что это жизнеспособный подход, с незначительным раздражением, что вам нужно войти и перестроить текст внутренних элементов обратно в 'left', если вы хотите, чтобы там был обычный текст. Но, как вы сказали, хорошо иметь несколько способов представления, тем более, что остальная часть содержимого сайта может сделать один или другой подход невозможным. И +1 для демонстрации обходного пути для quirk размера шрифта – jshanley

+0

Очевидно, что этот ответ РАБОТАЕТ. Мой вопрос для вас, поскольку я новичок в кодировании, заключается в том, как сделать розовую часть контента такой же высокой, как содержание, которое она содержит? (Возможно, тупой вопрос ...) @AlexanderLozada – user3558711

+0

@ user3558711 - oops, мой плохой. Просто удалите свойство height из контейнера, и оно станет таким же высоким, как и содержимое. JSfiddle - http://jsfiddle.net/mzbku/8/ –

-1

left и right могут иметь одинаковый макет, поэтому я добавляю класс block.
Чтобы использовать float:left и width:50%, он должен работать.

http://jsfiddle.net/emn178/mzbku/7/

добавить медиа-запрос, он должен быть, что вы хотите.
Но вам нужно рассчитать, как установить размер.

+0

Это не реагирует на изменение ширины до 50%, поскольку элемент float, что делает значение '50%' излишним. –

+0

вы попытались реализовать тот же медиапоток размером 750 пикселей, который я дал в своем ответе через 3 минуты после того, как я его разместил, но вы нарушили свой пример, потому что теперь он забрасывает полосу прокрутки, а не показывает фиолетовый элемент при применении медиа-запроса. Я дам вам -0.25 за попытку передать это как свою собственную мысль, и -0.75 для того, чтобы все еще не получить желаемый результат. – jshanley

+0

Я обновил, потому что комментарий Александра, а не ваш ответ. Легко получить номер 750. Когда я писал пример в jsfiddle, вы отправляли свой ответ. Это как раз в то же время. Медиа-запрос - это обычный способ делать отзывчивый, это не ваш. Все могли использовать его. – emn178

3

Вместо того, чтобы использовать встроенный блок, который вызывает некоторые проклейки причуды, вы можете использовать блочные элементы, и плавать как .left и .right влево, давая каждый ширин 50%.

Затем, чтобы сделать их стек, вам нужно немного вычислить. Так как вы определили, что обертка 80% ширины страницы, и точка останова для содержания в 600px (каждый элемент 300px) контрольная точка страницы, была бы на 750px поскольку 80% из 750 600.

Вы можете сделать медиа-запрос, который будет применять стили только тогда, когда ширина страницы меньше 750px и установите .left и .right на ширину 100%, чтобы сделать их стек.

@media only screen and (max-width: 750px) { 
    .left, .right { 
     width: 100%; 
    } 
} 

Это очень просто реализовать, и дает хороший результат, вот fiddle.

+0

Хорошая альтернатива моему ответу. В любом случае мы сталкиваемся с причудами и дополнительными спецификациями, но всегда хорошо иметь выбор. –

+1

@AlexanderLozada Да, я полагаю, что когда вы плаваете элементы, вам нужно беспокоиться о clearfix и всем этим джазом, так что это действительно сводится к личным предпочтениям или какой подход лучше подходит для остальной части содержимого сайта. – jshanley

+0

Этот ответ, кажется, работает также, НО, НО Я беспокоюсь, что у поплавков возникнут проблемы из-за «clearfix и всего этого джаза» (lol!), потому что я не знаю, что это делает ... Я очень ценю ответ, m неопытный кодер. Думаю, ответ Александра поможет мне больше. +1 все еще. – user3558711

1

Я думаю, что ответы Оба @jshanley и @ emn178 в сделать трюк, но я хочу отметить что-то:

дисплей: встроенный блок; css свойство не работает с float: right или float: left, так как когда вы используете свойство float, оно ВСЕГДА автоматически устанавливает свойство отображения для блокировки.

Поскольку вы делаете это:

.right{ 
    min-width:100px; 
    background-color:purple; 
    height:100%; 
    margin-left:50%; 
    display:inline-block; 
} 

дисплей: встроенный блок; Свойство ничего не делает.

+0

Это может быть лучше подходит как комментарий, так как вы не особенно отвечаете на вопрос OP. –

Смежные вопросы