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

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



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

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

2016年6月10日金曜日

CSSの忘備録を作ろう

こんにちは、ミスターXです。

前回はSassの忘備録を作りましたので、今回はCSSの忘備録を作りましょう。


【1】スマホで画像保存を禁止するコード

jqueryを使って画像の上に透過GIFなどを乗せたりと色々な対応策はあるとは思うのですが、
一応いれておきましたよレベルでいい場合は下記を使います。

/* 画像保存禁止処理 */
section {
    -webkit-user-select:none;
    -khtml-user-select:none;
    -moz-user-select:none;
    -ms-user-select:none;
    -o-user-select:none;
    user-select:none;
    -webkit-user-drag:none;
    -khtml-user-drag:none;
    -webkit-touch-callout:none;
}


【2】スマホでリンクを無効にするコード

これはタブボタンなどのナビでよく使います。

例えばナビボタン全てにリンクを付けて、該当ページのボタンだけリンク無効にすれば
わざわざリンクを消したり、リンクをつけたりしなくていいのでリンクミスも減らせたりします。

※注意点として段階リリースなどでリリース前にページがサーバにUPされていて
リンク先のURLはわかっているけど、
まだ公開はしないでねという時には使わないようにしましょう。
ソース見たらリンク先わかっちゃいますからねw

/* リンク無効 */
a {
    pointer-events:none;
    cursor:default;
    -webkit-tap-highlight-color:rgba(0,0,0,0)
}


【3】文字は透過せず、背景のみを透過する

これはボックス内のテキストには透過を適用せず背景のみを透過する場合に使います。

あまり使用頻度は高くないですが念のためにw

/* 文字は透過せず、背景のみを透過する */
section {
    background-color:rgba(赤,緑,青,数値);
}


【4】透過する

これはロールオーバー画像がない場合によく使いますね。

/* 透過する */
a:hover img {
    filter:alpha(opacity=50);
    -moz-opacity:0.5;
    opacity:0.5;
}


【5】文字が横幅より長い場合・・・として表示する

最近ではあまり使われなくなってますが、
横幅を超えた長い文字は・・・で表示させたい場合に使います。

/* 省略符号「…」をつける */
p {
    width:横幅;
    overflow:hidden;
    white-space:nowrap;
    text-overflow:ellipsis;
    -webkit-text-overflow:ellipsis;
    -o-text-overflow:ellipsis;
}


【6】背景画像を複数重ねる

これは背景に複数の画像を使用したい場合に使います。

デザイン上どうしても背景を切り分けて複数してなくてはいけない場合に使うのですが
これもあまり使用頻度は高くないように思います。

※スマホで使用する場合は必ず背景の画像サイズは指定してあげましょう。

/* 背景を複数重ねる */
section {
    background-image:
    url(/img/top/pw_bottom.png),
    url(/img/top/pw_back.png);
    background-repeat:
    no-repeat,
    repeat-y;
    background-position:
    bottom left,
    top left;
    -webkit-background-size:100% auto;
    -moz-background-size:100% auto;
    -o-background-size:100% auto;
    -ms-background-size:100% auto;
    background-size:100% auto;
}


【7】パディングとボーダーを幅と高さに含める

これは指定した幅や高さの中にパディングとボーダーを含めて表示してくれます。

いちいち指定幅からパディングやボーダーの幅を引かなくてもいいので結構便利です。

Xはスマホでボックスにボーダーを使う場合には必ずいれています。

これを指定しておけば予期せぬブラウザの横ズレや段落ちなどをあらかじめ回避できたりします。

※この指定を後入れすると逆にレイアウトが崩れたりしますので注意です。

/* パディングとボーダーを幅と高さに含める */
section {
    -webkit-box-sizing:border-box;
    -moz-box-sizing:border-box;
    -ms-box-sizing:border-box;
    -o-box-sizing:border-box;
    box-sizing:border-box;
    border:solid 1px #ccc;
}


【8】ボックスの横並び

ボックスの横並び方法は色々あると思うのですが
スマホのページャーなどでよく使ってました。

ページャーはクライアントやディレクターによってはトリッキーな要求があったりしますので
下記を基本にして要求に合うようにコードを追加したりします。

※ページャーに関しては開発側で動的に表示させたりするので
コーディング前にデザインを基にして開発側と認識のすり合わせを行いましょう。

/* ボックスの横並び */
ul {
    display:-webkit-box;
    display:-moz-box;
    display:-ms-box;
    display:-o-box;
    display:box;
    width:100%; /* firefoxで横幅を広げる指定 */
}

li {
    width:100%;
    -webkit-box-flex:1;
    -moz-box-flex:1;
    -o-box-flex:1;
    -ms-box-flex:1;
    box-flex:1;
}


【9】角丸とボックスシャドウ

下記は角丸にボックスシャドウを指定した場合です。

昔のAndroid端末で角丸を使うとシャギー(ギザギザ)が出たりするので
ボックスシャドウと併用してシャギーが目立たないように調整したりします。

/* 角丸 */
section {
    -webkit-border-radius:10px 10px 10px 10px;
    -moz-border-radius:10px 10px 10px 10px;
    -ms-border-radius:10px 10px 10px 10px;
    -o-border-radius:10px 10px 10px 10px;
    border-radius:10px 10px 10px 10px;
    -webkit-box-shadow:#6e5525 0px 0px 2px 0;
    -moz-box-shadow:#6e5525 0px 0px 2px 0; /* color, h-offset, v-offset, blur, spread */
    -ms-box-shadow:#6e5525 0px 0px 2px 0; /* color, h-offset, v-offset, blur, spread */
    -o-box-shadow:#6e5525 0px 0px 2px 0; /* color, h-offset, v-offset, blur, spread */
    box-shadow:#6e5525 0px 0px 2px 0; /* is optional */
}


どうでしたでしょうか?
上記のように自分が過去にコーディングしたコードを忘備録として残しておいて、
いつでも使えるようにまとめておけばコピペして足りないコードを足したりすれば
作業時間が短縮できたりしますのでSassの忘備録と合わせて用意しておけば
意外と便利に使えるのではないでしょうか。



次回は「Photoshopのスライスを使わない書き出し方」です。




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

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