CSS 行內對齊的黑魔法

來源:互聯網
上載者:User
orange 盡量帶給大家分享實際項目中的坑怎麼填,當然只是提供思想,方法很多歡迎討論,還有就是對於剛上手前端的新人不是特別友好,沒關係,涉及到基礎知識我會對應的進行指引,給出連結或給出提示,大家可以自行 Google(百度)。


說到行內對齊大家可能會想到類似水平對齊,垂直對齊總結類型的文章,既然我們叫 黑魔法 就不會是基礎的對齊教程,基礎教程的文章好多,大家想必都知道多種方法實現對齊

項目背景

還是 orange 所在公司的移動端項目,上案例

截多了,咱們只看第一行的文字,算是每一天都有的 title,有人說: TMD 你在逗我?這有什麼可講的誰都會寫好不好!

先別激動,我當然不是解釋這個布局怎麼實現的,簡單的例子更容易解釋問題,繼續往下看初步實現的代碼,

  14 OCT  x  今日瞎選6篇

如下

細心的朋友看出問題了,看不出也沒關係,我們加兩條輔助線嘛!

  14 OCT  x  今日瞎選6篇    

效果如下

好,相信大家現在一目瞭然存在的問題了,那就是前面的 date 並沒有垂直置中,原因呢!解釋起來也簡單

這裡只需要修改一行代碼就能回答大家的疑問

14 OCT orange

將上文對應 html 修改後,得到

這個讓我不禁想起了小學英語作業本的四線格,哈哈,大寫字母的確都在上方的兩個格,而小寫上中下都有例子,單獨看 g,很好解釋上面的顯現了吧。

看似簡單的案例還就是這麼特殊,恰巧都是數字和大寫字母,細心的還會發現後面的 6 也有問題,一不留神,不置中了,設計來找你,你一臉蒙逼的說我是按照置中寫的啊,解決不了了?

不是的,我們接下來就是解決這個問題的,現實項目要更複雜一些,有經驗的前端知道字型間的差異,個別的字型上下相差特別懸殊,

這裡前後的字型是不同的,但幸好垂直方向的差異不是很大,這裡我引入了項目原有的字型,中間的 x 其實是個 svg 這裡不贅述。因為看懂思想再來一百個不對齊的你也能迎刃而解。

進入真正的魔法世界,針對此案例給出兩個思路大家自行選擇

inline-block 魔法

不一步一步解釋,直接上已經解決問題的代碼

  14 OCT  x  今日瞎選6篇    

效果如下

好棒啊,我只改變了後面文字的 font-size: 16px; 解決問題了耶,高興的拿給設計師,對比之後返工了,

what fuck?什麼鬼?心中一萬個草泥馬(神獸)奔騰而過,仔細看!瞪大眼睛。。。。沒錯

今字的上頭出了我們的輔助線,設計師也會將手機截屏然後對照原稿做輔助線對比的哦~

解決辦法相當簡單,只需要

.desc {  margin-top: 1px;  /* add */  font-size: 16px;  font-family: FZYouH_512B;}

只需要加一行,噹噹噹噹~


嗑嗑,湊合這樣吧,為什嗎?明明對齊了啊!再仔細看,我是認真的,沒玩大家,發現我們的 date 低了不到一個像素(使用 Retina 螢幕的朋友看的明顯些),有人問一像素以內可以調整嘛?明確告訴大家可以,之後的文章準備做解釋,這裡不展開

第一種方案到這為止,上手實驗的朋友雖然沒有我的字型,你不必去下載,瀏覽器預設字型一樣的,我們講的是原理,沒必要還原我的 demo,關鍵就是 block 元素的上下 margin 調整。

提醒:這裡的 margin 可以設定負值,如果負值無用自己去探索原因吧,給大家線上項目的控制台

我這裡給的就是負值,是有作用的哦,可以去 敢玩移動端首頁,記得在模擬器裡查看(不然會亂成一鍋粥),控制台一看便知,不過多解釋啦。

vertical-align 魔法

完整代碼如下

  14 OCT  x  今日瞎選6篇    

以上代碼運行效果和之前一摸一樣這裡就不一一費大家流量啦(良心前端。。。。)

和上一個方法區別在於我們行內元素還用之前的 span 標籤。然後通過 vertical-align: 1px; 來調節垂直方向上下的位置。對這個屬性不熟悉的朋友可以去看MDN的文檔:https://developer.mozilla.org...

幾種文法如下

/* keyword values */vertical-align: baseline;vertical-align: sub;vertical-align: super;vertical-align: text-top;vertical-align: text-bottom;vertical-align: middle;vertical-align: top;vertical-align: bottom;/*  values */vertical-align: 10em;vertical-align: 4px;/*  values */vertical-align: 20%;/* Global values */vertical-align: inherit;vertical-align: initial;vertical-align: unset;

我們用的這個 values 長度單位實際應用較少,卻是行內元素垂直對齊的黑魔法。不瞭解的不要緊,趕快 get 新技能

總結

兩種方案都可行,有時候不要因為一像素絞盡腦汁,找到突破口,以後誰還會怕行內對齊了呢?

  • 相關文章

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.