напиши первым
Обычно заходите в Google Translate, чтобы увидеть объяснение float:
Один из них гласит:she relaxed, floating gently in the water
В одно мгновение богиня плавно плавала в воде. Хэппи шлепает по воде, вау. . .
Не думайте об этом, мир того не стоит, давайте перейдем к делу, на чудесной картинке выше мы видим, что богиня по-прежнему занимает пространство воды, и богиня плывет. Так что давай, ладно, я больше не могу писать, давайте сразу вопрос начнем. . .
Я думаю, что многие люди дажеfloat
Я не знаю, что такое сознание, но мы должны знать, что принципы многих характеристик тесно связаны со словами или буквами, которыми они названы, а не названы случайно. Из названия вы можете увидеть некоторые из первоначальных замыслов оригинального дизайна.
Выявление проблемы — ключ к успеху
Задайте себе три вопроса:
第一 浮动会造成什么影响?
第二,如何解决这些因为浮动而造成的影响?
第三,bfc原理?
На самом деле, я лично понимаю, что основная проблема, вызванная флоатингом, состоит в том, чтобы разрушить поток документов, тогда возникает проблема,float
Нарушен документооборот, зачем так проектироватьapi
, я проверил некоторую информацию и, наконец, выяснил, это потому, что оригинальный дизайнfloat
Цель состоит в том, чтобы реализовать функцию набора текста, с помощью которой текст может обтекать изображение, и это то, о чем мы иногда задумываемся:После установки поплавка он все равно будет сжимать текстовое содержимое в контейнере.
Например, посмотрите на следующий код:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>float实现浮动</title>
</head>
<style>
.z1{
height: 200px;
width: 200px;
float: left;
text-align: center;
line-height: 200px;
background: skyblue;
}
.fu {
width: 400px;
}
</style>
<body>
<div class="fu clearfix">
<div class="z1">设置了float为left的图片</div>
<div class="z2">你看,我没有被浮动哥哥挡住哦,这是一段神奇旅行,一天我遇上了白雪公主</div>
</div>
</body>
</html>
Схема эффекта выглядит следующим образом:
Видя это, это хоть как-то понятно? Как видно из приведенного выше рисунка, даже если изображение плавает, вне нормального потока документа, оно также перекрывает элементы, которые не плавают, но не перекрывает текстовое содержимое, что также подтверждает, чтоfloat
этоapi
существуетВо-первыхОсновная цель разрабатываемого: реализовать функцию обтекания текста набором картинок.
Размышляя об этом, я вдруг понял, как выглядят другие шаблоны компоновки, и начал экспериментировать. удалить контейнерz1
изfloat
свойства, добавленоposition
свойства, код выглядит следующим образом
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>absolute实现浮动</title>
</head>
<style>
.z1{
height: 200px;
width: 200px;
box-sizing: border-box;
position: absolute;
text-align: center;
background: skyblue;
padding-top: 80px;
opacity: 0.8;
}
.fu {
width: 400px;
}
</style>
<body>
<div class="fu clearfix">
<div class="z1">设置了positon为absolute的图片</div>
<div class="z2">你看,我被absolute哥哥挡住哦,这是一段神奇旅行,一天我遇上了白雪公主</div>
</div>
</body>
</html>
Схема эффекта выглядит следующим образом:
Мы видим эту настройкуabsolute
Контейнер в том смысле, что он полностью выходит за рамки обычного документооборота. Перекрывает весь контейнер и текстовое содержимое в текущей позиции. Сопоставив и подумав об этом, вы обнаружите, что это еще раз доказываетfloat
Основная цель, для которой он был разработан. Если это можно так понять, я думаю, какие методы следует использовать для очистки разных бизнесовfloat
, или что использовать вместоfloat
, будет очень четкое направление.
На самом деле, вы обнаружите, чтоabsolute
иfloat
Они не будут покрывать обычный поток документов перед ними. Это должно быть связано с механизмом рендеринга браузера. Контент будет рендериться сверху вниз. После успешного рендеринга он не будет покрываться последующими плавающими элементами. (Не рассмотрим случай принудительного переопределения с помощью fix и т. д.).
Простой код выглядит следующим образом:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>清除float浮动</title>
</head>
<style>
.z1{
height: 200px;
width: 200px;
box-sizing: border-box;
float: left;
text-align: center;
background: skyblue;
padding-top: 80px;
opacity: 0.5;
}
.z2 {
background: yellow
}
.z3 {
background: red;
}
.z4 {
background: green;
}
.z5 {
background: pink;
}
</style>
<body>
<div class="fu">
<div class="z2">没有设置任何浮动的容器,背景为黄色</div>
<div class="z3">没有设置任何浮动的容器,背景为红色</div>
<div class="z1">设置了浮动的元素,opacity为0.5</div>
<div class="z4">没有设置任何浮动的容器,背景为绿色</div>
<div class="z5">没有设置任何浮动的容器,背景为粉色</div>
</div>
</body>
</html>
Схема эффекта выглядит следующим образом:
Из аннотаций и описаний на рисунке мы можем ясно знать, что,float
Это не повлияет на документ, который был визуализирован ранее, но повлияет на документ, который будет визуализирован после него. Итак, вопрос в том, как мы можем устранитьz1
плавающийz4
,z5
Каково влияние?
Сначала нам нужно знать,z1
Каковы эффекты этого поплавка?Эффекты следующие:
Первое воздействие: пострадал
z4
,z5
Макет.
Второй эффект: влияет на высоту родительского контейнера Высота обычного родительского элемента является адаптивной, а высота представляет собой общую высоту содержимого, которое он содержит, а плавание внутреннего элемента приводит к тому, что высота родительского контейнера крах.
Третий эффект: высота родительского контейнера свернута, что повлияет на макет документа на том же уровне, что и родительский элемент.
Следующий код прекрасно иллюстрирует эти эффекты:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>清除float浮动</title>
</head>
<style>
.z1{
height: 200px;
width: 200px;
box-sizing: border-box;
float: left;
text-align: center;
background: skyblue;
padding-top: 80px;
opacity: 0.5;
}
.z2 {
background: yellow
}
.z3 {
background: red;
}
.z4 {
background: green;
}
.z5 {
background: pink;
}
.z6 {
color: #fff;
background: black;
}
.z7 {
color: #fff;
background: blue;
}
.fu {
/* overflow: hidden; */
}
</style>
<body>
<div class="fu">
<div class="z2">没有设置任何浮动的容器, 背景为黄色</div>
<div class="z3">没有设置任何浮动的容器, 背景为红色</div>
<div class="z1">设置了浮动的元素, opacity为0.5</div>
<div class="z4">没有设置任何浮动的容器, 背景为绿色</div>
<div class="z5">没有设置任何浮动的容器, 背景为粉色</div>
</div>
<div class="z6">和父级元素同级的容器, 没有设置任何浮动, 背景为绿色</div>
<div class="z7">和父级元素同级的容器, 没有设置任何浮动, 背景为绿色</div>
</body>
</html>
Схема эффекта выглядит следующим образом:
Через аннотации на рисунке мы можем ясно видеть три воздействия, упомянутые выше, а затем отчетливо видны воздействия.Как решить эти воздействия?Решения важны
Устранение этих трех последствий требует мышления в двух направлениях:
Первое направление: решить влияние родительского элемента на его родственные элементы, я предпочитаю решатьвнешнее противоречие.
Второе направление: решить влияние плавающих элементов внутри родительского элемента на его родственные элементы, я предпочитаю решатьвнутренний конфликт.
Как говорится, семейное уродство не может быть обнародовано. Итак, давайте сначала решим внешнее противоречие. Как его решить? Идея его решения не что иное, как сделать так, чтобы высота родительского элемента больше не разрушалась, а учитывать высоту плавающего элемента. Помните ключевой момент, в это время внутренние противоречия все еще существуют. Например, плавающий элемент имеет высокую степень перекрытия со своими последующими одноуровневыми элементами.
разрешать внешние конфликты
триггер bfc
Первый — вызватьbfc
, почему, потому что триггерbfc
, высота будет включать высоту плавающего элемента. Как его вызвать, вы можете установить родительский элементoverflow:auto;
для других триггеровbfc
Я не буду говорить о методе, я в основном говорю о принципе. код показывает, как показано ниже
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>清除float浮动</title>
</head>
<style>
.z1{
height: 200px;
width: 200px;
box-sizing: border-box;
float: left;
text-align: center;
background: skyblue;
padding-top: 80px;
opacity: 0.5;
}
.z2 {
background: yellow
}
.z3 {
background: red;
}
.z4 {
background: green;
}
.z5 {
background: pink;
}
.z6 {
color: #fff;
background: black;
}
.z7 {
color: #fff;
background: blue;
}
.fu {
overflow: hidden;
}
</style>
<body>
<div class="fu">
<div class="z2">没有设置任何浮动的容器, 背景为黄色</div>
<div class="z3">没有设置任何浮动的容器, 背景为红色</div>
<div class="z1">设置了浮动的元素, opacity为0.5</div>
<div class="z4">没有设置任何浮动的容器, 背景为绿色</div>
<div class="z5">没有设置任何浮动的容器, 背景为粉色</div>
</div>
<div class="z6">和父级元素同级的容器, 没有设置任何浮动, 背景为绿色</div>
<div class="z7">和父级元素同级的容器, 没有设置任何浮动, 背景为绿色</div>
</body>
</html>
Схема эффекта выглядит следующим образом:
Из рисунка хорошо видно, что после срабатывания БФК родительского элемента внешнее противоречие разрешается, но не разрешается внутреннее противоречие. Так что начинайте решать внутренние конфликты прямо сейчас. Как решить внутреннее противоречие, то есть высота плавающего элемента внутри родительского элемента перекрывается с высотой следующих одноуровневых элементов. На этот раз не будем спешить с решением внутренних конфликтов, а рассмотрим еще один способ разрешения внешних конфликтов.четкий принцип
Добавьте псевдоэлемент к родительскому элементу: код выглядит следующим образом:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>清除float浮动</title>
</head>
<style>
.z1{
height: 200px;
width: 200px;
box-sizing: border-box;
float: left;
text-align: center;
background: skyblue;
padding-top: 80px;
opacity: 0.5;
}
.z2 {
background: yellow
}
.z3 {
background: red;
}
.z4 {
background: green;
/* clear: left */
}
.z5 {
background: pink;
}
.z6 {
color: #fff;
background: black;
}
.z7 {
color: #fff;
background: blue;
}
.fu {
}
.clearfix:after {
display: block;
overflow: hidden;
content: '伪元素的内容哦';
clear: both;
height: 0;
background: slateblue;
}
</style>
<body>
<div class="fu clearfix">
<div class="z2">没有设置任何浮动的容器, 背景为黄色</div>
<div class="z3">没有设置任何浮动的容器, 背景为红色</div>
<div class="z1">设置了浮动的元素, opacity为0.5</div>
<div class="z4">没有设置任何浮动的容器, 背景为绿色</div>
<div class="z5">没有设置任何浮动的容器, 背景为粉色</div>
</div>
<div class="z6">和父级元素同级的容器, 没有设置任何浮动, 背景为绿色</div>
<div class="z7">和父级元素同级的容器, 没有设置任何浮动, 背景为绿色</div>
</body>
</html>
Многие люди не знают, каков принцип очистки float псевдоэлементами, и почему добавление этого псевдоэлемента к родительскому элементу может очистить float родительского элемента. Здесь я намеренно использую псевдоэлементыcontent
Написал немного текста и добавил фоновый цвет, немного похожий на гейский. . .
Хорошо, давайте сначала посмотрим на общий рендеринг:
Неудивительно, как видно из приведенного выше рисунка, внешние противоречия разрешились. Это только начало, следите за новостями и продолжайте смотреть на скриншоты ниже:Как видно из аннотаций на рисунке, почему псевдоэлемент должен быть установлен
display:block
, перейдите к следующему снимку экрана.
Как видно из рисунка выше, почему
height
Для установки на 0. еслиcontent
не является пустой строкой, то содержимое будет отображаться на странице. Но на самом деле при очистке поплавкаcontent
записываются как пустые строки, еслиcontent
Он установлен только на''
пустой символ, тоheight
также могут быть опущены, в том числеoverflow
Можно и не писать, писатьheight
иoverflow
Все для надежности кода. Но есть один очень важныйcontent
Этот атрибут должен быть записан, а не записанcontent
, нет никакого способа очистить поплавок.
Приближаются самые важные очки знаний, смотрите два скриншота:
я намеренно позволилcontent
отображается, вы найдетеОсновной принцип очистки и плавания псевдоэлемента заключается в добавлении контейнера блочного уровня к родительскому элементу и одновременной установке контейнера блочного уровня.clear
свойство, чтобы он мог очистить свой собственный float, чтобы он располагался под плавающим элементом, как обычно в расположении контейнера на уровне блока. В то же время родственные элементы родительского элемента также обычно располагаются за элементом уровня блока, образованным псевдоэлементом, и не будут затронуты плавающим положением.
Следующее, чтобы убитьclear
Скриншот после свойств:
Добавьте дочерний контейнер уровня блока к родительскому элементу, конечно, это последний дочерний контейнер уровня блока родительского элемента. В то же время установите свойство clear для подконтейнера уровня блока, чтобы очистить его плавающий элемент, чтобы подконтейнер можно было расположить за плавающим элементом, а также поддерживать высоту родительского элемента. Тогда родственные элементы родительского элемента также могут быть расположены нормально. Таким образом, этот подконтейнер не может иметь высоту и содержимое, иначе это повлияет на макет родительского элемента.
На данный момент решения внешних конфликтов и их соответствующие принципы были четко сформулированы. Так как же разрешить внутренние конфликты?
По сути, принцип решения внутренних противоречий такой же, как и у второго метода решения внешних противоречий: при очистке плавания первого элемента, затронутого плаванием, последующие элементы не будут затронуты плаванием. код показывает, как показано ниже:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>清除float浮动</title>
</head>
<style>
.z1{
height: 200px;
width: 200px;
box-sizing: border-box;
float: left;
text-align: center;
background: skyblue;
padding-top: 80px;
opacity: 0.5;
}
.z2 {
background: yellow
}
.z3 {
background: red;
}
.z4 {
background: green;
clear:both;
}
.z5 {
background: pink;
}
.z6 {
color: #fff;
background: black;
}
.z7 {
color: #fff;
background: blue;
}
</style>
<body>
<div class="fu">
<div class="z2">没有设置任何浮动的容器, 背景为黄色</div>
<div class="z3">没有设置任何浮动的容器, 背景为红色</div>
<div class="z1">设置了浮动的元素, opacity为0.5</div>
<div class="z4">没有设置任何浮动的容器, 背景为绿色</div>
<div class="z5">没有设置任何浮动的容器, 背景为粉色</div>
</div>
<div class="z6">和父级元素同级的容器, 没有设置任何浮动, 背景为绿色</div>
<div class="z7">和父级元素同级的容器, 没有设置任何浮动, 背景为绿色</div>
</body>
</html>
Схема эффекта выглядит следующим образом:
установить внутренний элементclear:both;
После очистки флота внутренние конфликты и внешние конфликты разрешаются напрямую. Некоторые люди могут подумать, что если за контейнером z4 находится плавающий элемент, я не хочу объяснять это здесь, потому что принцип может быть получен рекурсивно тот же, но давайте проанализируем последний код:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>清除float浮动</title>
</head>
<style>
.z1{
height: 200px;
width: 200px;
box-sizing: border-box;
float: left;
text-align: center;
background: skyblue;
padding-top: 80px;
opacity: 0.5;
}
.z2 {
background: yellow
}
.z3 {
background: red;
}
.z4 {
background: green;
clear:both;
}
.z5 {
background: pink;
/* clear:both */
}
.z6 {
color: #fff;
background: black;
}
.z7 {
color: #fff;
background: blue;
}
.fu {
overflow: auto;
}
</style>
<body>
<div class="fu">
<div class="z2">没有设置任何浮动的容器, 背景为黄色</div>
<div class="z3">没有设置任何浮动的容器, 背景为红色</div>
<div class="z1">设置了浮动的元素, opacity为0.5</div>
<div class="z4">没有设置任何浮动的容器, 背景为绿色</div>
<div class="z1">设置了浮动的元素, opacity为0.5</div>
<div class="z5">没有设置任何浮动的容器, 背景为粉色</div>
</div>
<div class="z6">和父级元素同级的容器, 没有设置任何浮动, 背景为绿色</div>
<div class="z7">和父级元素同级的容器, 没有设置任何浮动, 背景为绿色</div>
</body>
</html>
Вот несколько скриншотов эффекта:
Родительский элемент не очищает поплавок, существуют внешние противоречия и внутренние противоречия
Родительский элемент использует bfc для очистки поплавка, внешнее противоречие разрешено, а внутреннее противоречие все еще существует.
Установив очистку для первого элемента блочного уровня того же уровня после плавающего элемента в родительском элементе, чтобы очистить поплавок, внутреннее противоречие разрешается, а также разрешается внешнее противоречие.
заclear
иleft
иright
, не говоря уже об этом,api
вещи, нормальныеboth
Вот и все. Это сочинение почти закончено. Наконец, резюмируя:
Разным предприятиям могут потребоваться разные методы очистки резервов.Независимо от того, какой метод вы выберете, вы не сможете избежать внешних и внутренних конфликтов.Вашему бизнесу необходимо сохранять внутренние конфликты, разрешать только внешние конфликты или разрешать как внешние, так и внутренние конфликты. Они должны быть решены в соответствии с характеристиками бизнеса. Во-вторых, следует ли использовать bfc, clear или псевдоэлемент, и какой метод использовать для запуска, если используется bfc. Это также зависит от особенностей бизнеса.
Симпатичное заявление в конце статьи: Если вы делаете репост или цитату, пожалуйста, вставьте исходную ссылку и уважайте проделанную работу, не ложась спать допоздна😂. В статье могут быть ошибки, комментарии приветствуются, обсуждения также приветствуются. Статья может быть написана недостаточно хорошо, пожалуйста, потерпите меня. Что касается фронтенда, у меня тоже разбито сердце, жизнь слишком коротка, я изучаю фронтенд, вношу немного больше и становлюсь немного счастливее~