我知道,當inline-block
元素具有其計算值不同於visible
的overflow
屬性時,其基線是底部邊緣邊緣。如何清除內嵌塊元素的底部邊距:隱藏?
單擊切換按鈕將overflow:hidden
添加到div
元素中,在此fiddle的實踐中見此實踐。 div
的基線將與其底部邊緣對齊,從而在其下方生成一些空白/邊界。
此行爲在answer中有很好的解釋。
我的問題是,我該如何「修復」它,以便在元素收到overflow:hidden
時不會出現邊距?
邏輯修復我能想到的是改變div
的vertical-align
(默認爲baseline
)到別的東西。但我無法決定哪vertical-align
是最合適的:
top
在Chrome 33似乎目前竊聽,元素的所有直接子(文本節點和inline-block
/replaced
內容)的頂端對齊邊緣的div
。bottom
會是另一種選擇,但div
再向上輕微移動/向下,而其動畫height
/垂直padding
使用jQuery。middle
似乎工作正常,據我測試,但我不知道如何計算結果對齊瀏覽器然後。
我還發現了其他黑客,如父申請line-height:0
或font-size:1px
並在其中重置其line-height
/font-size
容器包裝所有的孩子,但這些都是非常醜陋的黑客。
對於vertical-align
,這個用例的適當值是什麼?
更新:middle
明顯地將內聯塊元素與行盒中間對齊。從我的測試結果來看,似乎只要元素的底部邊緣高於基線,就不會產生閃爍問題,動畫效果爲height
。爲了證明閃爍問題與text-align
bottom
/text-bottom
發生(注意頂部邊框和文字):demo
所以middle
或text-top
(爲了安全起見)一vertical-align
似乎做工精細(避免top
由於Chrome瀏覽器BUG)。我仍然樂於見解。
語境:我使用jQuery動畫的inline-block
元素。jQuery的動畫(fadeIn
/fadeOut
/slideUp
/slideDown
/animate
/等)中的元素設置overflow:hidden
而動畫,使具有一個動畫inline-block
元件下方的整個頁面的不舒服的副作用要略微向下推動用於動畫的持續時間。
下面是另一個demo說明上面的段落。在SSCCEs使用
代碼:
<div>
some text and an inline block element <span></span>
</div>
<br>
<button>
toggle overflow hidden
</button>
$('button').click(function() {
var st = $('div')[0].style;
st.overflow = !st.overflow ? 'hidden' : '';
});
span {
display: inline-block;
width: 10px;
height: 50px;
background: red;
}
div {
display: inline-block;
}
<div>
some text and an inline block element <span></span>
</div>
<br>
<button>
Animate for 1 second
</button>
$('button').click(function() {
$('div').animate({ width: 300 }, 1000);
});
(相同的CSS作爲演示#1)
Demo #3閃爍而動畫height
由於vertical-align: bottom
:
baseline
<div>
some text and an inline block element <span></span>
</div>
<br>
<button>
Animate for 2 seconds
</button>
var i = 0;
$('button').click(function() {
$('div').animate({ height: ++i % 2 ? 300 : 100 }, 2000);
});
span {
display: inline-block;
width: 10px;
height: 50px;
background: red;
}
div {
display: inline-block;
border: solid;
vertical-align: bottom;
}
是否有可能以一個特定的高度添加到div? – Iqbal
@Iqbal nope,我的實際使用案例有動態內容。 –