は、私が思うには、別の「流れの中で」の要件は、そのです210はvisible
に設定される。
From the CSS2 spec:
フロート以外の「オーバーフロー」と絶対配置の要素、ボックスをブロックされていない(例えば、インラインブロック、テーブル細胞、および表キャプションなど)ブロックコンテナ、及びブロックボックス'visible'(その値がビューポートに伝播されている場合を除く)、その内容の新しいブロック書式設定コンテキストを確立します。あなたが引用された要件とoverflow
要件に基づいて
、これはjQueryを使ってそれを行うための一つの方法である:
function isInFlow(elm, ctxRoot) {
ctxRoot = ctxRoot || document.body;
var $elm = $(elm),
ch = -1,
h;
if (!$elm.length) {
return false;
}
while ($elm[0] !== document.body) {
h = $elm.height();
if (h < ch || !okProps($elm)) {
return false;
}
ch = h;
$elm = $elm.parent();
if (!$elm.length) {
// not attached to the DOM
return false;
}
if ($elm[0] === ctxRoot) {
// encountered the ctxRoot and has been
// inflow the whole time
return true;
}
}
// should only get here if elm
// is not a child of ctxRoot
return false;
}
function okProps($elm) {
if ($elm.css('float') !== 'none'){
return false;
}
if ($elm.css('overflow') !== 'visible'){
return false;
}
switch ($elm.css('position')) {
case 'static':
case 'relative':
break;
default:
return false;
}
switch ($elm.css('display')) {
case 'block':
case 'list-item':
case 'table':
return true;
}
return false;
}
テストケースについてはjsFiddleを参照してください。
window.getComputedStyle()
を使用する方がよいかどうかわかりません。
がctxRoot
のフローまたはブロックの書式設定のコンテキストにあるかどうかをチェックしています(前回と同じです)。 ctxRoot
が指定されていない場合は、body
要素と照合します。これは、ctxRoot
が流れていることを確認するためのチェックではありません。このHTML
<div id="b" style="overflow: hidden;">
<div id="ba">ba
<p id="baa">baa</p>
<span id="bab">bab</span>
<span id="bac" style="display:block;">bac</span>
</div>
</div>
でテストケースがあるので、:
var b = $('#b')[0];
console.log('no ',isInFlow(b));
console.log('no ',isInFlow('#ba'));
console.log('yes ',isInFlow('#ba', b));
console.log('no ',isInFlow('#baa'));
console.log('yes ',isInFlow('#baa', b));
console.log('no ',isInFlow('#bab'));
console.log('no ',isInFlow('#bab', b));
console.log('no ',isInFlow('#bac'));
console.log('yes ',isInFlow('#bac', b));
あなたはなぜ私の最初の質問は、ありますこれを知る必要がありますか?実際のアプリケーションでは、これらの品質のいずれかをテストするだけで済みます。 – Blazemonger
これが仕様でのみ使用されている定義の場合は、実際の条件をチェックするのが最良です。 – pimvdb
私は、ブラウザでスタイル付きのコンテンツをコピーして貼り付けることを含む個人的なサイドプロジェクトに取り組んでいます。フローの最初の要素の上マージンと最後の要素の下マージンを削除したい。 – sbichenko