tableのthやtdをソースを変えずにCSSだけで縦並びにする方法 – レスポンシブデザイン編 –

HTMLのソースを全く変えずにtableの配置を縦並びにする方法

結論から言おう。実現可能だ。

一般にこの方法を実現したいならdivを使ってやる方がいいと言われている。その通りで、最初から作るならdivでやるべきだ。

でも、フォームのソースが元々あって、そこをどうしても変更できない場合や、CSSだけで対応する必要がある場合もあるだろう。
なので、今回はCSSだけで実現する方法を紹介。

miniiman

手軽なやつだと、position absoluteを使う方法と、 display blockを使う方法がある。

 

CSSに1つ記述を追加するだけ

 

table, tbody, tr, th, td {
display: block;
}

これだけ。
ちなみに、tfootやtheadを使っている場合は、それも含めてdisplay block してやるといい。

IE6,7,8まで含めて対応したい場合はtableのブロック要素化が効かないかもしれない。
そんな時には、
IE6,7,8,9だけCSSで違う記述を反映させる方法

この辺を参考に。

 

レスポンシブ(スマホ用とPC用で自動的に変える方法)で実装する

テーブルを縦並びにするだけなら先ほどの display blockだけで大丈夫だが、PCでは普通のテーブル、スマホでは縦並びにしたい場合の対応も考えよう。

table-normal

まず、レスポンシブデザインを考えるに辺り、メディアアンカーを覚えなければならない。

・PCで適用されるCSS

@media screen and (min-width:601px) { /*601px以上*/

この間にPC用のCSSを書く。

}

・スマホで適用されるCSS

@media screen and (max-width:600px) { /*600px以下*/

この間にスマホ用のCSSを書く。

}

という感じ。

「スマホ用」「PC用」と言っているが、本来の意味は、

「画面サイズが600以下の時はこのCSSだよ」
「画面サイズが601以上の時はこのCSSだよ」

という事だ。
数字は自分で勝手に変えてもいい。タブレットも分けたい場合などには、3つにしたりすることもできる。

@media screen and (min-width: 500px) and (max-width: 800px) {

画面サイズが500~800の間適用されるCSS。タブレット用とか?

}

でも、昨今のスマホの画面サイズからいくと、600pxで分けるのがおすすめ。

今回のスマホ時にだけテーブルを縦に並べたいなら、

@media screen and (max-width:600px) { /*600px以下(スマホ用)*/
table, tbody, tr, th, td {
display: block;
max-width: 98%; /*スマホ画面ほぼ一杯に広がる感じ*/
}
}

としてやれば、

table-sp

こうなる。PC版はそのまま。

ちなみに、 max-width:98%; とかは自由に変えてくれ。

overflow:hidden; なんかも使えるかもしれない。

メディアアンカーの外にテーブルの幅を指定している場合は、上記スマホ用CSSを追加しても効かない場合がある。その場合は

@media screen and (min-width:601px) { /*601px以上(PC用)*/
table {
width: 680px; /*PC版の横幅*/
}

という風に、PC用メディアアンカー内に移動すること。

IE6,7,8,9だけCSSで違う記述を反映させる方法

IEなんてなくなればいいのに…とは言うものの

CSSに以下の記述をすることで、適応させることがが可能になる。

これを通称ハックと呼ぶらしい。まあ言葉なんかどうでもいい。

 

IE6だけに適応

先頭に「_」をつけることでIE6だけに適用。

.sample {
_display: none;
}

 

IE7だけに適応

先頭に「*」をつけることでIE7だけに適用。

.sample {
*display: none;
}

 

IE8だけに適応

末尾に「\9」をつけることでIE8だけに適用。なんで9やのにIE8やねん…

.sample {
display: none\9;
}

 

IE9だけに適応

親要素として「:root」をつけて、
末尾に「\0/」をつけることでIE9だけに適用。

:root .sample {
display: none\0/;
}

 

使用例

例えば、IE6, 7だけで非表示にしたい場合。

.ie67none {
_display: none;
*display: none;
}

こんな感じで、IE6とIE7で非表示にするclassを作って、

<p class=”ie67none”>IE6とIE7ではこの文字は非表示</p>

としてやればいい。

EC CUBE 商品送料で商品ごとに送料を入力できるようにするカスタマイズメモ

ECCUBEの商品送料、個別送料や基本送料をカスタマイズ

EC CUBEのバージョンは2.4.4。

最終目標は、管理画面で、商品個別の送料が入力できるようにする。

カスタマイズする箇所は4か所。

 

1.元々ある作りかけの商品送料の部分を有効にする

/data/Smarty/templates/default/admin/products/product.tpl

コメントになっている商品送料のコメントを外す(185行目)

<!– ここから商品送料 –>
<tr class=”fs12n”>
<td bgcolor=”#f2f1ec” width=”160″>商品送料</td>
<td bgcolor=”#ffffff” width=”557″>
<span class=”red12″><!–{$arrErr.deliv_fee}–></span>
<input type=”text” name=”deliv_fee”
value=”<!–{$arrForm.deliv_fee|escape}–>” size=”6″
class=”box6″ maxlength=”<!–{$smarty.const.PRICE_LEN}–>”
style=”<!–{if $arrErr.deliv_fee != “”}–>background-color: <!–{$smarty.const.ERR_COLOR}–><!–{/if}–>”/>円
<span class=”red10″> (半角数字で入力)</span></td>
</td>
</tr>
<!– ここまで商品送料 –>

 

2.アドミン画面に入力用のテキストボックス(フォーム)を作る

/data/Smarty/templates/default/admin/products/confirm.tpl

在庫数とポイント付与率の間に追加する。(129行目)

<tr>
<td bgcolor=”#f2f1ec” width=”160″ class=”fs12n”>在庫数</td>
<td bgcolor=”#ffffff” width=”557″ class=”fs12n”>
<!–{if $arrForm.stock_unlimited == 1}–>
無制限
<!–{else}–>
<!–{$arrForm.stock|escape}–>
個<!–{/if}–>
</td>
</tr>
<!–{/if}–>
<!– 商品送料の確認画面 –>
<tr>
<td bgcolor=”#f2f1ec” width=”160″ class=”fs12n”>商品送料</td>
<td bgcolor=”#ffffff” width=”557″ class=”fs12n”>
<!–{$arrForm.deliv_fee|escape}–>
円</td>
</tr>
<!– 商品送料の確認画面 –>
<tr>
<td bgcolor=”#f2f1ec” width=”160″ class=”fs12n”>ポイント付与率</td>
<td bgcolor=”#ffffff” width=”557″ class=”fs12n”>
<!–{$arrForm.point_rate|escape}–>
%</td>
</tr>

 

3.送料の計算の部分に、個別商品を追加する計算式を追加

/data/class_extends/helper_extends/SC_Helper_DB_Ex.php

送料計算式をカスタマイズ。

$objPage->tpl_total_deliv_fee に、カートに入った商品の、商品送料deliv_feeの合計が格納されている。

/httpdocs/data/class/helper/SC_Helper_DB.php
から、function sfTotalConfirmの部分(1467~1536行目)をすべて

SC_Helper_DB_Ex.php の
class SC_Helper_DB_Ex extends SC_Helper_DB {
}
?>
の間にコピーし、以下の部分(55行目(コピペの仕方により変動する))を変更。

// 商品ごとの送料が有効の場合
if (OPTION_PRODUCT_DELIV_FEE == 1) {
$arrData[‘deliv_fee’]+= $objPage->tpl_total_deliv_fee;
//$objCartSess->getAllProductsDelivFee();
}

 

コピペ後はこんな感じになるはず↓

 

class SC_Helper_DB_Ex extends SC_Helper_DB {
function sfTotalConfirm($arrData, &$objPage, &$objCartSess, $arrInfo, $objCustomer = “”) {
// 未定義変数を定義

—–中略—–

$arrData[‘add_point’] = 0;
}
return $arrData;
}
}
?>

 

4.パラメーターで個別送料を有効にしておく

管理画面の[システム設定]-[パラメータ設定]で「OPTION_PRODUCT_DELIV_FEE」を’1’にする。

これでおしまい。

合計送料X = 配送業者送料A + 商品送料合計n(今追加した分) で算出されるようになる。

配送業者送料A を地域別に設定。

大きいものa と小さいものb を購入された場合、n(a)に500、n(b)に0 を入れておけば、
X = A + n(a) + n(b) となるので、n(b)が0なので追加送料は発生しない。
一方大きいものを2つ購入された場合は、n(a)+n(a’) となり、送料は加算される。
また、小さいものを1つ購入された場合は、X = A + n(b) なので A がそのまま送料とになる。

明日試したくなるカスタマイズ、ネットな日々に役立つ小技と、たまに旅行の妄想と。