Отмена обтекания float
Отмена обтекания блоков (float) наиболее часто встречающаяся операция при верстке HTML страниц. Мы рассмотрим все известные способы отменить действие CSS свойства float.Прежде чем мы углубимся в методы очистки потока, давайте взглянем на проблему, которую мы пытаемся решить.
Типичный случай HTML верстки
Блоки .el-1 и .el-2 размещаются бок о бок внутри контейнера .container, и один элемент .main следует после .container:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Пример верстки</title> <style> .container {border:1px solid black;} div {float:left;} .el-1 {width:200px; height:120px; background: yellow;} .el-2 {width:120px; height:100px; background: pink;} .main {background: orange; height:50px;} </style> </head> <body> <section> <div></div> <div></div> </section> <section></section> </body> </html>
Мы хотим, чтобы высота контейнера . container была равной высоте самого длинного из его дочерних элементов (т.е. либо .el-1, либо .el-2) и чтобы блок .main, чтобы был после блока .container.
А вот, что мы видим: .container (черная рамка) схлопнулся, как будто в нем ничего нет, блок .main (блок с рыжим фоном) находится под блоком .container, как мы и хотели, но при этом он прячется за блоки .el-1 (с желтым фоном) и .el-2 (с розовым фоном). Черт знает что! Видел бы это мой начальник — непременно сказал бы мне,- «Используй, Шурик, табличную верстку». К счастью, времена, когда web-страницы верстались таблицами уже давно прошли и мы отлично обойдемся и без них. Не верите? Читайте дальше.
Несмотря на то, что многие считают это багом браузера, — это всего лишь принцип, по которому работают плавающие элементы. Следовательно нам нужно заставить родительский элемент расширяться, чтобы полностью вмещать дочерние элементы. Тогда, следующие элементы будут располагаться под контейнером.
Способ 1: метод старой школы
Как вам известно, CSS свойство clear устанавливает с какой стороны элемента запрещено его обтекание другими элементами, следовательно это свойство может предотвратить налезание элементов поверх плавающих. Идея заключается в следующем: вставьте пустой элемент, который свойство clear
под обтекаемыми блоками. Это использовать определенный класс для подобного элемента — давно устоявшаяся традиция, так что вы можете использовать его в вашем HTML. Вот классический CSS код:
.clear { clear: both; }
Который применим к нашей HTML верстке:
<section> <div>Я обтекаемый</div> <div>И я обтекаемый...</div> <br> </section> <section> Браво, вам удалось отменить обтекание </section>
Наш демо-пример, реализуемый с помощью этого метода:
Если вас не волнует схлопывающийся контейнер, а только неправильно расположенный блок . main, то вы можете также поместить «очищающий поток» элемент br после контейнера. Но, если вы решите сделать так, то гораздо проще будет просто добавить свойство
clear
самому элементу .main.
Это простой и понятный метод. Тем не менее, в современной верстке практикуется отделение контента от стиля, поэтому лучше его не использовать.
Способ 2: свойство overflow
Используя свойство overflow в теге .container, мы можем заставить контейнер расшириться до высоты размещенных элементов. Наш CSS будет выглядеть следующим образом:
.container { overflow: hidden; /* или "auto" */ }
Наш HTML останется таким же, каким и был изначально, без дополнительных элементов. Вот, что мы получим в итоге:
К сожалению, у этого метода есть недостаток: любой дочерний элемент, который выступает за пределы контейнера, будет либо обрезан (в случае overflow: hidden;
), либо вызовет появление полос прокрутки (в случае overflow: auto;
).
Способ 3: класс “clearfix”
Мы создаем класс .clearfix с псевдо-элементами ::before и ::after и задаем им display: table
, что создает анонимную ячейку таблицы. Этот класс будет использоваться для очищения плавающих элементов. CSS код выглядит так:
.clearfix:before, .clearfix:after { content: ""; display: table; } .clearfix:after { clear: both; } .clearfix { zoom: 1; /* ie 6/7 */ }
Изменим немного HTML код добавив к классу container класс clearfix:
<section> <div>Я обтекаемый</div> <div>И я обтекаемый...</div> </section> <section> Браво, вам удалось отменить обтекание </section>
Вот результат работы наешго новвого класса:
если вам не нужна поддержка браузеров ниже IE8, то наш код значительно сократится:
. clearfix:after { content: ""; display: table; clear: both; }
Способ 4: значение contain-floats для min-height
Спецификация W3C добавила новое значение для свойства min-height (и для других свойств min/max), для решения этой проблемы. Выглядит оно так:
.container { min-height: contain-floats; }
Этот код дает практически тот же эффект, что и clearfix, или overflow, но с помощью одной строки кода и, к тому же он лишен тех недостатков, о которых мы говорили ранее. К сожалению, пока ни один из браузеров не поддерживает это свойство, так что просто имейте его ввиду.
Итак, у вас есть целый набор различных «clearfix» методов. Применение класса .clearfix стало стандартом, и я очень рекомендую использовать его вместо прежних двух методов.
html — Отменить обтекание текстом input-а при условии ‘мешающего’ TextNode
Вопрос задан
Изменён 6 лет 2 месяца назад
Просмотрен 455 раз
Есть следующая конструкция (генерируемая без моего участия):
<span> <span> <input type="checkbox" name="property[]" value="val1"> <span>Пояснение к чекбоксу</span> </span> </span>
Необходимо убрать обтекание чекбокса текстом, чтобы было как здесь: http://xiper. net/collect/html-and-css-tricks/content/overflow-and-orphans
Способ из ссылки выше работал бы, если бы не мешающий
.
Есть ли способ справиться с этим? Желательно чистый CSS, без JavaScript.
- html
- css
1
Вариант 1 задать отрицательный верхний отступ на величину размера высоты строки:
input { display: block; width: 20px; /*задайте свое необходимое значение */ float: left; } .class3 { display: block; overflow: hidden; margin-top: -16px; /*высота строки */ }
<span> <span> <input type="checkbox" name="property[]" value="val1"> <span>Пояснение к чекбоксу Пояснение к чекбоксу Пояснение к чекбоксу Пояснение к чекбоксу Пояснение к чекбоксу Пояснение к чекбоксу</span> </span> </span>
Вариант 2 position: absolute
к input
:
. class2 { position: relative; padding-left: 20px; display: block; } input { display: block; width: 20px; position: absolute; left: 0; top: 0; }
<span> <span> <input type="checkbox" name="property[]" value="val1"> <span>Пояснение к чекбоксу Пояснение к чекбоксу Пояснение к чекбоксу Пояснение к чекбоксу Пояснение к чекбоксу Пояснение к чекбоксу</span> </span> </span>
Вариант 3 flex:
.class2 { display: flex; } input { display: block; width: 20px; }
<span> <span> <input type="checkbox" name="property[]" value="val1"> <span>Пояснение к чекбоксу Пояснение к чекбоксу Пояснение к чекбоксу Пояснение к чекбоксу Пояснение к чекбоксу Пояснение к чекбоксу</span> </span> </span>
6
input{display: inline-block; float: left; width: 20%;} . class2{width: 400px;display: block;} .class3{display: inline-block;width: 77%; float:left}
<span> <span> <input type="checkbox" name="property[]" value="val1"> <span>Пояснение к к чекбоксуПоясне ние к чекб оксуПоясн ение к чек бок уПоясне ние к чекбок уПояснение к чек боксуП ояснение к чекбоксуПояснение к чекбоксуПояснен ие к чекбоксуПоясн ение к чекбоксуclass2</span> </span> </span>
Типа такого?
Зарегистрируйтесь или войдите
Регистрация через Google
Регистрация через Facebook
Регистрация через почту
Отправить без регистрации
Почта
Необходима, но никому не показывается
Отправить без регистрации
Почта
Необходима, но никому не показывается
Нажимая на кнопку «Отправить ответ», вы соглашаетесь с нашими пользовательским соглашением, политикой конфиденциальности и политикой о куки
html — Как удалить перенос слов из текстовой области?
спросил
Изменено 1 год, 11 месяцев назад
Просмотрено 148 тысяч раз
моя простая текстовая область не показывает горизонтальную полосу, когда текст переполняется. Он переносит текст для новой строки. Итак, как удалить перенос слов и отобразить горизонтальную полосу, когда текст переполняется?
- html
- текстовая область
- перенос слов
2
текстовая область { пробел: предварительно; перелив: обычный; переполнение-x: прокрутка; }
white-space: nowrap
также работает, если вы не заботитесь о пробелах, но, конечно, вы не хотите этого, если вы работаете с кодом (или абзацами с отступом или любым содержимым, где может быть преднамеренно несколько пробелов ) … поэтому я предпочитаю до
.
overflow-wrap: нормальный
(был word-wrap
в старых браузерах) необходим на случай, если какой-то родитель изменил эту настройку; это может привести к переносу, даже если установлено до
.
также — вопреки принятому в настоящее время ответу — текстовые области часто переносят по умолчанию. pre-wrap
кажется по умолчанию в моем браузере.
9
Текстовые области не должны переноситься по умолчанию, но вы можете установить wrap=»soft» для явного отключения переноса:
РЕДАКТИРОВАТЬ: Атрибут «обертка» официально не поддерживается. Я получил его с немецкой страницы SELFHTML (английский источник здесь), где написано, что IE 4.0 и Netscape 2.0 его поддерживают. Я также протестировал его в FF 3.0.7, где он работает как положено. Здесь все изменилось, SELFHTML теперь является вики, а ссылка на английский источник мертва.
EDIT2: Если вы хотите убедиться, что каждый браузер поддерживает его, вы можете использовать CSS для изменения поведения переноса:
Используя каскадные таблицы стилей (CSS), вы можете добиться того же эффекта с помощью
пробел: nowrap; переполнение: авто;
. Таким образом, атрибут wrap можно считать устаревшим.
Отсюда (кажется, отличная страница с информацией о текстовом поле).
EDIT3: я не уверен, когда он изменился (согласно комментариям, это должно быть около 2014 года), но wrap
теперь является официальным атрибутом HTML5, см. w3schools. Изменен ответ, чтобы соответствовать этому.
15
У меня работает следующее решение на основе CSS:
<голова> <тип стиля='текст/css'> текстовая область { пробел: nowrap; переполнение: прокрутка; переполнение-y: скрыто; переполнение-x: прокрутка; переполнение: -moz-полосы прокрутки-горизонтальные; } стиль> голова> <тело> <форма> форма> тело>
0
Я нашел способ сделать текстовое поле со всем этим работающим одновременно:
- С горизонтальной полосой прокрутки
- Поддержка многострочного текста
- Текст не переносится
Хорошо работает на:
- Chrome 15. 0.874.120
- Firefox 7.0.1
- Опера 11.52 (1100)
- Сафари 5.1 (7534.50)
- ИЭ 8.0.6001.18702
Позвольте мне объяснить, как я к этому пришел: я использовал встроенный инструмент инспектора Chrome и увидел значения в стилях CSS, поэтому я пробую эти значения вместо обычных… методом проб и ошибок, пока не уменьшу их до минимума и вот это для тех, кто хочет.
В разделе CSS я использовал только это для Chrome, Firefox, Opera и Safari:
textarea { белое пространство: nowrap; переполнение: прокрутка; }
В разделе CSS я использовал только это для IE:
textarea { переполнение: прокрутка; }
Это было немного сложно, но есть CSS.
Тег (x)HTML, подобный этому:
И в конце секции
такой JavaScript:
window.onload=function(){ document.getElementById("myTextarea").wrap='off'; }
JavaScript предназначен для того, чтобы валидатор W3C передал XHTML 1. 1 Strict, поскольку атрибут wrap не является официальным и, следовательно, не может быть тегом (x)HTML напрямую, но большинство браузеров обрабатывают его, поэтому после загрузки страницы он устанавливает этот атрибут.
Надеюсь, это можно будет протестировать в других браузерах и версиях и помочь кому-то улучшить его и сделать его полностью кросс-браузерным для всех версий.
4
Этот вопрос кажется самым популярным для отключения переноса текстовой области
. Однако по состоянию на апрель 2017 года я обнаружил, что IE 11 (11.0.9600) , а не отключит перенос слов с помощью любого из вышеуказанных решений.
Единственное решение , которое работает для IE 11, — это wrap="off"
. wrap="soft"
и/или различные атрибуты CSS, такие как white-space: pre
, измените, где IE 11 выбирает перенос, но он все еще куда-то переносится. Обратите внимание, что я тестировал это с 9 или без него.0039 Просмотр совместимости . IE 11 вполне совместим с HTML 5, но не в этом случае.
Таким образом, чтобы получить строки, которые сохраняют свои пробелы и выходят за правую сторону, я использую:
К счастью, это работает и в Chrome и Firefox. Я не защищаю использование pre-HTML 5 wrap="off"
, просто говорю, что это требуется для IE 11.
2
Если вы можете использовать JavaScript, следующий вариант может быть наиболее переносимым на сегодняшний день (протестировано Firefox 31, Chrome 36):
- div с
contenteditable="true"
- стили, предложенные Partly
- Отправка формы JavaScript при нажатии кнопки: Как отправить форму с помощью JavaScript?
http://jsfiddle.net/cirosantilli/eaxgesoq/
<стиль> раздел # редактор { пробел: предварительно; перенос слов: обычный; переполнение-x: прокрутка; } <стиль>
Кажется, не существует стандартного переносимого решения CSS:
обтекание
атрибут не является стандартнымпробел: предварительно;
не работает для Firefox 31 дляtextarea
. Fiddle, открытый запрос функции.
Кроме того, если вы можете использовать Javascript, вы также можете использовать редактор ACE:
http://jsfiddle.net/cirosantilli/bL9vr8o8/
контент<скрипт> var editor = ace.edit('редактор') editor.renderer.setShowGutter(false) скрипт>
Вероятно, работает с ACE, потому что он не использует текстовую область
, которая либо недостаточно определена, либо непоследовательно реализована, но не уверен, что она использует contenteditable
.
1
Зарегистрируйтесь или войдите в систему
Зарегистрируйтесь с помощью Google
Зарегистрироваться через Facebook
Зарегистрируйтесь, используя адрес электронной почты и пароль
Опубликовать как гость
Электронная почта
Обязательно, но не отображается
Опубликовать как гость
Электронная почта
Требуется, но не отображается
Свойство CSS flex-wrap
❮ Назад Полное руководство по CSS Далее ❯
Пример
При необходимости заверните гибкие элементы:
div {
дисплей: гибкий;
flex-wrap: обернуть;
}
Попробуйте сами »
Определение и использование
Свойство flex-wrap
указывает, должны ли гибкие элементы сворачиваться или нет.
Примечание: Если элементы не являются гибкими, свойство flex-wrap
не действует.
Показать демо ❯
Значение по умолчанию: | сейчас |
---|---|
Унаследовано: | нет |
Анимация: | нет. Читать о анимированном |
Версия: | CSS3 |
Синтаксис JavaScript: | объект .style.flexWrap=»nowrap» Попробуй |
Поддержка браузера
Числа в таблице указывают первую версию браузера, которая полностью поддерживает это свойство.
Числа, за которыми следует -webkit- или -moz-, указывают первую версию, которая работала с префиксом.
Недвижимость | |||||
---|---|---|---|---|---|
гибкая пленка | 29,0 21,0 -вебкит- | 11,0 | 28,0 18,0 -моз- | 9. 0 6.1 -вебкит- | 17,0 |
Синтаксис CSS
flex-wrap: nowrap|wrap|wrap-reverse|initial|inherit;
Значения свойств
Значение | Описание | Играй |
---|---|---|
сейчас | Значение по умолчанию. Указывает, что гибкие элементы не будут переноситься | Демонстрация ❯ |
упаковка | Указывает, что гибкие элементы будут переноситься при необходимости | Демонстрация ❯ |
обратная сторона | Указывает, что гибкие элементы будут переноситься, если необходимо, в обратном порядке | Демонстрация ❯ |
начальный | Устанавливает для этого свойства значение по умолчанию. Читать про начальный | |
наследовать | Наследует это свойство от родительского элемента. Читать о унаследовать |
Связанные страницы
Учебник CSS: CSS Flexible Box
Справочник CSS: свойство flex
Справочник CSS: свойство flex-flow
Справочник CSS: свойство flex-direction
Справочник по CSS: свойство flex-grow
Справочник по CSS: свойство flex-shrink
Ссылка HTML DOM: свойство flexWrap
❮ Назад Полное руководство по CSS Следующий ❯
НАБОР ЦВЕТА
Лучшие учебники
Учебное пособие по HTMLУчебное пособие по CSS
Учебное пособие по JavaScript
Учебное пособие
Учебное пособие по SQL
Учебное пособие по Python
Учебное пособие по W3.CSS
Учебное пособие по Bootstrap
Учебное пособие по PHP
Учебное пособие по Java
Учебное пособие по C++
Учебное пособие по jQuery
4 9000
Справочник по HTML
Справочник по CSS
Справочник по JavaScript
Справочник по SQL
Справочник по Python
Справочник по W3.