Что означает "поток элемента" в модели визуального форматирования CSS?
В CSS2 раздел 9.3: схемы позиционирования :
Элемент называетсявне потока , если он плавает, абсолютно расположен или является корневым элементом. Элемент называется in-flow, если он не является out-of-flow. Поток элемента A-это множество, состоящее из A и всех входящих в поток элементов, ближайшим предком которых является A.
Я могу понять, что означает out of flow и in-flow , но я не понимаю что означает "ближайший внепотоковый предок" в последнем предложении? Может ли кто - нибудь привести простой пример?
3 ответа:
Элемент называется вне потока, если он плавает, абсолютно расположен или является корневым элементом.
Если элемент плавает,
position:absolute
,position:fixed
или элемент<html>
, он находится вне потока.Элемент называется in-flow, если он не является out-of-flow.Само собой разумеется.
Поток элемента A-это множество, состоящее из A и всех входящих в поток элементов, ближайшим предком которых является A.
Это смешно. запутанным. И, кажется, в интернете нет ничего, что могло бы дать хорошее объяснение. Фактически, дажерабочая группа CSS называет эту фразу "бессмысленной".
Судя по определению в вашем вопросе, это не кажется слишком сложным. В следующем примере
div { border: 1px solid; margin: 10px; } .out-of-flow { float: left; }
<div id="1" class="in-flow"> #1 is in-flow <div id="1a" class="in-flow">#1a is in-flow</div> </div> <div id="2" class="in-flow"> #2 is in-flow <div id="2a" class="out-of-flow">#2a is out-of-flow</div> </div> <div id="3" class="out-of-flow"> #3 is out-of-flow <div id="3a" class="in-flow">#3a is in-flow</div> </div> <div id="4" class="out-of-flow"> #4 is out-of-flow <div id="4a" class="out-of-flow">#4a is out-of-flow</div> </div>
Поток элемента №1 - это только он сам. Он имеет дочерний элемент in-flow, но поскольку #1 не является out-of-flow, он не может быть ближайшим out-flow предком #1a.
Поток элемента №2 - это только он сам. У него нет потокового потомка, и даже если бы он был, № 2 не является вне-потоковым.
Поток самого элемент №3 - это он сам и №3А, потому что № 3а-это входящий поток, а его ближайший предок-выходящий из потока-это № 3.
Поток элемента №4 - это только он сам. У него нет потокового потомка.
Источник: я редактор спецификаций CSS.
Хотя это не прописано явно в тексте, из определения следует, что только элементы вне потока (включая, чаще всего, корневой элемент) имеют поток. Поток - это все элементы, которые являются потомками элемента out-of-flow, за исключением тех, которые "скрыты", будучи вложенными в другой элемент out-of-flow.
Например, в:
<html> <body> <p id=one>some in-flow text <div style="position: absolute;"> <p id=two>some in-flow text </div> <p id=three>some in-flow text
Существует два элемента out-of-flow-HTML элемент и элемент div. "Поток" HTML-элемента-это он сам, элемент BODY и #one и #three; если вы пройдете по древу предков для каждого из них, первый элемент out-of-flow, с которым они сталкиваются, - это HTML-элемент.
DIV имеет свой собственный поток, состоящий из самого себя и #two, потому что когда вы идете по цепочке предков #two, вы сначала попадаете в DIV, прежде чем попасть в HTML. Грубо говоря, "поток" элемента - это набор вещей, которые все работают вместе в макете. Элементы вне потока (и их потомки) выкладываются в основном самостоятельно. Эта концепция на самом деле не очень полезна, Тхо - не беспокойтесь об этом.