[CSSクイズ]構造を変えずにCSSだけでボックスの上下の順番を入れ替えられるのかッ!?

<div id="content">
  <div id="firstBox">
    <p>テキストテキストテキストテキスト</p>
  </div>
  <div id="secondBox">
    <p>テキストテキストテキストテキスト</p>
  </div>
  <div id="thirdBox">
    <p>テキストテキストテキストテキスト</p>
  </div>
</div>

例えば上記のHTMLがあったとして。
下記の図のように、#secondBoxと#thirdBoxの位置を入れ替えたいんですよ。

で、条件としては以下。

  • 各div内のテキスト量は不定。つまり高さは可変
  • HTML構造を変えてはダメ
  • CSSはいくらでもいじっても良し

なんだかんだでね、これ結構難しい問題だと思うんですよ。
解決策がない。
CSSクイズとか表題にしてるくせにさ、答えがないんですよ。

position: absolute使うにしても、ボックスの高さが不定だからtopもしくはbottomの値が定まらないし、同様にネガティブマージン使うにしても値が決まらない。
もう#thirdBoxにheight決め打ちしちゃってoverflow: hiddenかscrollでって事も考えた。

なんかどれもこれもスマートじゃない。スマートフォン向けに作ってるのに、全然スマートじゃない!!
あ、このフレーズいいな。今度から打ち合わせとかで使おう。「それ全然スマートじゃないですよね?スマートフォン向けなのに、全然スマートじゃないですよね?」って。

閑話休題。
で、結論としては、もうCSSだけじゃ解決できないよ私。
助けてjavascript〜!

こうすることにした。※cssの部分は結構省略して書いてます。

CSS

div#content {
  position: relative;
}
div#content div#secondBox {
  position: absolute;
}
div#content div#thirdBox {
  position: relative;
}

javascript

[javascript]
var fitstHeight =$(‘#firstBox’).height(); //高さを取得
var secondHeight =$(‘#secondBox’).height(); //高さを取得
var thirdHeight =$(‘#thirdBox’).height(); //高さを取得

$(‘#content’).css(‘height’, fitstHeight + secondHeight + thirdHeight); //#contentに中身のボックスの高さを合計した値を与える。
$(‘#secondBox).css(‘top’, fitstHeight + thirdHeight); //#secondBoxのtopからの位置を#firstBoxと#thirdBoxの合計した値を与える。
[/javascript]

でも、結局javascriptで解決するのも、なんだかちっともスマートじゃないですね。
この部分の解決策は多分、html原理主義者か、js信徒か、css教徒の三つどもえの論争が終わらないんじゃないかなぁと思います。

「君のやり方は間違っている!俺の解決方法はこれだッ!!」って思う人はご遠慮なさらずコメント欄へどうぞ。

さくらVPSでconcrete5 その1 VPSレンタル

VPSをレンタルする

さくらインターネットのVPSをレンタルします。
https://vps.sakura.ad.jp/

理由は以下の通りです。
[メリット]

  • VPSなのでサーバのほぼ全ての権限が使える
  • 安い
  • なのに何気に高性能!(ここ重要)

[デメリット]

  • 管理は自分でやらなきゃいかん

さくらのVPSにもいろいろプランがありますが、一日のアクセスが10万を超えるような想定がない限り、1Gプランで十分です。
1Gプランなら月980円で使えます。

手順リスト

  1. はじめに
  2. VPSレンタル
  3. ドメイン取得
  4. DNS設定
  5. サーバー設定
    1. ユーザー作成
    2. SSH接続設定
    3. ファイアーウォール設定
    4. apacheのインストール
    5. ホストの設定
    6. PHPのインストール
    7. MySQLのインストール
    8. phpMyAdminのインストール
  6. メールサーバー構築
  7. Concrete5のインストール
  8. Concrete5の組み込み
    1. そもそもConcrete5ってなんだ
    2. Concrete5の中身
    3. テーマファイルの作成
    4. ブロック
    5. カスタムテンプレート
    6. アドオン
    7. Designer Contentとは
    8. ページタイプ
    9. ユーザー
    10. 権限
    11. キャッシュ設定
  9. おしまい

メモ:concrete5で親ページのタイトルを取得

どうしても親ページのタイトルを表示しないと死んでしまうんです!!

で、いろいろ調べた。テーマファイルにこれを書けば出てくるみたい。

<?php 
$parent = Page::getByID($c->getCollectionParentID());
echo $parent->getCollectionName();
?>

メモ:concrete5のページ属性で指定した画像を表示する方法

concrete5のページ属性に入力した情報は、
[code]
$c->getAttribute(‘ハンドル’)
[/code]
で取得できます。

単純にテキストを出すだけなら下記のように取り出せば良いだけなんだけど、

<h1><?php echo $c->getAttribute('ハンドル');?></h1>

画像の場合はわかりにくかった。下記の様に書けばokです。

<img src="<?php echo ($c->getAttribute('ハンドル')->getVersion()->getRelativePath());?>" alt="" />

facebookのロゴって「f」マーク以外は使っちゃ駄目!ちゃんと利用規約読んでくださいッ!

仕事の関係上、いろんなウェブサイトを見ておりますが、表題の通りfacebookのロゴを勝手に使用しているサイトがございます。

ちゃんと利用規約読みましょう。
facebook ブランドリソースセンター
https://www.facebook.com/brandpermissions/logos.php

「facebook」文字列を使用したロゴありますよね?
アレだめらしいんですよ。基本的に使っていいのは「f」マークだけ。
そんで、たとえば画像のテキストで「facebook」もNGらしいですよ。
なぜか「Facebook」と頭のfを大文字にすればOK。

なので↓こういう使い方ならOKらしい。

サイトマップ内に「サイトマップ」って項目はいらんだろう?

たとえば「sitemap.html」というサイトマップのページがあったとして、その中に「サイトマップ」という項目は必要ないですよね。

  • トップページ
  • 会社概要
  • サービス紹介
  • お問い合わせ
  • 個人情報保護方針
  • サイトマップ ←これいらんやろ

非常に簡略化していますが、上記みたいなリストがあった場合に、ナビゲーションで、同じページが重複しても構わないと思いますが、サイトマップを閲覧している時に、サイトマップというページを表示する必要性がどれくらいあるか疑問です。

せめて正しいマークアップをしよう

こんなパンクズのコードを見る度悲しくなります。

<div class="pan_navi">
  <p><a href="../index.html" title="トップページ">HOME</a> &gt;&gt; <a href="index.html">施設紹介</a> &gt;&gt; 施設名</p></div>
</div><!--second_pan_navi-->

CSS当てづらいんですよ…。全く融通が聞かないコードになってしまう。

htmlの意味を考えるとulかolを使うと思いますが、私はパンクズをマークアップするときは、なるべく<ol>を使う様にしてます。
理由は、トップページからの順番を意味を持って示したいという意図があるからです。

<ol id="topicPath">
<li><a href="../index.html" title="HOME">HOME</a></li>
<li><a href="index.html">施設紹介</a></li>
<li>施設名</li>
</ol>

今さら…。jQueryとprototypeの共存とか…。

私は最近はもっぱらjQueryしか使ってないのですが、4〜5年前のトレンドというか、なんというか、prototype派の人もいたわけですよ。

でですね。

「prototype使ってて、今後はjQueryに移行したいけど、今の段階だとprototypeも残したい」みたいな案件もあるんですねぇこれが。

prototype使ってるhtmlにそのままjQuery入れると、”$”が共通して使用しているため、競合してしまってどっちかが動かないか、もしくは両方全く動かない状態に陥ります。

じゃーどうしましょう。

こーしましょう。
まず、prototype.jsから読み込みをします。
で、noConflictの記述をします。

<script type="text/javascript" src="js/prototype.js"></script>
<script type="text/javascript" src="js/jquery-x.x.x.js"></script>
<script>
jQuery.noConflict();
var j$ = jQuery;
</script>

上記まで書けたら、解決までほぼ完了。

と言いたいところですが、jQueryで使用している”$”を全て”j$”にする必要があります(jQueryのソースファイルじゃなくて、プラグインで使用している”$”です)。

例えば、jQueryでスクロールを制御しているのであれば、

[javascript]
$(function(){
$(‘a[href^=#]’).click(function() {
var href= $(this).attr("href");
var target = $(href == "#" || href == "" ? ‘html’ : href);
var position = target.offset().top;
});
return false;
});
});
[/javascript]

と上記のように書いてあったとして、それを下記のように書き換えます。

[javascript]
j$(function(){
j$(‘a[href^=#]’).click(function() {
var href= j$(this).attr("href");
var target = j$(href == "#" || href == "" ? ‘html’ : href);
var position = target.offset().top;
});
return false;
});
});
[/javascript]

とりあえず全部の”$”を”j$”にすりゃOKです。”$”を”j$”に全置換したらいいんじゃないかしら。

これで競合せずにjQueryとprototypeが使用できるようになります。

でもまーぶっちゃけ、jQueryとprototypeを両方使うなんて普通に考えたらしないんだけど、案件次第でさ…。

さくらVPSでconcrete5 その0 はじめに

クライアントワークで、企画〜デザイン〜コーディング〜さくらのVPSを使ってConcrete5のインストールと組み込み、メールサーバーの設定まで一通りやりました。

多分プログラム畑の人なら、簡単に出来てしまうんじゃないかと思うのですが、私はずっとデザイン畑で仕事してきたので、色々な作業が思い通りにいかず試行錯誤を繰り返してなんとか完成までこぎ着ける事ができました。

なおさくらVPSは契約した時点でのバージョンはcentOS6.3でした。
バージョンは以下のコマンドで確認できます。

[code]
[user@servername ~]$ cat /etc/`ls /etc -F | grep &quot;release$\|version$&quot;`
CentOS release 6.3 (Final)
[/code]

ちょっとやった作業が多いので、一度にまとめて公開するのではなく、下記の手順にしたがってこれから数日かけて記事をあげていきたいと思います。

手順リスト

  1. はじめに
  2. VPSレンタル
  3. ドメイン取得
  4. DNS設定
  5. サーバー設定
    1. ユーザー作成
    2. SSH接続設定
    3. ファイアーウォール設定
    4. apacheのインストール
    5. ホストの設定
    6. PHPのインストール
    7. MySQLのインストール
    8. phpMyAdminのインストール
  6. メールサーバー構築
  7. Concrete5のインストール
  8. Concrete5の組み込み
    1. そもそもConcrete5ってなんだ
    2. Concrete5の中身
    3. テーマファイルの作成
    4. ブロック
    5. カスタムテンプレート
    6. アドオン
    7. Designer Contentとは
    8. ページタイプ
    9. ユーザー
    10. 権限
    11. キャッシュ設定
  9. おしまい

これ全部書き終わった頃には、多分一冊本が書けるよね(笑)
きっと優秀な人がconcrete5の本出してくれるんだろうなー(遠い目)

Photoshopで「レイヤー129 の コピー 543」とか冗談でしょ?

Photoshopでデザインしてると、レイヤーの数が膨大になるんですが、コピーすると表題のようなレイヤー名に「レイヤー129 の “コピー 543″」みたいなコピーのいくつみたいな番号がついてしまうのです。

これ、集中して作ってるときは問題ないんですが、いざデザインが終わってHTML作りましょってなったときに非常に厄介で、「シェイプ1 の コピー 2」とかならまだ認識できるからマシだとは言え、表題のような数になってくると、
「あれ、これ一体どこのレイヤーなのよ、もうデザイナー何やってんのよ!あ、これ作ったの俺か」
という様なジレンマというか、イラつく事が多いので、レイヤー名に「コピー」をつけないようにする方法を発見しました。

手順はとっても簡単!マウスをたった4回クリックするだけ!!スゴイ!!

1.パネルオプションを開く

「レイヤーパレット」の右上にある設定アイコンをクリックして、「パネルオプション」を選択します。

2.コピーしたレイヤーとグループに「コピー」を追加のチェックを外す

開いたパネルオプションのウインドウの最下部にある、「コピーしたレイヤーとグループに「コピー」を追加」のチェックを外します。
これで完了です!ね?簡単でしょ!?

終わりに

ここまで「レイヤーXX」や「シェイプXXX」の様な表記をしてきましたが、そもそも、それぞれのレイヤーに名前を付けない事自体が混乱を招く原因になります。
私は一人でデザイン〜コーディングまで作業する事が多いので、特に問題がある訳ではないですが、通常ウェブデザインというのはチームで作業したり、会社間でデータの受け渡しをする事が多いので、「誰が見ても」「わかりやすい」「レイヤー名」をつける事が望ましいと思います。