Размер контейнера DIV к ширине обернутого плавающего содержимого - PullRequest
8 голосов
/ 30 апреля 2011

Я пытаюсь создать контейнер div с шириной только размера содержимого.У меня эта часть работает правильно, используя float: left на контейнере.Вот что у меня есть.

HTML

<div class='container'>
    <div class='floater' style='background-color: #880000'>1</div>
    <div class='floater' style='background-color: #008800'>2</div>
    <div class='floater' style='background-color: #000088'>3</div>
</div>

CSS

.container {
background-color: #123456;
float: left;
}

.floater {
width: 300px;
height: 100px;
float: left;
}

Проблема, с которой я сталкиваюсь, заключается в том, что плавающие элементы div обернуты внутри контейнера,Я хочу, чтобы они были перенесены, но я также хочу, чтобы ширина контейнера div изменилась соответственно.Например, если ваш браузер имеет ширину 1000 пикселей, все работает нормально, а контейнер - 900 пикселей.Однако, если вы уменьшите размер браузера до 750 пикселей, третье погружение будет перенесено на следующую строку, но контейнер будет шириной 750 пикселей;не 600 пикселей, которые я хочу.

Возможно ли поведение, которое я хочу?Если да, то как?

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

Ответы [ 4 ]

2 голосов
/ 30 апреля 2011

Это потому, что ширина элемента .container определяется шириной страницы или содержащего его элемента.Содержащий элемент может или не может быть элементом HTML в зависимости от браузера.По сути, у вас есть элементы .floater, имеющие фиксированную ширину 300px x 100px (установите эксплентность), а ширина и высота элемента .container - это простота.Попробуйте что-то вроде этого.

.container {width: 90%;}

Это приведет к тому, что ширина элемента .container всегда будет меньше ширины содержащего элемента.Так, если, например, содержащий элемент является html, который имеет ширину 1000 пикселей, ширина элемента .convention будет 90% от 1000 пикселей, что будет 900 пикселей.Если html-элемент равен 750px, то элемент .container будет составлять 90% от 750px, что составляет 675px.

Также у вас могут возникнуть или не возникнуть проблемы с кодом в зависимости от того, что у вас есть над, под и внутри .containerэлемент, так как вы не очистили, вы плаваете.Попробуйте что-то вроде этого

.container {overflow: auto;}
0 голосов
/ 11 февраля 2016

Я сделал что-то подобное для галереи изображений миниатюр Instagram, где изображение может быть меньше, чем размер миниатюры, но не больше, и миниатюры вместе занимают 100% ширины контейнера. Это так, что изображения занимают всю ширину, не растягивая их.

Вы можете получить этот эффект довольно легко, если будете использовать препроцессор CSS. Если вы не используете препроцессор CSS, тогда потребуется больше усилий.

Вот пример CodePen , который содержит ссылку на другую демонстрацию.

По сути, волшебная часть это стилус CSS:

floaterSize = 300px

.floater
  max-width floaterSize

for num in (1..10)
  @media screen and (min-width: floaterSize*num)
    .floater
      width unit(100/(num+1), '%')

Что он делает, так это то, что он вычисляет идеальную ширину для элемента с ограничением максимальной ширины, а затем добавит еще один к строке, как только этот предел будет достигнут, что приведет к плавному расположению элементов, каждый из которых не охватывает больше чем указанная максимальная ширина (в данном случае floaterSize).

Первые несколько сгенерированных выглядят так:

@media screen and (min-width: 300px) {
  .floater {
    width: 50%;
  }
}
@media screen and (min-width: 600px) {
  .floater {
    width: 33.333333333333336%;
  }
}
@media screen and (min-width: 900px) {
  .floater {
    width: 25%;
  }
}

Это мобильный подход. По сути, если ваше окно 299px или меньше, вы должны увидеть 1 блок, но если оно 599px или меньше, то оно будет вмещать 2 блока, в то время как 899px будет вмещать 3 блока и т. Д. До тех пор, пока вы не захотите подняться выше. в ширину экрана. Предоставленный стилус будет писать 10 медиа-запросов, до @media screen and (min-width: 3000px).

Весь сгенерированный CSS, который предоставляет код Stylus, можно увидеть ниже.

@media screen and (min-width: 300px) {
  .floater {
    width: 50%;
  }
}
@media screen and (min-width: 600px) {
  .floater {
    width: 33.333333333333336%;
  }
}
@media screen and (min-width: 900px) {
  .floater {
    width: 25%;
  }
}
@media screen and (min-width: 1200px) {
  .floater {
    width: 20%;
  }
}
@media screen and (min-width: 1500px) {
  .floater {
    width: 16.666666666666668%;
  }
}
@media screen and (min-width: 1800px) {
  .floater {
    width: 14.285714285714286%;
  }
}
@media screen and (min-width: 2100px) {
  .floater {
    width: 12.5%;
  }
}
@media screen and (min-width: 2400px) {
  .floater {
    width: 11.11111111111111%;
  }
}
@media screen and (min-width: 2700px) {
  .floater {
    width: 10%;
  }
}
@media screen and (min-width: 3000px) {
  .floater {
    width: 9.090909090909092%;
  }
}
0 голосов
/ 17 апреля 2013

Вам нужно очистить поплавки, чтобы контейнер обернулся. Либо объявление ...

<div style="clear:both"></div> после последнего всплывающего сообщения или добавьте к вам исправление, как ...

http://nicolasgallagher.com/micro-clearfix-hack/

и используя clearfix с сайта выше, измените класс для контейнера на class="container cf"

0 голосов
/ 17 декабря 2011

Ну, у нас была та же проблема. Мы использовали плагин кладки jQuery специально для наших плавающих элементов.

Это http://masonry.desandro.com/demos/centered.html решит вашу проблему!

Единственное, вы должны использовать этот плагин. Опять же, если вы пытаетесь перемещать элементы в контейнере, который не имеет фиксированной ширины, мы предполагаем, что ваш плагин очень выиграет от этого плагина.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...