プロが教えるわが家の防犯対策術!

ごくごくシンプルなフォームのページを、テーブルタグを利用して作成しています。
thとtdのborder-bottomに線を入れた、至ってシンプルなものです。
そこでふと、画像のようにthの項目名とtdの入力スペースの間に、
区分するためのラインを入れるにはどうしたら良いのだろうかと思ったのです。
cellpaddingを指定してみたり、tdに背景を配置したらどうだろうかとか
あれこれ考えてみたのですが思うような答えにたどり着けませんでした。

画像のように、上下の線を途切らせず、かつ、上下の間にスペースを設けた上で、
区分するためのラインの入れ方、ご存じの方いらっしゃいましたらご教授いただけませんでしょうか。

ただし、jQuerytoやHTML5など最新技術は使わないシンプルな手段に限らせていただきます。

「テーブルタグを使ってフォームを作成してる」の質問画像

A 回答 (4件)

HTML4.01strict


CSS2.1
です。

sapnで括って、それをblockにして高さと巾をいっぱいに広げて、右側にborder
タブは、_に置換してある。
CSS2.1の
タイプセレクタ
子孫セレクタ
要素セレクタ
擬似要素セレクタ(*)
をつかってある。(*)未対応のブラウザを対象とするなら直接HTMLに書く。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html lang="ja">
<head>
_<meta http-equiv="content-type" content="text/html; charset=Shift_JIS">
_<title>サンプル</title>
_<meta name="author" content="ORUKA1951">
_<meta http-equiv="Content-Style-Type" content="text/css">
_<link rev="made" href="mailto:oruka1951@hoge.com" title="send a mail" >
_<link rel="START" href="../index.html">
_<style type="text/css">
<!--
table[summary="mailForm"]{
border-collapse:collapse;
border:gray 1px solid;
background-color:silver;
}
table[summary="mailForm"] th,
table[summary="mailForm"] td{
padding:5px 1em;
text-align:left;
}
table[summary="mailForm"] tr+tr th,
table[summary="mailForm"] tr+tr td{
border-top:gray 1px solid;
line-height:1.6em;
}
table[summary="mailForm"] th span{
display:block;
width:100%;height:100%;
border-right:2px red solid;
padding-left:0.5em;
}
table[summary="mailForm"] th span.required:after{
content:"*";
color:red;
}
-->
_</style>
</head>
<body>
_<h1>サンプル</h1>
_<table summary="mailForm">
_<tbody>
__<tr>
___<th abbr="名前"><span class="required">お名前(漢字)</span></th>
___<td><input type="text" size="20" name="name" value=""><td>
__</tr>
__<tr>
___<th abbr="お名前"><span class="required">お名前(フリガナ)</span></th>
___<td><input type="text" size="40" name="yomi" value=""><td>
__</tr>
__<tr>
___<th abbr="〒"><span>郵便番号</span></th>
___<td>〒<input type="text" size="10" name="zip" value="">例 000-0000<td>
__</tr>
_</tbody>
_</table>
</body>
</html>
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。
しかもテーブルでの実現に加えてとてもご丁寧なソースにも感謝です。
重ね重ねありがとうございました。
しかしあれだけのことなのにテーブルでするとなると、
出来なくはないけれどこんなにも手間がかかるのかということを思い知らされました。
でもとても勉強になりましたです。
重ね重ねありがとうございました。

お礼日時:2012/02/21 21:59

わざわざめんどくさいtableを使わなくても。


定義リストを使うほうかシンプル・・

<dl class="mailForm">
_<dt class="required">お名前(漢字)</dt>
_<dd><span><input type="text" size="20" name="name" value=""></span></dd>
_<dt class="required">お名前(フリガナ)</dt>
_<dd><span><input type="text" size="40" name="yomi" value=""></span></dd>
_<dt>郵便番号</dt>
_<dd><span>〒<input type="text" size="10" name="zip" value="">例 000-0000</span></dd>
</dl>

dl.mailForm{
_border:1px solid #999;
_border-top-width:0;
_background:silver;
}
dl.mailForm dt {
_float:left;
_width:10em;
_border-top:1px solid #999;
_padding:10px 0 0 1em;
}
_dl.mailForm dd span{display:inline-block;border-left:gray 2px solid;padding-left:1em;}

dl.mailForm dd {
_margin-left:10em;
_padding:10px 0 10px 10px;
_border-top:1px solid #999;
}
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。
複数、ベストアンサーを選べるのであれば確実にそうさせていただいたのですが…
すみません。
テーブルを使用しないでという発想がなかったので、とても勉強になりました。
あまりのシンプルさにびっくりです。
これを機会にこちらに移行しようと思っております。
重ね重ねありがとうございました。

お礼日時:2012/02/21 21:56

いろんな方法が考えられますが、理屈として一番理解しやすいのは、tr、th、tdの背景をなしにして、tableの背景にボーダーを引く方法ではないでしょうか。

thの幅が決まっているのであれば、簡単な方法だと思います。ただ、理屈が簡単というだけで、ベストプラクティスではないですが。

table{
background:#任意の色 url(ボーダ画像のパス) thの幅px 0 repeat-y;
}

tr,td,th{
background-color:transparent;
}
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。
なるほど、と思わされました。
研究対象にさせていただこうと思っております。
重ね重ねありがとうございました。

お礼日時:2012/02/21 21:57

No.1です。

よく考えてみると、反ってtableを使わないほうが楽ですね。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!