概要
「CSSによる垂直センタリング」チュートリアルをたくさん読んだことがあります:
- http://emergentweb.com/test/valign.html
- http://blog.themeforest.net/tutorials/vertical-centering-with-css/
- http://www.jakpsatweb.cz/css/css-vertical-center-solution.html
- http://www.alistapart.com/d/footers/footer_variation1.html
- http://phrogz.net/css/vertical-align/index.html
...しかし、私のレイアウトには、垂直方向のセンタリングに加えて、これらの方法のいずれにも表示されない別のコンポーネントがあります。
.
このレイアウトには 2 つのコンポーネントがあります。まず、ヘッダーとフッターの間のコンテンツを垂直および水平方向に中央揃えします (これはスティッキー フッターです)。実演するフィドルのコードがありますが、これを IE で動作させることができませんでした (コードは投稿の下部にあります)。
2 番目のコンポーネントは、緑色の矢印が指している場所です。これは、一部のテキストをクリックすると垂直方向に下向きに展開される隠し要素を表します。ただし、すべてが中央に配置されているかのように、この展開によってコンテンツが上に移動することは望んでいません...コンテンツの位置に影響を与えずに、この要素を下に展開し、展開時にスティッキーフッターを押し下げる必要はありません。ほとんどの場合、ブラウザのスクロールバーが表示されます。
したがって、非表示の要素が拡大する効果は、バナーが端から落ちるようなものでなければなりません。
非表示の要素が展開された後のレイアウトは次のようになります。
質問
では、CSSのみを使用してこのレイアウトを実現し、クロスブラウザーと互換性を持たせるにはどうすればよいでしょうか。混乱を解消するためにさらに説明する必要がある場合はお知らせください。
これまでのコード
注... HTML5 BoilerPlateに付属する定型コードの一部を省略しました。
CSS
/* --------------------------------------------------------------------------
General Layout
-------------------------------------------------------------------------- */
html,body {
height: 100%;
}
body {
background-color: #e3e3e3;
color: #696969;
}
#wrapper {
min-height: 100%;
width: 100%;
min-width: 936px;
}
/* --------------------------------------------------------------------------
Header
-------------------------------------------------------------------------- */
header {
background-color: #232323;
height: 108px;
width: 100%;
margin: auto;
padding: 24px 0px 8px 0px;
position: relative;
}
#header-content {
height: 100%;
width: 800px;
margin: auto;
position: relative;
}
/* --------------------------------------------------------------------------
Footer
-------------------------------------------------------------------------- */
footer {
background-color: #dbdbdb;
border-top: 1px solid #bababa;
height: 30px;
width: 100%;
min-width: 936px;
margin-top: -32px;
position: relative;
}
#footer-content {
border-top: 1px solid #f8f8f8;
height: 100%;
margin: 0px auto;
position: relative;
}
#footer-content > div {
width: 800px;
margin: 0px auto;
}
/* --------------------------------------------------------------------------
DOWNLOADZONE
-------------------------------------------------------------------------- */
#dl-info {
width: 400px;
margin: auto;
display: table-cell !important;
vertical-align: middle;
}
#show-hide {
margin: 8px 0px;
text-align: center;
}
/* --------------------------------------------------------------------------
General helper classes
-------------------------------------------------------------------------- */
.zone {
background: none;
border: 0px none;
height: 100%;
min-height: 100px;
width: 100%;
padding-top: 140px;
padding-bottom: 31px;
display: table;
position: absolute;
top: 0px;
bottom: 0px;
overflow: hidden;
}
.border {
border: 1px solid #454545;
}
.clear {
clear: both;
}
/* Hide from both screenreaders and browsers: h5bp.com/u */
.hidden {
display: none !important;
visibility: hidden;
}
/* Hide only visually, but have it available for screenreaders: h5bp.com/v */
.visuallyhidden {
border: 0;
clip: rect(0 0 0 0);
height: 1px;
margin: -1px;
overflow: hidden;
padding: 0;
position: absolute;
width: 1px;
}
/* Extends the .visuallyhidden class to allow the element to be focusable when navigated to via the keyboard: h5bp.com/p */
.visuallyhidden.focusable:active,
.visuallyhidden.focusable:focus {
clip: auto;
height: auto;
margin: 0;
overflow: visible;
position: static;
width: auto;
}
/* Hide visually and from screenreaders, but maintain layout */
.invisible { visibility: hidden; }
/* Contain floats: h5bp.com/q */
.clearfix:before,
.clearfix:after {
content: "";
display: table;
}
.clearfix:after { clear: both; }
.clearfix { *zoom: 1; }
HTML
<!doctype html>
<!-- paulirish.com/2008/conditional-stylesheets-vs-css-hacks-answer-neither/ -->
<!-- misteroneill.com/improved-internet-explorer-targeting-through-body-classes/ -->
<!--[if lt IE 7]> <html class="no-js ie ie6 lt-ie9 lt-ie8 lt-ie7" lang="en"> <![endif]-->
<!--[if IE 7]> <html class="no-js ie ie7 lt-ie9 lt-ie8 lt-ie7" lang="en"> <![endif]-->
<!--[if IE 8]> <html class="no-js ie ie8 lt-ie9 lt-ie8" lang="en"> <![endif]-->
<!--[if IE 9]> <html class="no-js ie ie9 lt-ie9" lang="en"> <![endif]-->
<!--[if (gte IE 9)|!(IE)]>
<!-->
<html class="no-js" lang="en">
<!--<![endif]-->
<head>
<title>Layout</title>
</head>
<body class="select-none">
<div id="wrapper">
<header>
<div id="header-content">
</div><!-- end #header-content -->
</header><!-- end header -->
<div id="downloadzone" class="zone clearfix">
<div id="dl-info">
<div class="border">
<div id="dl-button">Icon Here</div>
<div id="dl-extras">
<div id="dl-filename">text text text</div>
<div id="show-hide">CLICK TO SHOW/HIDE HIDDEN ELEMENT</div>
</div>
</div>
</div>
</div><!-- end #downloadzone -->
</div><!-- end #wrapper -->
<footer>
<div id="footer-content">
<div class="border-highlight">
</div><!-- end .border-highlight -->
</div><!-- end #footer-content -->
</footer><!-- end footer -->
</body>
</html>