整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          Web前端:CSS 輕松搞定標簽(元素)居中問題

          者:薔薇Nina

          原文:https://www.cnblogs.com/wcwnina/p/11297630.html

          在CSS里,標簽位置居中一直是困擾Web前端的難題。在本文中,我對這類問題進行了探究和給出了幾點建議,供讀者參考。

          1 行內標簽

          1.1 水平居中

          在父級標簽中使用 text-align: center。

          效果:

          1.2 垂直居中

          如果是單行,則為該標簽設置行高line-height)且與其父級標簽 height 相等即可。

          效果:

          如果是多行,稍微有點麻煩,需要在該標簽設置 display: table-cell vertical-align: middle,在其父級標簽設置 display: table。

          效果:

          2 塊標簽

          2.1 水平居中

          方法一:在父級標簽中使用 flex 彈性盒子。

          效果:

          方法二:在該標簽中使用 margin 屬性。

          效果:

          2.2 垂直居中

          在父級標簽中使用 flex 彈性盒子。

          效果:

          總結:對于行內標簽居中,優先考慮文本對齊(text-align)和顯示單元格(table-cell);對于塊標簽居中,優先考慮顯示彈性盒子(flex)。

          lexbox

          通常首選方法是使用flexbox居中內容。只需三行代碼即可:display:flex,然后使用 align-items:center justify-content:center 將子元素垂直和水平居中。

          如下代碼:

          html:

          <div class="flexbox-centering">
            <div>Centered content.</div>
          </div>

          css:

          .flexbox-centering {
            display: flex;
            justify-content: center;
            align-items: center;
            height: 100px;
          }

          Grid

          使用grid(網格)與flexbox非常相似,也是一種常見的技術,尤其是布局中已經使用網格的情況下。與前一種flexbox技術的唯一區別是它顯示為柵格。

          如下代碼:

          html:

          <div class="grid-centering">
            <div class="child">Centered content.</div>
          </div>

          css:

          上效果圖:

          這是一個用ext3.2.0、js、html、css寫的一個還算好看的登錄界面。

          源代碼已上傳,下載地址請點擊:點擊打開鏈接

          其主要難點在如何使用extjs來畫一個界面,接下來我們就主要看一下其中的html和js吧:


          1. <!DOCTYPE html>
          2. <html lang="en">
          3. <head>
          4. <meta charset="UTF-8">
          5. <title>登錄界面</title>
          6. <link rel="stylesheet" type="text/css" href="ext3.2.0/resources/css/ext-all.css"/>
          7. <script type="text/javascript" src="ext3.2.0/adapter/ext/ext-base.js"></script>
          8. <script type="text/javascript" src="ext3.2.0/ext-all.js"></script>
          9. <script type="text/javascript" src="login.js"></script>
          10. <script type="text/javascript" src="loginToDo.js"></script>
          11. <link rel="stylesheet" type="text/css" href="login.css"/>
          12. </head>
          13. <body onkeydown="keyLogin(event);">
          14. </body>
          15. </html>

          這里面主要是導入頁面所需的js和css文件,當然還有一個亮點就是body標簽上的 onkeydown事件屬性,主要用于監聽鍵盤實現我們js中的enter鍵提交功能。然后看一下extjs的語言風格吧:


          1. Ext.onReady(function () {
          2. // 創建“登錄”面板
          3. var loginPanel = new Ext.Panel({
          4. // 設置面板的位置、寬高、樣式
          5. // 注意:此處我用的是相對布局relative(用于比較兩者的區別)
          6. id: 'loginPan',
          7. x: 363,
          8. y: 0,
          9. width: 396,
          10. height: 480,
          11. baseCls: '',
          12. defaults: {
          13. border: false
          14. },
          15. // 添加面板里面的物品
          16. items: [
          17. {
          18. // 第一件:logo圖
          19. id: 'loginLogo',
          20. height: 160,
          21. frame: false,
          22. bodyStyle: 'padding-top:10px',
          23. html: '<img src="images/fly_icon.png">'
          24. },
          25. {
          26. // 第二件:登錄的表單
          27. id: 'loginForm',
          28. defaultType: 'textfield',
          29. frame: false,
          30. defaults: {
          31. allowBlank: false
          32. },
          33. // 添加表單里面的物品:兩個輸入框
          34. items: [
          35. {
          36. id: "username",
          37. cls: "text_field",
          38. inoutType: 'text',
          39. width: 330,
          40. height: 28,
          41. blankText: '賬號不能為空',
          42. emptyText: '請輸入賬號',
          43. },
          44. {
          45. id: "password",
          46. cls: "text_field",
          47. inputType: 'password',
          48. width: 330,
          49. height: 28,
          50. emptyText: '請輸入密碼',
          51. blankText: '密碼不能為空',
          52. }]
          53. },
          54. {
          55. // 第三件:忘記密碼
          56. id: 'loginForget',
          57. html: "<a href='forget_pwd.html' target='_blank'>忘記密碼?</a>",
          58. },
          59. {
          60. // 第四件:登錄按鈕
          61. id: 'loginBtn',
          62. html: '<button id="btn_login">馬上登錄</button>',
          63. }
          64. ],
          65. });
          66. // 創建“注冊”面板
          67. var registerPanel = new Ext.Panel({
          68. // 設置面板的位置、寬高、樣式
          69. // 注意:此處我用的是絕對布局absolute(用于比較兩者的區別)
          70. id: 'registerPan',
          71. x: 0,
          72. y: 46,
          73. width: 800,
          74. height: 389,
          75. baseCls: '',
          76. layout: 'absolute',
          77. defaults: {
          78. border: false
          79. },
          80. // 添加面板里面的物品
          81. items: [
          82. {
          83. // 第一件:標題
          84. id: 'registerTitleLabel',
          85. xtype: 'label',
          86. x: 47,
          87. y: 50,
          88. text: '還沒有賬號?',
          89. }, {
          90. // 第二件:正文
          91. id: 'registerContentLabel',
          92. xtype: 'label',
          93. x: 47,
          94. y: 135,
          95. text: '這是在注冊面板下面的正文內容。里面的內容可以隨便寫,比如當前我們再一個窗口下面建立了兩個面板。而兩個面板的布局是分別用相對布局和絕對布局來實現的。相比較而言,我覺得用絕對布局會簡單粗暴,更直接,更方便。總之,你們自己體會一下吧。',
          96. }, {
          97. // 第三件:注冊按鈕
          98. id: 'registerBtn',
          99. xtype: 'button',
          100. x: 47,
          101. y: 280,
          102. html: '<button id="btn_register" >馬上注冊</button>'
          103. }],
          104. });
          105. // 創建窗口,從而讓內容達到居中效果
          106. var centerWindow = new Ext.Window({
          107. baseCls: '',
          108. width: 800,
          109. height: 480,
          110. layout: 'absolute',
          111. closable: false,
          112. draggable: false,
          113. resizable: false,
          114. shadow: false,
          115. border: false,
          116. items: [registerPanel, loginPanel],
          117. });
          118. // 顯示窗口
          119. centerWindow.show();
          120. // 添加瀏覽器縮放自動居中效果
          121. Ext.EventManager.onWindowResize(function () {
          122. centerWindow.center();
          123. });
          124. });

          這里要說的是:1、注意給屬性加標記,能用id就用id,cls只是一個封裝過的class,和原生的class還是有區別的,比如給一個cls元素的height、padding定義樣式并不起作用。詳見:關于extjs中的cls ≠ class

          2、在ext中建議用絕對定位,由于它底層是一個個的table、div塊,如果用相對定位的話偶爾是有偏差的,所以還是絕對定位方便直接啊。

          3、window自帶居中效果,可以利用這一點讓元素在屏幕中居中。但是當瀏覽器縮放的時候,這個window并不會動,每次都需要重新刷新一下才會改變一下。所以,在以上代碼的最后我們用給這個centerWindow添加了一個窗口自適應居中的效果。


          主站蜘蛛池模板: 亚洲精品国产suv一区88| 韩国理伦片一区二区三区在线播放| 色窝窝免费一区二区三区| 亚洲一区中文字幕在线电影网| 一区二区三区四区国产| 91视频国产一区| 中文字幕一区二区精品区| 亚洲字幕AV一区二区三区四区| 美女免费视频一区二区三区| 无码人妻一区二区三区兔费| 99久久精品国产一区二区成人| 精品一区二区久久久久久久网站| 极品少妇伦理一区二区| 四虎永久在线精品免费一区二区| 国产成人精品第一区二区| 中文字幕AV一区二区三区 | 一区二区三区在线观看视频| 欧洲精品无码一区二区三区在线播放 | 亚洲av乱码中文一区二区三区| 国产精品揄拍一区二区久久| 亚洲一区二区三区国产精品无码| 久久亚洲综合色一区二区三区| 91国在线啪精品一区| 在线播放国产一区二区三区 | 韩日午夜在线资源一区二区| 精品一区二区久久| 色婷婷av一区二区三区仙踪林| 国产在线精品一区二区| 国产精华液一区二区区别大吗| 91video国产一区| 国产在线一区二区三区在线| 精品视频午夜一区二区| 国产成人无码一区二区在线观看 | 亚洲国产成人久久一区WWW| 精品伦精品一区二区三区视频 | 久久se精品一区二区影院| 在线精品亚洲一区二区小说| 国产乱码一区二区三区四| 亚洲欧洲一区二区三区| 亚洲va乱码一区二区三区| 一区二区三区免费在线观看|