ホームページ  >  記事  >  ウェブフロントエンド  >  CSS で DIV の垂直方向のセンタリングを設定する N つの方法(IE ブラウザと互換性あり)

CSS で DIV の垂直方向のセンタリングを設定する N つの方法(IE ブラウザと互換性あり)

WBOY
WBOYオリジナル
2016-07-06 13:28:191326ブラウズ

この問題について話すとき、CSS には垂直方向の中央揃えを設定するvertical-align 属性はないのかと疑問に思う人もいるかもしれません。一部のブラウザがサポートしていない場合でも、CSS Hack 技術を少し行うだけで済みます。ここで少し言っておきますが、CSS には確かにvertical-align 属性がありますが、これは (X)HTML 要素の valign 属性を持つ要素 (table 要素の b6c5a531a458a2e790c1fd6421739d1c など) にのみ有効です。 dc6dce4a544fdca2df29d5ac0ea9906b、63bd76834ec05ac1f4c0ebbeaafb0994 などの要素には valign 属性がないため、vertical-align は機能しません。

ヒント: 完璧な解決策は記事の最後にあります。

1. 単一行の垂直方向の中央揃え

コンテナ内にテキストが 1 行しかない場合、テキストを中央に配置するのは比較的簡単です。実際の高さを行の高さと同じに設定するだけです。

リーリー

このコードは非常に単純で、overflow:hidden 設定は、コンテンツがコンテナーを超えたり、自動行折り返しが発生したりしないようにするために後で使用され、垂直方向のセンタリング効果が得られません。

リーリー

2. 高さが不明な複数行のテキストの垂直方向の中央揃え

コンテンツの高さが可変の場合、前のセクションで説明した最後の方法を使用して、水平方向のセンタリングを実現できます。これは、上部と下部のパディング値が同じになるようにパディングを設定することです。繰り返しますが、これは垂直方向の中央揃えを「見せる」方法であり、テキストを dc6dce4a544fdca2df29d5ac0ea9906b 内に完全に埋める方法にすぎません。次のようなコードを使用できます:

リーリー

このメソッドの利点は、どのブラウザでも実行でき、コードが非常にシンプルであることですが、このメソッドを適用するための前提条件は、コンテナの高さがスケーラブルである必要があることです。

リーリー

3. 複数行テキストの固定高さ中央揃え

この記事の冒頭で、CSS のvertical-align 属性は valign 属性を持つ (X)HTML タグでのみ機能すると言いましたが、CSS には f5d188ed2c074f8b944552db028f98a1 をシミュレートできる display 属性もありますので、この属性を使用すると、vertical-align を使用して dc6dce4a544fdca2df29d5ac0ea9906b をシミュレートできます。 display:table と display:table-cell を使用する場合、前者は親要素に設定する必要があり、後者は子要素に設定する必要があるため、テキストに別の dc6dce4a544fdca2df29d5ac0ea9906b 要素を追加する必要があることに注意してください。配置する必要があります:

リーリー

リーリー

この方法が理想的なはずですが、残念ながらInternet Explorer 6はdisplay:tableとdisplay:table-cellを正しく理解できないため、この方法はInternet Explorer 6以下では無効です。まあ、それは憂鬱です!しかし、私たちには他の選択肢もあります。

4. Internet Explorer での解決策

Internet Explorer 6 以下では、高さの計算に不備があります。 Internet Explorer 6で親要素を配置した後、子要素に対してパーセント計算を行うと計算根拠が引き継がれるようです(位置決め値が絶対値であればそのような問題はありませんが、パーセント計算基準を使用するとこれは要素の高さではなく、親要素から継承された配置の高さになります)。

たとえば、次の (X)HTML コード スニペットがあります:

リーリー

サブラップを絶対に配置すると、コンテンツもこの属性を継承しますが、ページ上にすぐには表示されませんが、その後コンテンツを相対的に配置すると、使用した 100% の比率が元の高さではなくなります。内容の。たとえば、サブラップの位置を 40% に設定した場合、コンテンツの上端をラップと一致させたい場合は、top:-80% を設定する必要があります。 、コンテンツを元の位置に戻すには 100% を使用する必要がありますが、コンテンツも 50% に設定するとどうなるでしょうか。そうすれば、正確に垂直方向の中央に配置されます。したがって、この方法を使用して Internet Explorer 6 で垂直方向の中央揃えを実現できます。

リーリー

もちろん、このコードは Internet Exlporer 6 などのコンピューティングの問題があるブラウザでのみ機能します。 (でも、わかりません。たくさんの記事を調べました。ソースが同じだからなのか、何らかの理由でそうなったのかはわかりません。インターネット上では、このバグの原理を説明したくない人が多いようです) Exlorer 6. 表面的にしか理解していません。さらに勉強する必要があります)

リーリー

五、完美的解决方案

  那么我们综合上面两种方法就可以得到一个完美的解决方案,不过这要用到CSS hack的知识。

div#wrap {   
display:table;   
border:1px solid #FF0099;   
background-color:#FFCCFF;   
width:760px;   
height:400px;   
_position:relative;   
overflow:hidden;   
}   
div#subwrap {   
vertical-align:middle;   
display:table-cell;   
_position:absolute;   
_top:50%;   
}   
div#content {   
_position:relative;   
_top:-50%;   
}

    至此,一个完美的居中方案就产生了。 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
   <title> 多行文字实现垂直居中 </title>
   <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <style type="text/css">
    body { font-size:12px;font-family:tahoma;}
    div#wrap {
      display:table;
      border:1px solid #FF0099;
      background-color:#FFCCFF;
      width:760px;
      height:400px;
      _position:relative;
      overflow:hidden;
    }
    div#subwrap {
      vertical-align:middle;
      display:table-cell;
      _position:absolute;
      _top:50%;
    }
    div#content { 
      _position:relative;
      _top:-50%;
    }
  </style>
</head>
<body>
  <div id="wrap">
    <div id="subwrap">
      <div id="content"><br />        <pre class="brush:php;toolbar:false">现在我们要使这段文字垂直居中显示!
          div#wrap {
            border:1px solid #FF0099;
            background-color:#FFCCFF;
            width:760px;
            height:500px;
            position:relative;
          }
          div#subwrap {
            position:absolute;
            border:1px solid #000;
            top:50%;
          }
          div#content {
            border:1px solid #000;
            position:relative;
            top:-50%;
          }<br />        
      
    
  

  PS:垂直居中vertical-align的值是middle,而水平居中align的值是center,虽然同是居中但关键字不同。

六、实测可以完美实现各种浏览器兼容的居中方案 

    下面这段代码经过实测,可以完美兼容IE7以上的IE浏览器,其它标准浏览器如火狐、谷歌等也没有问题。

说明:尽管有CSS的vertical-align特性,但是并不能有效解决未知高度的垂直居中问题(在一个DIV标签里有未知高度的文本或图片的情况下)。标准浏览器如Mozilla, Opera, Safari等.,可将父级元素显示方式设定为TABLE(display: table;) ,内部子元素定为table-cell (display: table-cell),通过vertical-align特性使其垂直居中,但非标准浏览器是不支持的。非标准浏览器只能在子元素里设距顶部50%,里面再套个元素距顶部-50% 来抵消。

<!doctype html>
<html>
<head>
  <meta charset="utf-8">
  <title>水平垂直居中</title>
  <style type="text/css">
    body {padding: 0; margin: 0;}
    body,html{height: 100%;}
    #outer {height: 100%; overflow: hidden; position: relative;width: 100%;}
    #outer[id] {display: table; position: static;}
    #middle {position: absolute; top: 50%;} /* for explorer only*/
    #middle[id] {display: table-cell; vertical-align: middle; position: static;}
    #inner {position: relative; top: -50%;margin: 0 auto;} /* for explorer only */
    div.greenBorder {width:500px;height:584px;background:#333;}
    *+html #outer[id]{position: relative;}
    *+html #middle[id]{position: absolute; }
  </style>
</head>

<body>
  <div id="outer">
    <div id="middle">
      <div id="inner" class="greenBorder">
      </div>
    </div>
  </div>
</body>
</html>

  以上CSS代码的优点是没有hacks,采用了IE不支持的CSS2选择器#value[id]。

CSS2选择器#value[id]相当于选择器#value,但是Internet Explorer不支持这种类型的选择器。同样地.value[class],相当于.value,这些只有标准浏览器能读懂。

测试:Firefox1.5、Opera9.0、IE6.0、IE5.0通过。上面的代码不支持IE7,还需要在最下面加二句:

*+html #outer[id]{position: relative;}

*+html #middle[id]{position: absolute; }

  

 

  

 

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
前の記事:IE イベント モデル、IE および IE 以外のブラウザーにイベントを追加する方法次の記事:IE イベント モデル、IE および IE 以外のブラウザーにイベントを追加する方法

関連記事

続きを見る