CSS3中的calc()函數(shù)是一種十分實(shí)用的計(jì)算屬性,它可以幫助我們?cè)跇邮奖碇袑?shí)現(xiàn)簡(jiǎn)單的數(shù)學(xué)計(jì)算。然而,如果在calc()函數(shù)中使用百分比單位,很有可能會(huì)導(dǎo)致瀏覽器渲染出現(xiàn)抖動(dòng)現(xiàn)象。
/* 錯(cuò)誤示范 */ .box { width: calc(50% - 10px); margin: 0 auto; background-color: #F5F5F5; }
在上面的代碼中,我們使用calc()函數(shù)來(lái)計(jì)算出一個(gè)元素的寬度。計(jì)算的方式是屏幕寬度的一半減去10像素。如果屏幕寬度為1000像素,那么這個(gè)元素的寬度就應(yīng)該是490像素。但是,當(dāng)我們?cè)跒g覽器中調(diào)整窗口寬度時(shí),就會(huì)發(fā)現(xiàn)元素的寬度出現(xiàn)了抖動(dòng)。
這種抖動(dòng)現(xiàn)象的原因是因?yàn)榘俜直葐挝坏男?shù)點(diǎn)精度問(wèn)題。在上面的代碼中,我們使用了50%的百分比單位,它經(jīng)過(guò)計(jì)算得出的實(shí)際像素值通常是一個(gè)帶有小數(shù)點(diǎn)的值。而這個(gè)小數(shù)點(diǎn)后面的幾位數(shù)字都是被截?cái)嗟模虼嗽赾alc()函數(shù)中使用帶小數(shù)點(diǎn)的百分比單位會(huì)很容易引起計(jì)算錯(cuò)誤,從而導(dǎo)致元素的寬度出現(xiàn)抖動(dòng)。
/* 正確示范 */ .box { width: calc(50vw - 10px); margin: 0 auto; background-color: #F5F5F5; }
為了避免這種抖動(dòng)現(xiàn)象,我們可以使用視口單位來(lái)替代百分比單位。上面的代碼中,我們使用了50vw的視口單位來(lái)代替50%的百分比單位。這樣就可以確保計(jì)算出來(lái)的像素值是一個(gè)整數(shù),從而避免了抖動(dòng)現(xiàn)象的發(fā)生。