前言
最近群裡的小夥伴去面試,遇到這樣一個問題,面試官問:"用 css 對一行文字進行佈局,當文字不夠換行的時候,這行文字要居中顯示,當文字出現換行的時候,這行文字要靠左顯示。",遇到這樣的需求一下束手無策,後來查下資料,哦,原來這樣,這裡總結一下實現的具體方法。
正文
1.需求分析與使用場景
具體需求分析:未知文字的長度的時候,當文字的長度小於盒子的寬度的時候,也就是一行可以放的下的時候,文字居中,當文字長度大於盒子寬度的時候,文字要實現自動換行,成為多行文字,此時文字要求左對齊。其實這樣的需求在實際開發中也經常遇到,如下:
2.實現方法
下面針對文字框部分進行實現,不再新增圖片樣式。
(1)通過行內樣式實現
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> <style> .wrap { margin-top: 10px; width: 200px; height: 100px; padding: 5px; background-color: skyblue; text-align: center; } .content { display: inline-block; text-align: left; word-break: break-all; } </style> </head> <body> <div class="wrap"> <span id="content" class="content">鴻星爾克</span> </div> <div class="wrap"> <span id="content" class="content">鴻星爾克板鞋2021夏季新款紅星男鞋防滑耐磨休閒時尚經典塗鴉滑板鞋低幫旅遊鞋</span> </div> <div class="wrap"> <span id="content" class="content">鴻星爾克ERKE 男防滑耐磨休閒跑步鞋運動鞋</span> </div> </body> </html>
實現效果如下:
上面的程式碼首先在外層包含框wrap中設定 text-algin:center;使得子元素能相對於父元素居中,然後子元素設定 display:inlne-block; 使得行內元素轉化為行內塊元素,此時可以給行內塊設定 text-algin:left;使得文字在容器中放不下的時候出現換行居左。
(2)通過table表格實現
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> <style> .wrap { margin-top: 10px; width: 200px; height: 100px; padding: 5px; background-color: skyblue; } .content { display: table; margin: 0 auto; word-break: break-all; } </style> </head> <body> <div class="wrap"> <span id="content" class="content">鴻星爾克</span> </div> <div class="wrap"> <span id="content" class="content">鴻星爾克板鞋2021夏季新款紅星男鞋防滑耐磨休閒時尚經典塗鴉滑板鞋低幫旅遊鞋</span> </div> <div class="wrap"> <span id="content" class="content">鴻星爾克ERKE 男防滑耐磨休閒跑步鞋運動鞋</span> </div> </body> </html>
實現效果如上,這段程式碼是通過了給子元素設定了display:table;
(3)利用圖層覆蓋解決
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> <style> div,span{ padding: 0; } .wrap { margin-top: 10px; width: 200px; height: 100px; padding: 0 5px; background-color: skyblue; position: relative; } .content { } .hide{ position: absolute; text-align: center; background: skyblue; overflow: hidden; height: 20px; left: 0; top: 0; width: 100%; } </style> </head> <body> <div class="wrap"> <span class="content">鴻星爾克</span> <span class="hide">鴻星爾克</span> </div> <div class="wrap"> <span class="content">鴻星爾克板鞋2021夏季新款紅星男鞋防滑耐磨休閒時尚經典塗鴉滑板鞋低幫旅遊鞋</span> <span class="hide">鴻星爾克板鞋2021夏季新款紅星男鞋防滑耐磨休閒時尚經典塗鴉滑板鞋低幫旅遊鞋</span> </div> <div class="wrap"> <span class="content">鴻星爾克ERKE 男防滑耐磨休閒跑步鞋運動鞋</span> <span class="hide">鴻星爾克ERKE 男防滑耐磨休閒跑步鞋運動鞋</span> </div> </body> </html>
效果如下:
上面這段程式碼應該比較容易理解,但實現起來複雜,主要是重複寫兩次一樣的文字,都屬於行內元素,給hide的元素設定高度,當高度不夠的時候設定隱藏溢位部分,並設定絕對定位,用於顯示第一行資料,實現第一行居中效果,然後剩下行的顯示content的中的效果,最終合成想要的效果圖。這樣實現起來複雜但是思路最清晰。
寫在最後
以上就是本文的全部內容,希望給讀者帶來些許的幫助和進步,方便的話點個關注,小白的成長踩坑之路會持續更新一些工作中常見的問題和技術點。