我正在通过http://www.codecademy.com/courses/web-beginner-en-jNuXw/0/1?curriculum_id=50579fb998b470000202dc8b解决 CSS 问题(实际上,只是帮助朋友学习 HTML/CSS)然后来了遇到一个奇怪的问题。如果您擦除 a 中任何<p>
标签中的内容<div>
,则 div 会向上移动。例如,删除单词“妈妈”而不删除<p>
. 据我所知,这是因为元素设置为vertical-align: baseline
并且由于某种原因基线正在更改。我只是无法确切地弄清楚它为什么会发生变化或导致它发生变化的原因。
需要明确的是,我不是在寻求帮助以使 div 对齐。这只是将它们的垂直对齐设置为“顶部”的问题。我只是想了解如何计算文档流。具体问题是:为什么空的div会向上移动?
演示:jsFiddle
更新:这是一个新的 jsFiddle - http://jsfiddle.net/tonicboy/2DtTw/3/,它删除了许多规则,将问题归结为一个简化的用例。由此我们可以看出,当一个<p>
标签里面有文本时,父级<div>
的基线设置在文本的基线上。删除文本时,父项的基线<div>
设置为 <div>
. 这是为什么?
HTML:
<div class="friend" id="best_friend"><p>Arthur</p></div>
<div class="friend"><p>Batmanuel</p></div>
<div class="friend"><p>Captain Liberty</p></div>
<div class="friend"><p>The City</p></div>
<div class="friend"><p>Justice</p></div>
<div class="family"><p></p></div>
<div class="family"><p>Dad</p></div>
<div class="family"><p>Bro</p></div>
<div class="family"><p>Sis</p></div>
<div class="family"><p>Rex</p></div>
<div class="enemy"><p>Baron Violent</p></div>
<div class="enemy"><p>The Breadmaster</p></div>
<div class="enemy"><p>The Deadly Nose</p></div>
<div class="enemy"><p>Dinosaur Neil</p></div>
<div class="enemy" id="archnemesis"><p>Chairface</p></div>
CSS:
div {
position: relative;
display: inline-block;
height: 100px;
width: 100px;
border-radius: 100%;
border: 2px solid black;
margin-left: 5px;
margin-top: 5px;
text-align: center;
}
div p {
position: relative;
margin-top: 40px;
font-size: 12px;
}
.friend {
border: 2px dashed green;
}
.family {
border: 2px dashed blue;
}
.enemy {
border: 2px dashed red;
}
#best_friend {
border: 4px solid #00C957;
}
#archnemesis {
border: 4px solid #cc0000;
}