Category Archives: CSS

[CSS, jQuery]クリックされたボタンの色を変更したり文字を書き換えたりする

Share on Facebook
Bookmark this on Delicious
LINEで送る
Pocket

ボタンをクリックした際にクリック済みを表すクラスを付ける場合は jQuery の addClass() や toggleClass() を使用すれば簡単です。
toggleClass() はクリックするごとにつけたり外したり出来ます。

<script>
$(function(){
    $('.btn').on('click', function(){
        $(this).toggleClass('active');
    });
});
</script>

これでクラス名「btn」を持つ要素をクリックした際、その要素に「active」というクラスが追加されます。
クリック済みの要素の色を変えるだけなら「.btn.active」に対して CSS を書くだけで終わりです。
しかし、クリックしたらボタンの文字を書き換えたい場合、更に一工夫必要です。

click-done

javascript を使って書き換えてしまうなら jQuery の html() で変更できます。
data属性を使ってデフォルトの文字「data-text-default」、クリック後の文字「data-text-clicked」を持たせて、ボタンの状態に応じてテキストを書き換えます。
hasClass() を使うとクラス active を持っているかどうかを簡単に確認できます。

<a class="btn" data-text-default="Click" data-text-clicked="Done" href="#">Click</a>
$(function(){
    $('.btn').on('click', function(){
        $(this).toggleClass('active');

        if($(this).hasClass('active')){
            var text = $(this).data('text-clicked');
        } else {
            var text = $(this).data('text-default');
        }
    });
});

変更後の文字が単純な場合や、javascript を自由に書き換えられる状態ならこれでも良いのですが、そうでない場合は CSS で切り替えを表現します。

Demo

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>CSS</title>
        <script src="https://code.jquery.com/jquery-1.12.4.min.js"
            integrity="sha256-ZosEbRLbNQzLpnKIkEdrPv7lOy9C27hHQ+Xp8a4MxAQ="
            crossorigin="anonymous"></script>

        <style>
        .btn
        {
            display: block;
            width: 96px;
            height: 32px;
            line-height: 32px;
            background-color: #3692ff;
            color: #fff;
            text-align: center;
        }

        .btn.active {
            background-color: #ccc;
        }

        .btn > span:last-of-type,
        .btn.active > span:first-of-type
        {
            display: none;
        }

        .btn.active > span:last-of-type {
            display: inline;
        }
        </style>

        <script>
        $(function(){
            $('.btn').on('click', function(){
                $(this).toggleClass('active');
            });
        });
        </script>
    </head>
    <body>
        <a class="btn" href="javascript:void(0)">
            <span>Click</span>
            <span>Done</span>
        </a>
    </body>
</html>

ボタン要素 <a> 内にある2つの span のうち、最初のものがデフォルトに表示され、2番めがクリック後に表示されます。
必要に応じて <span> 内で <img> などを使っても構いません。
クラス active がつけられると、最初の span が非表示にされ、2番めの span が表示されます。
CSS はやや複雑ですが、Javascript 部分はクラスをつける処理だけあればいいので簡潔に出来ます。

Posted in JavaScript, HTML, CSS | Tagged , , | Leave a comment

[CSS3]画像を用いずに表現できるデザインサンプル(スタイルシート使用例)

Share on Facebook
Bookmark this on Delicious
LINEで送る
Pocket

style-guide

レスポンシブデザインやフラットデザインが Web の主流となったことで、JPEG や PNG などのビットマップ画像を使った装飾よりも、変形に向く CSS(スタイルシート) のみで装飾を行うケースが増えてきました。

ウェブデザイナーであればスタイルシートで可能な表現についてはよく知っていると思いますが、ウェブが専門でないデザイナーさんはスタイルシートでどの程度のことができるのかよく知らない場合が多いです。
そこで、なるべく技術的な内容を排したデザイナー向けの見本を作りました。何かの参考になればと思います。

http://storage.php-archive.net/style-guide/

Posted in CSS | Tagged | Leave a comment

[PHP][HTML, CSS]画像を隙間なく並べて表示

Share on Facebook
Bookmark this on Delicious
LINEで送る
Pocket

高さの違う画像をタイル状に敷き詰めて表示させる場合、Javascript を利用することが多いですが、あえて PHP で表現すると次のようになります。

<?php
//カラム数(一段に並べる枚数)
$column = 3;
//幅
$width = 100;
//画像ディレクトリ
$dir = "images/";
$list = scandir($dir);

$files = array();
foreach($list as $value){
  if(is_file($dir . $value)){
    $files[] = $dir . $value;
  }
}

function columnGallery($files, $column, $width){

  $div = array();
  
  for($i=0;$i<$column;$i++){
    $heightTotal[$i] = 0;
  }
  
  foreach($files as $file){
    asort($heightTotal);
    $keys   = array_keys($heightTotal);
    $target   = reset($keys);
    $size   = getimagesize($file);
    $height   = $size[1];
    if(!isset($div[$target])) $div[$target] = array();
    $div[$target][] = $file;
    $heightTotal[$target] += $height;
  }
  
  foreach($div as $files){
    echo "<div class=\"column\">\n";
    foreach($files as $file){
      echo "<img src=\"{$file}\" style=\"width:{$width}px;\" /><br />\n";
    }
    echo "</div>\n";
  }
}
?>
<!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>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Gallery</title>
<style type="text/css">
.column {float:left;}
</style>
</head>
<body>
<?php columnGallery($files, $column, $width);?>
</body>
</html>

サンプルではディレクトリ内のファイル全てを並べて表示しています。

画像の横幅を統一し、カラムとして横並びにすることでぴったり並んだように見せています。
応用すれば Pinterest のような表示もできると思います。

grid

カラムごとに画像の高さの合計値を計算し、一番短いカラムに画像を追加してバランスを取ります。

リキッドレイアウトでウィンドウサイズの変更に合わせて並び直しをしたい場合は素直に Javascript を使ったほうがいいと思います。

その場合は「jQuery Masonry」が便利です。
Masonry

Posted in PHP, HTML, CSS | Tagged | Leave a comment