ラベル Flexbox の投稿を表示しています。 すべての投稿を表示
ラベル Flexbox の投稿を表示しています。 すべての投稿を表示

2018年3月19日月曜日

CSSのFlexboxを使って簡単にフッタを最下部に固定する方法

今回はCSSのFlexboxを使ってフッタをブラウザの下部に固定配置してみましょう。

対応ブラウザはIE10以降とモダンブラウザです。

前回の上下左右中央に表示するCSSも使ってコンテンツを上下左右中央に配置もしてみます。



【1】HTMLとCSSファイルを用意します

※用意したCSSファイルへのパスはご自分の環境に合わせて変更してください。

(HTMLソース)

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<link rel="stylesheet" href="../css/flex_footer.css">
<title>CSSのFlexboxを使って簡単にフッタを最下部に固定する方法</title>
</head>

<body>

<body>

<header>ヘッダエリア</header>

<section>
<h1>コンテンツエリア</h1>
<p>テキストテキストテキストテキストテキストテキストテキストテキストテキスト</p>
</section>

<footer>フッタエリア</footer>

</body>
   
</body>
</html>


【2】CSSもしくはSASSを記述していきます。

(1) CSSの簡単なリセットと見た目を整えるスタイルを指定します。

※下記CSSはgulpでSassからCSSへ変換し
自動でベンダープレフィックスを追加したソースです。

詳しくはこちらを参照ください。


@charset "UTF-8";
/*------------------------------------
    簡単なリセットとページのスタイル
-------------------------------------*/
* {
  margin: 0;
  padding: 0;
}

header {
  background: #560066;
  color: #fff;
  text-align: center;
  padding: 20px 0;
  font-size: 20px;
}

section {
  text-align: center;
  background: #cdcdcd;
  padding: 20px 0;
}

section h1 {
  margin-bottom: 10px;
}

footer {
  background: #000;
  text-align: center;
  color: #fff;
  padding: 20px 0;
  font-size: 20px;
}


(1) 最下部にフッタを固定するスタイルを指定します。

/*------------------------------------
    最下部にフッタを固定するスタイル
-------------------------------------*/
html {
  height: 100%;
}

body {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
      -ms-flex-direction: column;
          flex-direction: column;
  height: 100%;
}

header {
  -webkit-box-flex: 0;
      -ms-flex: 0 0 auto;
          flex: 0 0 auto;
}

section {
  -webkit-box-flex: 1;
      -ms-flex: 1 0 auto;
          flex: 1 0 auto;
}

footer {
  -webkit-box-flex: 0;
      -ms-flex: 0 0 auto;
          flex: 0 0 auto;
}


これでフッタがブラウザの下部に配置されたと思います。

(1) では、コンテンツを上下中央に配置するスタイルを追加してみましょう。

下記CSSに追加します。

section {
  -webkit-box-flex: 1;
      -ms-flex: 1 0 auto;
          flex: 1 0 auto;
}

↑に下記を追加

  /* ↓ 上下中央に配置するスタイル ↓ */
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
  -webkit-box-pack: center;
      -ms-flex-pack: center;
          justify-content: center;

  /* ↑ 上下中央に配置するスタイル ↑ */

上記スタイルを追加した時に子要素が横に並ぶ場合は下記CSSを追加してください。

  -webkit-box-orient: vertical; /* ← 子要素を縦に配置するスタイル */
  -webkit-box-direction: normal; /* ← 子要素を縦に配置するスタイル */
      -ms-flex-direction: column; /* ← 子要素を縦に配置するスタイル */
          flex-direction: column; /* ← 子要素を縦に配置するスタイル */

これで、フッタをブラウザ下部に配置し、コンテンツを上下中央に表示できたかと思います。


(Sassで記述した場合)

/*------------------------------------
    簡単なリセットとページのスタイル
-------------------------------------*/

* {
    margin:0;
    padding:0;
}

header {
    background:#560066;
    color:#fff;
    text-align:center;
    padding:20px 0;
    font-size:20px;
}

section {
    text-align:center;
    background:#cdcdcd;
    padding:20px 0;
    h1 {
        margin-bottom:10px;
    }
}

footer {
    background:#000;
    text-align:center;
    color:#fff;
    padding:20px 0;
    font-size:20px;
}


/*------------------------------------
    最下部にフッタを固定するスタイル
-------------------------------------*/

html {
    height:100%;
}

body {
    display:flex;
    flex-direction:column;
    height:100%;
}

header {
    flex:0 0 auto;
}

section {
    flex:1 0 auto;
   
    /* ↓ 上下中央に配置するスタイル ↓ */
    display:flex;
    align-items:center;
    justify-content:center;
    flex-direction:column; /* ← 子要素を縦に配置するスタイル */
    /* ↑ 上下中央に配置するスタイル ↑ */

}

footer {
    flex:0 0 auto;
}


どうでしたでしょうか?
ブラウザとフッタの間に隙間もできないので、
細かい調整なしで簡単にフッタをブラウザ下部に配置することができますね。


下記サイトを参考にさせていただきました。


Quick Tip: The Best Way To Make Sticky Footers


ブログランキング・にほんブログ村へ ブログランキング

ブログ王ランキングに参加中!

2016年7月11日月曜日

CSSで簡単に上下左右中央に文章や画像を表示する方法

今回はCSSを使って上下左右中央(ブラウザの真ん中)に文章や画像を配置してみましょう。

対応ブラウザはIE10以降とモダンブラウザです。


【1】HTMLとCSSファイルを用意します

※用意したCSSファイルへのパスはご自分の環境に合わせて変更してください。

(HTMLソース)

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<link rel="stylesheet" href="../css/center_elements.css">
<title>CSSで簡単に上下左右中央に文章や画像を表示する方法</title>
</head>

<body>

<article>
<p>テキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキスト</p>
</article>

   
</body>
</html>



【2】CSSもしくはSASSを記述していきます。

(1) CSSの簡単なリセットと中央表示のスタイルを指定します。

※下記CSSはgulpでSassからCSSへ変換し
自動でベンダープレフィックスを追加したソースです。

詳しくはこちらを参照ください。


@charset "UTF-8";
/*------------------------------------
    簡単なリセット
-------------------------------------*/
* {
  margin: 0;
  padding: 0;
}

/*------------------------------------
    上下左右中央に表示するスタイル
-------------------------------------*/
body,
html {
  height: 100%;
}

article {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
  -webkit-box-pack: center;
      -ms-flex-pack: center;
          justify-content: center;
  height: 100%;
}

article p {
  max-width: 50%;
  padding: 10px;
  background: #ccc;
}


(Sassで記述した場合)

/*------------------------------------
    簡単なリセット
-------------------------------------*/

* {
    margin:0;
    padding:0;
}


/*------------------------------------
    上下左右中央に表示するスタイル
-------------------------------------*/

body,
html {
    height:100%;
}

article {
    display:flex;
    align-items:center;
    justify-content:center;
    height:100%;
    p {
        max-width:50%;
        padding:10px;
        background:#ccc;
    }
}


自動でベンダープレフィックスを追加してくれるので
上記記述だけで楽ですね。


どうでしたでしょうか?
テキストの箇所を画像に変えたり、横幅を変えたりして色々応用できそうですね。


下記サイトを参考にさせていただきました。


Quick Tip: The Simplest Way To Center Elements Vertically And Horizontally


ブログランキング・にほんブログ村へ ブログランキング

ブログ王ランキングに参加中!

2016年6月27日月曜日

CSSのFlexboxを使ってメインコンテンツとサイドバーの高さの合わせ方

今回はCSSのFlexboxを使ってメインコンテンツとサイドバーの高さを合わせてみましょう。

ブラウザサイズが800px以下の場合はサイドバーがコンテンツの下に落ちるように調整もしてみましょう。

まずはコンテンツとサイドバーの高さを合わせて横並びにしてみましょう。



【1】HTMLとCSSファイルを用意します

※用意したCSSファイルへのパスはご自分の環境に合わせて変更してください。

(HTMLソース)

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<link rel="stylesheet" href="../css/flexbox_sidebar.css">
<title>CSSだけを使ってサイドバーとコンテンツの高さを合わせる</title>
</head>

<body>


<section id="page">
       
<div id="main">

<h1>CSSだけを使ってサイドバーとコンテンツの高さを合わせる。</h1>

<p>サイドバーとコンテンツは、たとえどちらの内容が多くても、いつも等しい高さを保っています。</p>

<p>コンテンツコンテンツコンテンツコンテンツコンテンツコンテンツコンテンツコンテンツコンテンツコンテンツコンテンツコンテンツコンテンツコンテンツコンテンツコンテンツコンテンツコンテンツ</p>

<p>コンテンツコンテンツコンテンツコンテンツコンテンツコンテンツコンテンツコンテンツコンテンツコンテンツコンテンツ</p>

<div class="wireframe-box">イメージ入れたり入れなかったり</div>

</div>

<aside>
<div class="wireframe-box double">バナーとか</div>
<div class="wireframe-box double">バナーとか</div>
<div class="wireframe-box double">バナーとか</div>
<div class="wireframe-box">バナーとか</div>
<div class="wireframe-box">バナーとか</div>
<div class="wireframe-box">バナーとか</div>
</aside>

</section>
   
</body>
</html>



【2】CSSもしくはSASSを記述していきます。

(1) まずはCSSのリセットとページ全体のスタイルを指定します。

※下記CSSはgulpでSassからCSSへ変換したソースです。
詳しくはちらを参照ください。gulpのインストール方法や使い方を紹介しています。


@charset "UTF-8";
/*------------------------------------
    簡単なリセットとページのスタイル
-------------------------------------*/
* {
  margin: 0;
  padding: 0;
}

html {
  background-color: #f3f3f3;
}

body {
  font: normal 14px "ヒラギノ角ゴ Pro W3", "Hiragino Kaku Gothic Pro", "メイリオ", Meiryo, Osaka, "MS Pゴシック", "MS PGothic", sans-serif;
}


(2) 続いてコンテンツエリアとサイドバーエリアを水平にレイアウトします。

/*------------------------------------
    コンテンツとサイドバーを2カラムにするスタイル
-------------------------------------*/
#page {
  /* 子要素を水平にレイアウトするための指定 */
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  /* コンテンツとサイドバーを合わせたマックスの幅を1200pxにして中央に配置*/
  max-width: 1200px;
  margin: 0 auto;
}

#main {
  /* メインコンテンツの幅を自動で指定 */
  -webkit-box-flex: 1;
      -ms-flex-positive: 1;
          flex-grow: 1;
}

aside {
  /* サイドバーの幅を280px以下にならないように指定 */
  -ms-flex-negative: 0;
      flex-shrink: 0;
  width: 280px;
}


(3) コンテンツエリアとサイドバーエリアのレイアウトを調整します。

/*------------------------------------
    コンテンツとサイドバーのスタイル
-------------------------------------*/
#main {
  background: #fff;
  padding: 40px 100px 40px 40px;
  line-height: 1.5;
  color: #565a5c;
}

#main h1 {
  margin-bottom: 28px;
  font-size: 24px;
}

#main p {
  margin-bottom: 24px;
}

#main .wireframe-box {
  background: #e2e2e2;
  padding: 200px 0;
  text-align: center;
  margin-bottom: 24px;
}

aside {
  background: #292c2f;
  color: #fff;
  padding: 20px;
  text-align: center;
}

aside .wireframe-box {
  background: #37393c;
  margin-top: 20px;
  padding: 50px;
}

aside .double {
  padding: 100px;
}


これで上記画像のようにレイアウトできたかと思います。

続いてブラウザの幅を縮めた時、サイドバーをコンテンツの下に落として表示させます。



 続けて下記CSSソースを記述してください。

 @media all and (max-width: 800px) {
  /* ブラウザ幅が800px以下の場合はサイドバーをコンテンツの下に落とす */
  #page {
    /* 子要素を上から下へ垂直に表示する指定 */
    -ms-flex-flow: column;
        flex-flow: column;
  }
  aside {
    /* サイドバーをブラウザ幅に合わせる指定 */
    width: auto;
  }
  #main {
    padding-right: 40px;
  }
}


これでブラウザの幅を800px以下に縮めた時は上記画像のようにサイドバーがコンテンツの下に落ちて、ブラウザの幅に合わせて伸縮するようになりました。


サンプルのhtmlとcssをGitHubにUPしておきましたので、
もし必要であれば確認してみてください。



下記にSassで記述した場合のコードも記載しておきますね。

 /*------------------------------------
    簡単なリセットとページのスタイル
-------------------------------------*/

* {
    margin:0;
    padding:0;
}

html{
    background-color:#f3f3f3;
}

body{
    font:normal 14px "ヒラギノ角ゴ Pro W3", "Hiragino Kaku Gothic Pro", "メイリオ", Meiryo, Osaka, "MS Pゴシック", "MS PGothic", sans-serif;
}



/*------------------------------------
    コンテンツとサイドバーを2カラムにするスタイル
-------------------------------------*/

#page {
    /* 子要素を水平にレイアウトするための指定 */
    display:-webkit-flex;
    display:flex;
  
    /* コンテンツとサイドバーを合わせたマックスの幅を1200pxにして中央に配置*/
    max-width:1200px;
    margin:0 auto;
}

#main {
    /* メインコンテンツの幅を自動で指定 */
    -webkit-flex-grow:1;
    flex-grow:1;
}

aside {
    /* サイドバーの幅を280px以下にならないように指定 */
    -webkit-flex-shrink:0;
    flex-shrink:0;
    width:280px;
}


/*------------------------------------
    コンテンツとサイドバーのスタイル
-------------------------------------*/

#main {
    background:#fff;
    padding:40px 100px 40px 40px;
    line-height:1.5;
    color:#565a5c;
    h1 {
        margin-bottom:28px;
        font-size:24px;
    }
    p {
        margin-bottom:24px;
    }
    .wireframe-box {
        background:#e2e2e2;
        padding:200px 0;
        text-align:center;
        margin-bottom:24px;
    }
}

aside {
    background:#292c2f;
    color:#fff;
    padding:20px;
    text-align:center;
    .wireframe-box {
        background:#37393c;
        margin-top:20px;
        padding:50px;
    }
    .double {
        padding:100px;
    }
}


@media all and (max-width:800px) {
  
    /* ブラウザ幅が800px以下の場合はサイドバーをコンテンツの下に落とす */
  
    #page {
        /* 子要素を上から下へ垂直に表示する指定 */
        -webkit-flex-flow:column;
        flex-flow:column;
    }
  
    aside {
        /* サイドバーをブラウザ幅に合わせる指定 */
        width:auto;
    }
  
    #main {
        padding-right:40px;
    }
}


下記サイトを参考にさせていただきました。


Here Is The Easiest Way To Create Equal Height Sidebars



ブログランキング・にほんブログ村へ ブログランキング

ブログ王ランキングに参加中!