CSSでヘッダ・フッタを固定してみる。IE6にも対応(いまさら?)。

2014年05月17日 18時00分 正午の月齢:18.2  月名:寝待月  潮汐:中潮 月齢:18.2[寝待月] 潮汐:中潮
(最終更新日:2019年09月02日)
12年前に投稿 | ウェブ・IT関係 | コメントはありません

11分ぐらいで読めます。

最近の自分の中でのウェブデザインのワンパターン化(高さ100px程度のヘッダ、右メニュー2カラム。WordPressのテーマばかりいじっていたので。)を打破するべく、いろいろ考えてみた結果、ヘッダ・フッタを天地に固定してみようと考えました。他人の知恵を借りつつ、自分でいろいろ試してみると結構興味深いものがあったので、ちょっとまとめてみます。

まずは先人の知恵を覗いてお勉強。

サイドメニューの有無等によってCSSの記述に違いはあるものの、まぁだいたい想定内。これを元にベースとなるCSSとHTMLを書いてみました。まずはCSS。

body {
padding: 30px 0 30px 0;
overflow-y: scroll;
}

#header {
background-color: #000000;
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 30px;
}

#footer {
background-color: #000000;
position: fixed;
bottom: 0;
left: 0;
width: 100%;
height: 30px;
}

#header p {
margin: 0px;
padding: 5px;
color: #FFFFFF;
}

#footer p {
margin: 0px;
padding: 5px;
text-align: center;
color: #FFFFFF;
}

それからHTML。

<body>

<div id="contents">
<h1>1</h1>
<p>2</p>
<p>3</p>
<p>4</p>
<p>5</p>
<p>6</p>
<p>7</p>
<p>8</p>
<p>9</p>
<p>10</p>
<h2>11</h2>
<p>12</p>
<p>13</p>
<p>14</p>
<p>15</p>
<p>16</p>
<p>17</p>
<p>18</p>
<p>19</p>
<p>20</p>
<h3>21</h3>
<p>22</p>
<p>23</p>
<p>24</p>
<p>25</p>
<p>26</p>
<p>27</p>
<p>28</p>
<p>29</p>
<p>30</p>
</div>

<div id="header">
<p>ヘッダ固定のhtml&amp;cssサンプル</p>
</div>

<div id="footer">
<p>フッタ固定のhtml&amp;cssサンプル</p>
</div>

</body>

SEOにどれくらい効果があるかわかりませんが、ヘッダのdiv要素を下に置いてみました。これで十分、FirefoxやInternet Explorer8では表示されます。もちろん、ヘッダのdiv要素を上に配置しても同じように表示されます。ファイルにしたのがこれ。

で、ここからが本題みたいなものでして。実は上記の記述では、Internet Explorer6(IE6)で見たときにグチャグチャに表示されてしまいます。もう今さらIE6なんてどうでもいいよなーと思いながら、とりあえず対応してみたいと思います。参考になったのは次のサイト。

CSSハックでIE6用には別のCSSを適用してうまく表示できています。ところがよく見ると、ヘッダもフッタもコンテンツもdiv要素を3階層の入れ子にしていて、どうもそれが気になってしまうのです。できるだけシンプルにしたい…。そこでdivの入れ子は2階層にとどめて、CSSでコントロールできるかどうか試してみました。まずはHTML部分を2種類用意します。

<body>

<div id="contents_wrap">
<div id="contents">
<h1>1</h1>
<p>2</p>
<p>3</p>
<p>4</p>
<p>5</p>
<p>6</p>
<p>7</p>
<p>8</p>
<p>9</p>
<p>10</p>
<h2>11</h2>
<p>12</p>
<p>13</p>
<p>14</p>
<p>15</p>
<p>16</p>
<p>17</p>
<p>18</p>
<p>19</p>
<p>20</p>
<h3>21</h3>
<p>22</p>
<p>23</p>
<p>24</p>
<p>25</p>
<p>26</p>
<p>27</p>
<p>28</p>
<p>29</p>
<p>30</p>
</div>
</div>

<div id="header">
<div id="head">
<p>ヘッダ固定のhtml&amp;cssサンプル</p>
</div>
</div>

<div id="footer">
<div id="foot">
<p>フッタ固定のhtml&amp;cssサンプル</p>
</div>
</div>

</body>

これがヘッダを下に持ってきて、SEOに効くかもしれない版。次はヘッダをコンテンツの上に置いた普通っぽい版。

<body>

<div id="header">
<div id="head">
<p>ヘッダ固定のhtml&amp;cssサンプル</p>
</div>
</div>

<div id="contents_wrap">
<div id="contents">
<h1>1</h1>
<p>2</p>
<p>3</p>
<p>4</p>
<p>5</p>
<p>6</p>
<p>7</p>
<p>8</p>
<p>9</p>
<p>10</p>
<h2>11</h2>
<p>12</p>
<p>13</p>
<p>14</p>
<p>15</p>
<p>16</p>
<p>17</p>
<p>18</p>
<p>19</p>
<p>20</p>
<h3>21</h3>
<p>22</p>
<p>23</p>
<p>24</p>
<p>25</p>
<p>26</p>
<p>27</p>
<p>28</p>
<p>29</p>
<p>30</p>
</div>
</div>

<div id="footer">
<div id="foot">
<p>フッタ固定のhtml&amp;cssサンプル</p>
</div>
</div>

</body>

こんな感じで、ヘッダもフッタもコンテンツを設定します。div要素contents_wrapは、IE6が使います。次にCSSを2種類用意しました。1つ目はIE6非対応版。

body {
padding: 30px 0 30px 0;
overflow-y: scroll;
}

#header {
background-color: #000000;
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 30px;
}

#footer {
background-color: #000000;
position: fixed;
bottom: 0;
left: 0;
width: 100%;
height: 30px;
}

#header p {
margin: 0px;
padding: 5px;
color: #FFFFFF;
}

#footer p {
margin: 0px;
padding: 5px;
text-align: center;
color: #FFFFFF;
}

それからIE6対応版。

body {
margin: 0;
padding: 0;
}

#header {
position: fixed;
top: 0;
width: 100%;
}

#head {
background-color: #000000;
height: 30px;
}

#contents {
overflow: auto;
margin: 0 auto;
padding: 38px 8px 38px 8px;
}

#footer {
position: fixed;
bottom: 0;
width: 100%;
}

#foot {
background-color: #000000;
height: 30px;
}

#header p {
margin: 0px;
padding: 5px;
color: #FFFFFF;
}

#footer p {
margin: 0px;
padding: 5px;
text-align: center;
color: #FFFFFF;
}

/* for IE6 */
html, body {
_height: 100%;
_overflow: hidden;
}

#header, #footer {
_position: absolute;
_margin-right: 17px; /* IE6 scroll bar space */
}

#head, #foot {
_margin-right: 17px; /* IE6 scroll bar space */
}

#contents_wrap {
_width: 100%;
_height: 100%;
_overflow: auto;
}

この2つのHTMLと2つのCSSで4パターンのファイルを作ってみました。CSSの値等はなるべくどのファイルも同じように表示されるようにしてみました。

いかがでしょうか。Firefox12とIE8で確認したところ、どれも同じように表示されました(我が家の環境では)。少なくともぐちゃぐちゃでわけがわからないということはないと思います。さて、IE6非対応のファイルがどのように表示されるのかIE6があれば試してほしいのですが、もうIE6なんて断捨離執行済みの人のためにスクリーンショットを載せておきますネ。

non-ie6 non-ie6_seo

あちゃー。1つめの画像が「ヘッダ・フッタ固定のhtml&cssサンプル(IE6非対応・ヘッダ上に配置)」で次が「ヘッダ・フッタ固定のhtml&cssサンプル(IE6非対応・ヘッダ下に配置)」なのですが、どちらもスクロールに対してヘッダ・フッタが固定されていないし、コンテンツ部分のスクロールバーが2重になっているし、ひどいもんです。「乱れ初めにし我ならなくに」って感じ(?)ですかね。

div要素を入れ子にしなくてもできないかなーといろいろ試してみたのですが、今のところこれが精一杯です。でもIE6はもう対応しなくてもいいんじゃないかなって改めて思いましたー。

EC-CUBE デフォルトテンプレートのセンタリングのズレを直す。

2014年05月06日 18時00分 正午の月齢:7.2  月名:弓張月(上弦)  潮汐:小潮 月齢:7.2[弓張月(上弦)] 潮汐:小潮
(最終更新日:2019年09月02日)
12年前に投稿 | ウェブ・IT関係 | コメントはありません

1分ぐらいで読めます。

ここ最近いろいろと試しているEC-CUBE。2.13系のテンプレート作りにハマっています。2.12系の構築には「デザインテンプレート・シンプルバージョン(2.11系・無料)」を元に作りこむことができたのですが、さすがに2.13系ではうまく動いてくれないので、2.13系のデフォルトテンプレートを使って構築することにしました。

さて、今まで気づかなかったデフォルトテンプレートの気になる部分。今回はそれを直してみようと思います。

デフォルトテンプレート修正前

お気づきでしょうか。トップ画面から現在のカゴの中に移動すると、全体のデザインがずれてしまうのです。最初はCSSのバグかなと思ったのですが、よく見るとスクロールバーの表示・非表示で画面中心が移動しているのが原因みたい。

スクロールバーが表示されない高さのときもバーの領域を確保しておくことで、この現象を回避できそうです。さっそく、common.cssに以下の記述を追加してみました。

html {
overflow-y: scroll;
}

さてさて、

デフォルトテンプレート・修正後

これで、気色悪い動きがなくなりましたー!!

EC-CUBE 長すぎる文字列の省略を実装してみた。

2014年04月26日 18時00分 正午の月齢:26.7  月名:二十七日月  潮汐:中潮 月齢:26.7[二十七日月] 潮汐:中潮
(最終更新日:2019年09月02日)
12年前に投稿 | ウェブ・IT関係 | コメントはありません

5分ぐらいで読めます。

最近ふたたびEC-CUBEをいじっています。ただ、テンプレートのことや運用の都合で2.12系を使い続けていて、まだ2.13系には手を出していないのですが…。ソースコードをチラ見したところ2.13系のほうが好きなんですけどね。

さて、商品名ってどうしてもある程度長いものになる傾向があって、それはそれで一向に構わないのですが、何とかしたいナと思うことがあります。たとえば、

truncate-off

このように「よく一緒に購入されている商品」「最近チェックした商品」など、リストを横に並べるタイプのプラグイン。

商品名が長くなると文字列が折り返されるので、商品名の長さにばらつきがあると販売価格の表示が上下してちょっと美しくない。これを何とかしたかったのです。そんなわけで探したのが「EC-CUBEの小技:長すぎる商品名を…で省略する方法」。もうそのまんまです。ここには、

まず、情報参照元がこちら

Smarty研究(2)マルチバイト文字に対応した truncate 修飾子を作る

こちらの情報どおりに

modifier.mb_truncate.php ファイルを作り

/data/module/Smarty/libs/pluginsにアップロードするだけ。

使用するときは以下のように。

例として商品名を省略します。

<!--{$arrProduct.name|mb_truncate:18:"..."}-->

これで、日本語18文字目より後の文字は「...」で省略されます。

と書かれています。

引用の中のハイパーリンク「Smarty研究(2)マルチバイト文字に対応した truncate 修飾子を作る」を見てみました。

truncate は、文字列を指定の文字数までで切ってくれます。切った後につける文字列も指定できるので、

たとえば

$smarty->assign('string', 'abcdefghijklmnopqrstuvwxyz');

として

{$string|truncate:5:"..."}

などとすれば、文字列は 5 つめで切り捨てられ

abcde...

と表示されます。

しかしこの修飾子、文字列判定にはバイト数を使用しており、マルチバイト文字列で使用すると文字化けを起こしてしまう可能性があるのです。

なんだよちくしょー、と Smarty のプラグインディレクトリの中の「modifier.truncate.php」を開いてみたら、単に文字数取得に使われている関数が「strlen」、文字列切り出しの関数に「substr」を利用しているだけの事です。

となれば、ここをマルチバイト対応にすればよいのではないか?

てことで作った修飾子がこちらです。

function smarty_modifier_mb_truncate($string, $length = 80, $etc = '...') {
if ($length == 0) {return '';}
if (mb_strlen($string) > $length) {
return mb_substr($string, 0, $length).$etc;
} else {
return $string;
}
}

文字数を取得する部分には「mb_strlen」を、文字列切り出しには「mb_substr」を利用しています。

日本語には必要ないと思われる第4、第5引数はバッサリカットして見た目もスッキリ。

これを「modifier.mb_truncate.php」という名前で保存し、「smarty/libs/plugins」の中に放り込めば、テンプレート内で

{$string|mb_truncate:5:"..."}

このように使用できます。

ということで、マルチバイトに対応してくれています。まさに理想的。恩恵を受けているだけではアレなので、PHPファイルにしてzip圧縮したものを置いておきますネ。

ところで、このファイルを入れる場所ですが、今までの記事を見ると/data/module/Smarty/libs/pluginsと書かれています。今まで考えたことなかったのですが、この機会にEC-CUBEの構造を調べてみました。

で、これらを読むと、「Smarty」に入れるよりも「smarty_extends」のほうがよりふさわしいのかなと思って、smarty_extendsに入れてみます。

truncate-on

商品名等を表示している部分、

<p><a href="<!--{$smarty.const.P_DETAIL_URLPATH}--><!--{$arrCheckItems[cnt].product_id}-->"><!--{$arrCheckItems[cnt].name}--></a></p>

<p><a href="<!--{$smarty.const.P_DETAIL_URLPATH}--><!--{$arrCheckItems[cnt].product_id}-->"><!--{$arrCheckItems[cnt].name|mb_truncate:8:"..."}--></a></p>

に変更することで、このようにすっきりと表示されましたー。やったー!!

WordPressテーマの配色と初音ミクカラーパレットの関係

2014年03月30日 18時00分 正午の月齢:29.2  月名:月隠  潮汐:大潮 月齢:29.2[月隠] 潮汐:大潮
(最終更新日:2019年09月02日)
12年前に投稿 | WordPress | コメントはありません

2分ぐらいで読めます。

2週間くらい前に変更したWordPress自作テーマ。今回のテーマに使った配色をカラーパレットにしてみました。

susu03_7color

左から順に、

  • #333333 (51,51,51)
  • #666666 (102,102,102)
  • #F8F8F8 (248,248,248)
  • #FFFF99 (255,255,153)
  • #99CCCC (153,204,204)
  • #00CCCC (0,204,204)
  • #FF0099 (255,0,153)

です。

この他にも、bodyの基本背景色として#FFFFFFなどいろいろと設定はしているのですが、7色に限定するなら上記のコードになるかな、って思います。

さて、この色設定に関して参考にしたのが、初音ミクのカラーパレット。

miku_7color

左から順に、

  • #373B3E (55,59,62)
  • #BEC8D1 (190,200,209)
  • #FFFEEC (255,254,236)
  • #C3E5E7 (195,229,231)
  • #86CECB (134,206,203)
  • #137A7F (19,122,127)
  • #E12885 (225,40,233)

となっています。

もちろんこの色は、実際に使われている画像から抽出されたものなので間違っているわけではないのですが、このまま使ってしまうと全体的にちょっと緑がキツい感じ。なので薄い黄色(#FFFF99)を入れてみました。

初音ミクってよく「緑髪」なんて言われますが、緑色か水色かどっちだ? ということで意見が分かれるみたい。でも、いわゆる緑ということは考えられなくて、個人的には水色に近い気がします。波長で表現するなら500nmくらいかな。本当に緑色と青色の中間。

実際に分析してみると、R:G:Bが1:2:2くらいで、ウェブセーフカラーで最も近いのは#66CCCC (102,204,204)あたりのようです。実際にはグラデーションがかかっていたり、使われる面積によって感じ方が変わったりして、何色かわからないですケド。

●←#66CCCCってこんな色。

しかし、テーマにはあえて#66CCCCを使わず、広い面積(ヘッダー等)には#99CCCC、狭い面積(A要素の文字)には#00CCCCにして、周囲の色とのバランスを取りました。ヘッダーに#66CCCCだと、彩度が高くて。

拡張子.mtsのAVCHDファイルを、AviUtl経由TMPGEncでmpeg2にする。

2014年03月20日 18時00分 正午の月齢:19.2  月名:更待月  潮汐:中潮 月齢:19.2[更待月] 潮汐:中潮
(最終更新日:2019年09月02日)
12年前に投稿 | ウェブ・IT関係 | コメントはありません

2分ぐらいで読めます。

メイン機を変更して、ようやくほぼ元の環境にできました。しばらく放置していたビデオから抜き取ったAVCHDファイルをmpeg2にする続きです。

かなり前には別の方法で行っていたのですが、最近はAviUtlにAVCHDファイル(.mts)を読ませ、そのプロジェクトファイル(.aup)をTMPGEncでエンコードしています。ところが機種変更してから初めてのエンコードに挑んだところ、まずAviUtlがAVCHDを読んでくれない…。というわけで、そのあたりの解決策の備忘録。

最初はAviUtlのバージョンのせいかなと思い、version1.00からversion0.99mにしてみたものの変化なし。そんな中参考にしたのが「AviUtlでMP4(H.264)エンコードするためのインストールと設定方法」。ただこの中で「Nero AAC Codec」と「MPEG-2 VIDEO VFAPI Plug-In」は、最近のバージョンだとWindows2000ではエラーが出て働いてくれず、あきらめて削除しました。

結局のところ、

  1. x264.exe(32bit 8bit-depth)
  2. 拡張x264出力(GUI)Ex(x264guiEx)
  3. MP4Box(MP4Box-0.4.6-rev2080.zip)
  4. DirectShow File Reader プラグイン for AviUtl
  5. Libav-SMASH Exporter

このあたりをなんとなく突っ込んだら、読み込めるようになったみたい。本当に必要なものとそうでないものの特定ができないんですけどね。

tmpgenc

他には、

も参考にしました。あとはTMPGEncにaviutl.vfpを設定するのも忘れずに。

テーマをフルモデルチェンジしてみた。

2014年03月13日 18時00分 正午の月齢:12.2  月名:十三夜  潮汐:中潮 月齢:12.2[十三夜] 潮汐:中潮
(最終更新日:2014年03月17日)
12年前に投稿 | WordPress | コメントはありません

2分ぐらいで読めます。

久しぶりの投稿ですが、とにかく私生活がバタバタだったんです。気がついたら3月も1/3ほど経ってしまっています。さてさて、そんな忙しいときにもかかわらず、3年ぶりにテーマファイルを一新してみました。

screenshot

ここ最近流行のフラットデザインっぽく、ベタ塗りでまとめています。2カラム、右メニュー、本文リキッドレイアウトは以前と変わらないのですが、画面幅が500px以下になればサイドメニューが消えるレスポンシブデザインを取り入れてみました。

コンセプトは、まぁ色を見ればバレバレな気もしますが、初音ミク色なわけでして。あとはできる限りウェブセーフカラーで構成し、どうしても出せない淡い色のみ、妥協しています。このご時勢に216色にこだわる必要はほとんど無意味なんでしょうけど、何ていうか、昔からの習性みたいなものかなー。

さて、今までの当サイトのテーマを振り返ってみましょう。

screenshot01

これが初代のテーマのスクリーンショット。「鉄道ブログ」な感じをムンムンと押し出しています。途中マイナーチェンジを何度か加えましたが、基本的には白いままでした。

screenshot02

これが昨日まで使っていた2代目テーマファイル。明るめの緑色をメインにしてみました。基本的にはほとんど初代のテーマのままで、スタイルシートや画像だけを変えたくらいかな。

で、3代目のテーマですが、元になるファイル群が別物でして、余計な記述はできる限り省きました。一応Internet Explorer6でも崩れずに表示されるんですよ。あ、そうそう。相変わらずXHTML1.0です。HTML5で書く気が起きないので。html lintなどのチェックも全然していないのがちょっと心配。でもFirefox27・12、IE6・8で表示されているし大丈夫だよきっと、うん。と自分に言い聞かせて。

5年くらいはこれでいけるかなって思っているんですケド。

Translate »