Жидкость, элемент Max-Width (субтитры), соответствующий левому плавающему значению, если имеется.Возможный?В настоящее время он игнорирует поля и отступы - PullRequest
2 голосов
/ 02 февраля 2012

См. Заметки в синих областях на странице ниже, чтобы увидеть, чего я пытаюсь достичь.

http://www.a3financial.com/subtitleproblem.php

Здесь у меня есть 2 p, которые представляют собой субтитры, показанные синим цветом, который я хочу, чтобы плавно быть как можно более широким в пределах области содержимого фиксированной ширины, с учетом любого float: отступ / отступ слева изображения.

Из того, что я понимаю, это ожидаемое поведение, когда вы надеваетене устанавливайте ширину для p, и у вас есть один набор для float: left ... но по какой-то причине фон моих субтитров идет позади изображения и не учитывает его поля.Возможно, я ошибаюсь в своих ожиданиях.Я знаю, что жидкости с поплавками трудно / невозможно достичь.Есть ли способ сделать это?

Для ясности, я хочу, чтобы страница выглядела так.Я добавил границы для дополнительной ясности.

http://a3financial.com/images/clarity.png

Насколько мне известно, это все, что применяется к поплавку: right:

#content .subtitle {
    padding-top: 2px;
    float: right;
    background-color: #8FD2E3;
    letter-spacing: -1px;
    font-family: Arial, Helvetica, sans-serif;
    font-size: 18px;
    color: #969696;
}

А вот код для float: left:

img.alignleftimg {
    float: left;
    width: 163px;
    /*margin-right: 30px;F*/
    padding-right: 30px;
}

HTML (извинения за длинный латинский, текст необходим для иллюстрации потока):

<p class="subtitle">Subtitle 1 - should be as wide as possible, respecting the image's padding/margin.</p>
<img src="images/homepage09.jpg" alt="" width="163" height="163" class="alignleftimg" />
<p>nunc nisl velit, fringilla ut ornare non, iaculis in ipsum. Vivamus volutpat quam et dui vestibulum ultricies. Fusce vitae sapien sed ipsum hendrerit dignissim. Lorem ipsum dolor at tellus. Etiam vitae ligula non ante iaculis. Curabitur elementum diam nec etiam lorem ipsum mauris dapibus arcu, sed bibendum libero elit et sem. Nunc at nunc tortor, ut aliquam augue. Etiam ut sem quis tellus iaculis convallis. Nulla viverra, metus eget accumsan. Maecenas pede nisl, elementum eu, ornare ac, malesuada at, erat. Proin gravida orci porttitor enim accumsan lacinia. Donec condimentum, urna non molestie semper, ligula enim ornare nibh, quis laoreet eros quam eget ante. Quisque erat. Vestibulum pellentesque, justo mollis pretium suscipit, justo nulla blandit libero, in blandit augue justo quis nisl. Fusce mattis viverra elit. Fusce quis tortor. Aliquam libero. Vivamus nisl nibh, iaculis vitae, viverra sit amet, ullamcorper vitae, turpis. Aliquam erat volutpat. Vestibulum dui sem, pulvinar sed, imperdiet nec, iaculis nec, leo.Pellentesque tristique ante ut risus. Quisque dictum. Integer nisl risus, sagittis convallis, rutrum id, elementum congue, nibh. Suspendisse dictum porta lectus. Donec placerat odio vel elit. </p>
<p class="subtitle">Subtitle 2 - should also be as wide as possible, pushing text out of the way in this case, to fill 100% of body width.</p>
<p>Aliquam libero. Vivamus nisl nibh, iaculis vitae, viverra sit amet, ullamcorper vitae, turpis. Aliquam erat volutpat. Vestibulum dui sem, pulvinar sed, imperdiet nec, iaculis nec, leo. Fusce odio. Etiam arcu dui, faucibus eget, placerat vel, sodales eget, orci. Donec ornare neque ac sem. Mauris aliquet.</p>

edit: начинает думать, что я использую не тот элемент для этого ... возможно, h2 будет функционировать так, как я собираюсь ... продолжать исследования.

edit 2: это не такПохоже, что h2 имеет какое-либо заметное отличие от использования стр.

edit 3: добавлено изображение, чтобы уточнить, что я хочу.

final edit: Нашел то, что искал и сам ответил на вопрос!Добавление overflow:auto; к классу субтитров привело к тому, что его фон учитывал поля и отступы поплавка!Смотрите принятый ответ.Уточняли вопрос для тех, кто ищет в будущем, так как изначально я не понимал, как правильно использовать поплавки.Вот ссылка на конечный продукт:

http://www.a3financial.com/subtitletest.php

Ответы [ 3 ]

3 голосов
/ 03 февраля 2012

ОК, сначала пара вещей:

float применяется к тому, как элемент блока визуализируется относительно текста основного документа.Float не предназначен для управления размером или положением самих реальных элементов.

Лучший способ увидеть это - пример:

<div id="A" style="float:right;background-color:#0f0;height:20px;">
    my title
</div>
<div id="B" style="background-color:#00f;height:35px;">
     my impressive language skills
</div>

Тогда это означает, что divA будет плавать слева от содержимого (текста) в основном потоке документа (div B находится в основном потоке).Это не влияет на физический размер div A или div B. Вы увидите, что в этом примере div B имеет ширину 100% (фоны обозначают фактический размер контейнера).Поведение Div по умолчанию занимает 100% доступной ширины его контейнера.

Div A настолько велика, насколько необходимо для отображения его содержимого, поэтому может показаться, что его поведение отличается от описанного.Это не совсем так.Поскольку div A плавает, он отображается в своем собственном виртуальном контейнере вне основного документа.Поддельный контейнер установлен на минимально возможный размер, ширина которого в основном равна 0%.Таким образом, как и любой 0% -ный континент, он растягивается столько, сколько необходимо для размещения содержимого внутри).По сути, div A имеет ширину 100% в контейнере шириной 0% (по умолчанию).

Следует также отметить, что в этом примере div A не являетсяпросто плавающий справа от контента внутри div B, но он плавающий справа относительно ВСЕГО контента в основном потоке документов.Это где div с "ясно: оба;"Атрибут css пригодится, так как он гарантирует, что плавающие объекты перестанут плавать в определенной точке документа (содержимое, которое должно быть плавающим, перемещено вниз).

Теперь, когда мы смотрим на ваш документ в частностиТо, что вы пытались эффективно сделать, это сложить 3 поплавка друг с другом ... Плавающее право B и левое B B C. Но сами контейнеры будут настолько большими, насколько они должны быть.Это становится очень сложным для управления и может быть непредсказуемым в разных браузерах ... и вы в конечном итоге пытаетесь управлять шириной, высотой, отступами и полями каждого, а также делать все остальное, просто чтобы контейнеры не перекрывались и не накапливалисьдруг на друга.

Лучшая ставка при использовании поплавков для позиционирования - убедиться, что в любом одном контейнере у вас не более одной плавающей вещи.Итак, в случае вашего документа, что-то вроде этого:

.subtitle {
    padding-top: 2px;
    background-color: #8FD2E3;
    letter-spacing: -1px;
    font-family: Arial, Helvetica, sans-serif;
    font-size: 18px;
    color: #969696;
}
img.alignleftimg {
    float: left;
    width: 163px;
    /*margin-right: 30px;F*/
    padding-right: 30px;
}

Обратите внимание, что в этом CSS только изображение настроено для плавания.Субтитры не должны плавать, потому что вы всегда хотите, чтобы они были 100% ширины относительно любого контейнера, в котором они содержатся.

Тогда для HTML:

<img src="images/homepage09.jpg" alt="" width="163" height="163" class="alignleftimg" />
<div class="section">
<p class="subtitle">Subtitle 1</p>
    <p>
        my impressive language skills 
        my impressive language skills 
        my impressive language skills 
        my impressive language skills
        my impressive language skills
        my impressive language skills 
        my impressive language skills 
        my impressive language skills 
        my impressive language skills 
        my impressive language skills 
        my impressive language skills 
        my impressive language skills 
        my impressive language skills
    </p>
</div>
<div style="clear:both;"></div>
<div class="section">
    <p class="subtitle">Subtitle 2</p>
    <p>Aliquam libero. and some other stuff</p>
</div> 

Обратите внимание, что мы использовали div для группировки субтитров и текста, к которому эти субтитры применяются в одном контейнере контента (разделе).Изображение установлено влево, начиная с первого раздела, поэтому весь текст будет смещен.Мы используем чистый div, чтобы убедиться, что мы прекратим плавать в этой точке, затем мы запускаем контейнер для следующего субтитра и текста.

Как и в HTML, чем меньше вы указываете, тем лучше для вас.Вместо того, чтобы управлять размерами, поплавками, позициями и прочим мусором, я рекомендую указывать как можно меньше в CSS.Это тонкое искусство, но оно окупается.

Теперь в приведенном мной примере контейнер области содержимого и изображение фактически перекрываются.Так что, если вы попробуете фоновые стили или границы и т. Д., Это может стать уродливым.Итак, это когда вы можете указать ширину и поля для управления самими контейнерами;но это проще, если вы будете осторожны, сохраняя только один элемент в любом контейнере.

Вы можете устранить перекрытие контейнеров в вышеупомянутом, добавив в этот CSS (в дополнение к тому, что уже было):

img.alignleftimg + div.section{
    margin-left: 170px;
}

Это необычный селектор css, называемый селектором смежного брата ... в основном он говорит: «Применяется ко всем элементам div с именем класса« section », что также является непосредственным братом для элемента img с классом -name of "alignleftimg" .... блин! В любом случае, я просто установил поле на значение, немного превышающее ширину изображения, и перекрытие устраняется ТОЛЬКО в очень конкретном случае, который мы хотим.

Возможно, вы захотите взглянуть на элемент раздела HTML 5; но я не использовал его здесь, потому что это семантический элемент, и поэтому кросс-браузерная поддержка требует немного больше, чем просто замена тегов div на теги section.

Кроме того, я хочу отметить, что все это обсуждение - вина W3C. Нам нужны были реальные механизмы верстки, которые выполнили работу таблиц верстки HTML еще в 1994 году ... 18 лет спустя CSS-сетка все еще не была завершена и, вероятно, еще 10 лет после того, как ее поддержка в поставляемых браузерах продолжалась.

2 голосов
/ 05 февраля 2012

Оказывается, это возможно возможно!

Добавляя overflow: auto; к классу субтитров, он заставляет его уважать поля изображения и отступы! Кроме того, добавление его в неупорядоченные списки дает дополнительное преимущество, заключающееся в том, что список остается в горизонтальном положении до тех пор, пока не будет завершен до переноса текста вокруг изображения.

Смотрите мой конечный продукт здесь:

http://www.a3financial.com/subtitletest.php

Спасибо следующей ветке за указание мне в правильном направлении. Я сдался, но случайно наткнулся на него, ища несколько другую проблему:

Плавающее изображение слева от ul игнорирует поля / отступы

0 голосов
/ 02 февраля 2012

Для широкого распространения элементов HTML необходимо установить ширину CSS:

width:**percent**%

Ключевое слово в процентах - это число от 0 до 100.

Это расчет. Вычислите отступы и поля, чтобы установить правильный процент ширины. Например: Установка 3 делений жидкости без отступов или полей:

<div class="first"></div>
<div class="second"></div>
<div class="third"></div>

CSS

.first, .second, .third{
    float:left;
    width:33%;
}

Надеюсь, это поможет вам.

...