• ベストアンサー

widthやheightの数値に単位(px)はつけない方が良いの?

自分はHTMLやCSSにおいて<img>や<td>に width="100px" とか、 div に { width: 70px } とか、ピクセルの単位を付けて作っています。 どこかの本が単位をつけると教えている……はずだったからです。 今日、HTMLチェックというサービスを行ったら 『不正な設定。数値か%指定にしてください』という様なことをいわれました。 ちなみに用いているDocument宣言は4.01 Transitionalです。幅・高さに 単位はまったく必要ないのでしょうか? 逆に単位を省略してはいけないタグはありますか。

  • HTML
  • 回答数4
  • ありがとう数8

質問者が選んだベストアンサー

  • ベストアンサー
noname#20378
noname#20378
回答No.2

仕様書を確認してみましょう 属性索引からimg要素のwidth属性を調べてみると >width = length [CN] 画像・オブジェクトの幅を上書きする。 という記述が見つかります lengthからリンクを飛ぶと少し上に行った所にピクセルの説明があり ># ピクセル: (DTDでは%Pixels; と表記)の値は、スクリーンや紙などキャンバスに表示する際のピクセル数を表す整数である。 の後に重要な記述があります >従って、「50」という値は50ピクセルを意味する。 ピクセルに関する規範的情報は、 [CSS1]を参照のこと。 で、 ># 長さ: (DTDでは%Length; と表記)の値は、%Pixel;または水平・垂直方向で利用可能な空間に対するパーセンテージである。従って、「50%」という値は、可能な空間の半分を意味する。 つまり widthは「50」などの数字で指定するか「50%」ちいうパーセントで指定することが出来ます

sundial
質問者

お礼

はい…すみません。 数字のみでピクセルなのに、今の思い込みだと「50ピクセルピクセル」と 記述していたんですね。穴をほって入りたい気分です。 お助けありがとうございました。

その他の回答 (3)

  • poohron
  • ベストアンサー率59% (574/971)
回答No.4

#1です。 #3さん、 > 後ろのセミコロンはあくまで複数の宣言をまとめる時には区切りとして必要ですが、 > 区切り以外、単一の場合や最後の宣言に付ける必要はありません。 ああ、そうか。 中途半端な知識をひけらかしてしまい申し訳なかったです。 そう言われてみると、CSSを覚えたての頃に 「とにかく最後にセミコロン付けときゃ問題ないんじゃん」と 最後の宣言にも片っ端からセミコロンを付けることに 自分だけのルールとして決めた記憶がよみがえってきました(汗) と、いうわけで私の回答のうち、CSSに関する部分は撤回させていただきます。 ご指摘有難うございました。

sundial
質問者

お礼

いえいえ。こんなお馬鹿な質問に答えてくださり、まさに恐縮です。 自分も「セミコロンは常に付けておけばいいんだね」と思い至ったほうです。 たとえ記述では忘れていなくても、質問文で付けていなかったらダメですよね。

  • steel_gray
  • ベストアンサー率66% (1052/1578)
回答No.3

htmlの属性値については#1さんのおっしゃるとおりで文章型宣言に関わらず数値(=pixel)と%以外は規定されていないので単位なしか%かを適切に使いわけてください。 他で単位が必須の属性とかは・・・その都度HTMLの検証サービスで調べた方が確実です。 あらかじめ知っておきたいのであれば仕様書を確認してください。 http://www.asahi-net.or.jp/~sd5a-ucd/rec-html401j/cover.html ただ、長さや大きさなどの単位が必要になりそうなものは基本的にCSSへの移行が推奨されていますので今後はあまり考えなくてもよいかと思います。 CSSについては後ろのセミコロンはあくまで複数の宣言をまとめる時には区切りとして必要ですが、 区切り以外、単一の場合や最後の宣言に付ける必要はありません。 http://www.y-adagio.com/public/standards/tr_css2/syndata.html#declaration ※追加する時とかに考えなくていいので常に付けておくというのは問題ないです。

sundial
質問者

お礼

W3なんとか…のデータの多さにおののいて、基本中の基本すら 目を通すことをしていませんでした。私は阿呆です。 セミコロンの補足、助かりました。一つだけでも常に付けるクセをつけておけば うっかりミスが防げますよね。お助けありがとうございました。

  • poohron
  • ベストアンサー率59% (574/971)
回答No.1

width="100px"も{ width: 70px }も誤りです。 HTMLならpxなどの単位は付けません。 width="100" で "100px幅" という意味になります。 単位をつけるとすれば、 width="●●%" ですね。 CSSであれば、{width : 70px}ではなく {width : 70px;}と記述しましょう。(pxの後の ; にご注意ください)

sundial
質問者

お礼

自分はつけると信じて1年以上やっていました。 お恥ずかしい限りです。セミコロンは質問文では忘れてしまいましたが、 いつも、中身がひとつだけでも付けています。 お助けありがとうございました。

関連するQ&A

  • table要素のwidthの解釈

    tableタグを使って次のようなことをしたいと考えています。 ・table要素の親はdiv要素 ・div要素にはサイズ(width/height)が指定されており、overflow:hiddenとしてある。 ・table要素にはサイズを指定しない ・td要素にはサイズを指定する →つまり、tableのサイズはtdのサイズで決定する HTML/CSSは次の通りです。 ----------------------------------------------------- div { width: 300px; overflow: hidden; } table { table-layout: fixed; } td { width: 170px; } <div> <table><tr> <td>a</td><td>b</td><td>c</td> </tr></table> </div> ----------------------------------------------------- このコードを「DOCTYPE宣言を書かずに」IE8で開くと、想定通りの表示になりますが、 <!DOCTYPE html>と記述すると、tableの横幅が300pxに詰められてしまいます。 td要素のwidth指定が働かず、親のdiv要素のwidthに無理やり押し込められてしまうようです。 また、FirefoxではDOCTYPE宣言無しでも同様の問題が起きてしまいます。 table内の列数は固定ではないので、tableに対してwidth指定はしたくありません。 何か書き方が間違っているのでしょうか。 あるいは、標準準拠モードの仕様では、そもそもできないことをやろうとしているのでしょうか。

  • CSSで記述した数値が取得できない

    あるdivタグのサイズを640px*480pxにしようと思い、以下のように記述しました。 (省略) <style type="text/css"> <!-- #oshiete { width: 640px; height: 480px; } //--> </style> </head> <body> <div id="oshiete"></div> (省略) その後、これをJavaScriptで動的に変化させようとしたのですが、 document.getElementById("oshiete").style.width などでの数値の取得が出来ません。 調べてみたところ、divタグに <div id="oshiete" style="width: 640px; height: 480px;"></div> と直接スタイルを記述していれば数値の取得が出来ました。 しかしスタイルシートを使う以上、タグに直接スタイルを書いていたのではせっかくの効果が発揮できません。 スタイルシートをheadタグに記述、あるいは外部CSS呼び出しを使いつつ、JavaScriptから数値を取得する方法を教えてください。 よろしくお願いします。

  • td width="180" と固定してるのですが・・

    <div style="width:500;height:220;overflow:auto; scrollbar-3dlight-color:#9acd32; scrollbar-arrow-color:#9acd32; scrollbar-darkshadow-color:#ffffff; scrollbar-face-color:#9acd32; scrollbar-highlight-color:#ffffff; scrollbar-shadow-color:#9acd32; scrollbar-track-color:#ffffff; "> <table style="font-size:13px; color:magenta;"><tr align="center"> <td width="180"><img src=""></td> <td width="180"><img src=""></td> <td width="180"><img src=""></td> <td width="180"><img src=""></td> <td width="180"><img src=""></td> </tr></table> </div> img には 110×150 のサイズの写真を入れています。 div width="500" にしているので、180×3=540 ですから3枚目のimgが途中で切れて、残りが横スクロールに引っ込むと思ってたのですが、実際にはimgがぎゅうぎゅうに詰まって4.8枚見えるようになります。 何故 td width を固定しているのに変動してしまうかがわかりません。 どうすれば img と img のあいだを余裕もたせて表示することができますでしょうか? よろしくご教授のほど願います。

    • ベストアンサー
    • HTML
  • cssで、imgタグに、背景画像を敷きたい

    cssで、imgタグに、背景画像(影)を敷く方法を教えてください。 ※divタグに敷く方法は分かるのですが、imgタグに敷く方法が分かりません。 ■現状 <HTML> <div id="hoge"> <img src~ <CSS> #hoge img { background-image:url(/images/background_shodow.jpg); background-repeat: none; background:position: ? width:? height:? margin:? padding:?; <影の大きさ> ・width400px ・height200px <写真のサイズ指定> ・width390px ・height190px ※これまでは、 写真のサイズが違うので、 css部分の#hoge img で、 画像の大きさを強制指定してました。 出来れば、 画像の大きさは、html側で指定せずに、 css側で調整したいです。 ムリなら、html側で大きさ指定します。 div枠にcss設定できれば早いかと思いますが、 それが出来ないため(img タグにしかcss指定不可)の相談です。 よろしくお願いします。

    • ベストアンサー
    • HTML
  • 写真の上0pxにタイトルバーをhtmlで作りたい

    HTMLで写真の真上にhtmlで作った色付き棒の中に文字を表現したいです。 それを3列ずつ複数行作成したいです。 ・写真と写真の横幅の間は30pxあける。 ・上下は50pxあける。 ・ウインドウ幅の中央に常に表示 ・ウインドウが写真よりも狭くなってもレイアウトが崩れない このようにしたいと思って、自分で作ってみましたが、 まったくうまくできませんでした。 どのようにすればいいのか教えて下さい。 よろしくお願いいたします。 ~~~~~~ HTML ~~~~~~~ <link href="aa.css" rel="stylesheet" type="text/css" /> <div class="aaa"><!-- と汎用ブロックで囲んで --> <div class="bbb">いのしし<div> <div class="bbb">たつ<div> <a href="" ><img src="" alt="" width="350" height="270" /></a> <a href="" ><img src="" alt="" width="350" height="270" /></a> <div class="ccc">うさぎ<div> <div class="ccc">とら<div> <div class="ccc">たぬき<div> <a href="" ><img src="" alt="" width="232" height="166" /></a> <a href="" ><img src="" alt="" width="232" height="166" /></a> <a href="" ><img src="" alt="" width="232" height="166" /></a> </div> ~~~~~~ CSS ~~~~~~~ @charset "Shift_JIS"; a img{ border:none; } div.aaa{ margin-top:0px; width:760px; margin-left:auto; margin-right:auto; text-align:center; } div.bbb{ background-color: #ffcc66; width: 350px; height: 30px; } div.ccc{ background-color: #ffcc66; width: 232px; height: 30px; font-size: 20px; font-color: }

    • ベストアンサー
    • HTML
  • スタイルシートのwidthについて

    <style type="text/css"> #hoge{border:solid 1px black;width:100px;margin:0;} </style> <div id="hoge> </div> このようにdivタグにスタイルシートをつけるとなぜか縦の幅ができてしまいます。 width:100をなくせばただの線になるのですがwidthをつけるとどうして 縦幅ができてしまうのでしょうか? hightをつけてるのはまだしもwidthをつけただけじゃ横の長さが決まるだけで縦は0だと思ったのですが違うのでしょうか? ブラウザはIE6で見ました。

    • ベストアンサー
    • HTML
  • スタイルシートに関しての質問です。margin0 padding0と指定し居るのに、変なスペースが入ってしまいます。。。

    スタイルシートで、 *{ padding:0; margin:0; } img{ padding:0; margin:0; } と指定しているのですが、なぜか画像でへんなスペースが入ってしまいます。どうしてでしょうか? ソースは下記の通りです。 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <head> <META http-equiv=Content-Type content="text/html; charset=Shift_JIS"> <META content="新築マンション,賃貸,敷金ゼロ,礼金ゼロ,ペット可,内覧可能,水商売可,風俗可,東京,都内,マンション,アパート,一戸建, name=keywords> <title>株式会社</title> <link href="css/mainstyle.css" rel="stylesheet" type="text/css"> </head> <body> <div id="wapper"> <div id="head"><img src="img/forward_rogo.gif" width="250" height="56" border="0" ></div> <div id="sidememu"> <table width="150" border="0" cellpadding="0" cellspacing="0" > <tr> <td><a href="#"><img src="img/menu1.gif" width="150" height="40" border="0"></a></td> </tr> <tr> <td><a href="#"><img src="img/menu13_h.gif" width="150" height="40" border="0"></a></td> </tr> <tr> <td><a href="#"><img src="img/menu5_h.gif" width="150" height="40" border="0"></a></td> </tr> <tr> <td><a href="#"><img src="img/menu4.gif" width="150" height="40" border="0"></a></td> </tr> <tr> <td><a href="#"><img src="img/menu11_h.gif" width="150" height="40" border="0"></a></td> </tr> <tr> <td><a href="#"><img src="img/menu10_h.gif" width="150" height="40" border="0"></a></td> <tr> <td><a href="#"><img src="img/menu3.gif" width="150" height="40" border="0"></a></td> <tr> <td><a href="#"><img src="img/menu9_h.gif" width="150" height="40" border="0"></a></td> <tr> <td><a href="#"><img src="img/menu6_h.gif" width="150" height="40" border="0"></a></td> <tr> <td><a href="#"><img src="img/menu8_h.gif" width="150" height="40" border="0"></a></td> </tr> </table> </div> <div id="main"> <div id="flash-a"> <img src="img/dammy.gif" width="650" height="150" border="0"> </div> <div id="main-1"> <img src="img/top_1.gif" width="650" height="40" border="0"> </div> </div> </div> </body> </html> cssは、 /* CSS Document */ *{ padding:0; margin:0; } img{ padding:0; margin:0; } body{ margin-left:auto; margin-right:auto; text-align:center; } #wapper{ width:820; } #head{ margin-top:20px; text-align:left; border-bottom:2px #000099 solid; } #sidememu{ margin-top:20px; background-color:#F00; float:left; } #main{ margin-left:10px; margin-top:20px; float:right; } です。すみません。教えてください!

  • CSSでの画像の自動縮小について

    あるホームページを作成しているのですが、ブラウザを縮小した時、画像を自動で縮小したいのですがうまくいきません。 テーブルのレイアウトを崩したくないので、幅は固定したまま、かつ画像はブラウザサイズによって自動縮小にするようにしたいのですが、どうやってもうまくいきません。 ソースコードは下の通りです。 やはり、フレームレイアウト(waku)と、テーブルの幅を可変(パーセント表示)にしないと、画像の伸縮は難しいのでしょうか。 **** HTML部分(CSSは外部) ***** <body> <div id="waku"> <div id="a"> <table border="1" width="100%"> <tr> <td>ああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああ</td> </tr> <tr> <td> <div id="b"> 画像の説明 <img src="01.jpg"> </div> </td> </tr> </table> </div> <div id="c"> <table border="1" width="100%"> <tr> <td>ああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああ</td> </tr> </table> </div> </div> </body> **** style.css(CSS部分) ***** #waku { width:900px; border: 1px solid #000; } #a { width:800px; } #b img { max-width: 600px important!; width: 100% important!; max-height: 300px important!; height: 100% important!; } #c { width:800px; }

    • ベストアンサー
    • HTML
  • widthを設定してもテキストを流すと幅が広がってしまう

    トップページの左ナビの部分です。 1行2列の大テーブルの、左のtdが左ナビになっています。 ↓こんな感じです。 <table width="800"> <tr><td>左ナビ</td></tr> <tr><td>内容</td></tr> </table> この左ナビ部分を更に<div>で区切って、 その<div>の中に改行なしのテキストを流し込むと大テーブルの幅800まで広がってしまいます。 幅170pxの指定方法は、<div class="navi">というふうにwidth指定を含むcssをつけています。 cssではダメなのかと、<div>なしで tdのwidth指定だけにしてみてもダメでした。 方法を教えてください。

  • imgタグについて

    imgタグについて http://okwave.jp/qa/q5970749.html この件で質問させていただいてましたが、気になる事がありましたのでアドバイスください。 最初のタグーーーーーーーー img{border: 0; vertical-align:bottom;} ーーーーーーーーーーーーー <img src="/img/space.gif" width="100%" height="10px"/> IE8でimgタグのvertical-align:top;が反応して1px×1pxの透明の画像が縦に10px以上伸びてしまっていました。 ↓そこで、このように分ければいいとアドバイスいただきましたが、 .img1{border: 0;} .img2{border: 0; vertical-align:bottom;} imgタグは他のページでも使用しているため img{border: 0; vertical-align:bottom;}は変更出来ませんでした。 そこで、img2{border : 0;} とcssに書き込み <img2 src="http://www.itumonavi.jp/img/space.gif" width="100%" height="10px" /> にするとバグは解消されました。 ですが、html的に<img2~ というタグは見た事無いのですが、これは使っておいても問題ないのでしょうか? もし他に方法がございましたら教えてください。 【css】-------------------------- img { border: 0; vertical-align:top; } .img1 { border: 0; } 【html】-------------------------- <table width="635" height="31" border="0" cellspacing="0" cellpadding="0" bgcolor="#999999"> <tr> <td width="635">タイトル</td> </tr> </table> <table width="635" border="0" cellspacing="0" cellpadding="0"> <tr> <td colspan="3"><img src="/img/space.gif" width="100%" height="10px" class="img1"/><!-- スペース --></td> </tr> <tr> <td width="170" rowspan="2"><img src="img/sample.gif" width="170" height="170" alt="test" /></td> <td width="20" rowspan="2"><img src="img/space.gif" width="20" height="170" class="img1" /><!-- スペース --></td> <td width="445" style="vertical-align:text-top"><img src="img/space.gif" width="100%" height="5" class="img1" /><!-- スペース -->コピー<div class="guide-line"></div><!-- ライン --> </td> </tr> </table>

    • ベストアンサー
    • HTML