• ベストアンサー

<BODY>~</BODY> の中に <STYLE type="text/css">~<STYLE>

スタイルシートのことで質問があるのですが、 wikiに似たものでxoopsと言うものがあります。 現在このxoopsでサイトを構築しているのですが、サイトの見栄えを決定する「テーマ」と言うものがあります。 この「テーマ」はhtmlとcssで出来ています。 コンテンツの編集にはxoopsにインストールしたエディタ(fckeditor)を使っているのですが(つまりweb上でエディットしています)、その中でスタイルを使う必要が出てきました。 具体的には、1ページの中に表をいくつか入れたいのですが、1つ目は表の幅を画面の100%に、2つ目は画面の50%にしたいのですが、2つ目の表も幅が100%になってしまいました。 原因は「テーマ」に使われているcssに   table {width:100%; ~~ と記述されていることでした。 本来ならば、 <TABLE style="width:50%;">  <TBODY>   <TR>    <TD style="border: 1px #0000ff dotted;">カラム1</TD>    <TD style="border: 1px #0000ff dotted;">カラム2</TD>   </TR>   <TR>    <TD style="border: 1px #0000ff dotted;">カラム3</TD>    <TD style="border: 1px #0000ff dotted;">カラム4</TD>   </TR>  </TBODY> </TABLE> のように書くべき何でしょうが、以下のように書いてもうまく表示されました。 (IE8、GoogleChrome、Firefoxで確認) <STYLE type="text/css"> #sample1 {width:50%; } #sample2 {border: 1px #0000ff dotted; } </STYLE> <TABLE id="sample1">  <TBODY>   <TR>    <TD id="sample2">カラム1</td>    <TD id="sample2">カラム2</td>   </TR>   <TR>    <TD id="sample2">カラム3</td>    <TD id="sample2">カラム4</td>   </TR>  </TBODY> </TABLE> つまり<BODY>~</BODY>のなかにスタイルを記述したのですが、本来はダメですよね? 何か、正当ないい方法はありませんでしょうか? ちなみに、テスト表示したxoopsのサイトをブラウザの「ソースを表示」で見てみると、上記の前後に <!-- content (body) --> <a name="top_of_pico_body" id="top_of_pico_body"></a> <div class="pico_body" id="pico_body">   (省略) </div> が付いていました。

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

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

  • ベストアンサー
  • 12345963
  • ベストアンサー率55% (11/20)
回答No.4

外部ファイルに書くのも、ヘッダの中に書くのも、ボディ内に書くのも全部正解です。矛盾した時何を適用するかの優先度と関係してきます。そのあたりを考えて、使いやすい用に選んでいくと管理がグッと楽になります。 ココでは書ききれないので、説明されたページを紹介します。まずは、解からなくても一度目を通し、次に精読してみてください。そして、目的によって、各場所を決めてください。 http://www6.plala.or.jp/go_west/nextcss/ref/basic/cascade.htm そして、詳細度が同じ時のみ、最後に書かれた値が適用されます。また、紹介したページには書かれていませんが、タグにも詳細度の区別があります。例えば、*は0点、fontも0点です。ややこしいですが、便利な物ですので、そんなものがある程度に、頭の隅に入れて置かれるといいと思います。

Take-bon
質問者

お礼

ご回答ありがとうございます。 xoopsでは(xoopsだけじゃないでしょうけど)サイト構築にはcssの勉強は必須なようなので、精読しておきます^^ xoops意外にも役に立つでしょうし。

その他の回答 (3)

  • naokita
  • ベストアンサー率57% (1008/1745)
回答No.3

>この外部スタイルシートをいじると全体のレイアウトが崩れるため触りたくないのです。 それなら、そのCSSを書き替えずに追加すれば良い。その同じCSSファイルの一番下にでも絶対混同しない様な id , class 名にすれば、崩れる事は無い。 .sample1-abcdef {width:50%; } .sample2-abcdef {border: 1px #0000ff dotted; } ----------------------------------------------- そもそもxoopsって昔からあるけど <head></head>内に書けば、良いだけなんじゃないの? #1さんも、そうアドバイスしてますよ。 何故 body 内に拘るのかわかりませんが、それがCSSのルールなので・・・ 現状は、単にブラウザが勝手に解釈してくれているだけであって、過去や将来のブラウザでも表示してくれるとは限りません。 そんな条件で強引な他の方法は、・もう一枚CSSをつくる。とか、 ・width="50%"にする ※CSSを無視するならこれの方がマシ。 ・<body></body>を削除する。※styleを書くよりマシ。 Strict以外なら大丈夫だと思うけど。結局意味がない。 ----------------------------------------------- <html> <head> <style type="text/css"><!-- .sample1 {width:50%; } .sample1 td {border: 1px #0000ff dotted; } --></style> </head> <body> <table class="sample1"> <tbody> <tr> <td>カラム1</td> <td>カラム2</td> 以下省略。

Take-bon
質問者

お礼

naokitaさん、ありがとうございます。 あれからも色々調べてみて、結局naokitaさんの仰るような >そのCSSを書き替えずに追加すれば良い。 >その同じCSSファイルの一番下にでも絶対混同しない様な id , class 名にすれば、崩れる事は無い。 この方法でやることにしました。 具体的には今使っているテーマを丸ごとコピーしてhtmlやcssを書き換え、管理画面からコピー&改造したテーマを適用させます。 どうも、オリジナルのテーマ用ファイルを直接触って後々面倒なことになるのが嫌だったので、なんとか出来ないかと思っていたのですが、結局は「自分用のテーマを作ってしまえ!」と言うことになりました。 ありがとうございました。

  • OKwebb
  • ベストアンサー率44% (92/208)
回答No.2

#1の補足です。 > htmlとスタイルが混合しているのが良くないのは、 > ・XHTML はこの記述をすべきではないとされている。 > ・メンテナンス効率が悪くなる > と言うことでいいのでしょうか? でいいと思います。 htmlはドキュメント内容をcssには見た目を書くってのが最近の流れです。 > この外部スタイルシートをいじると全体のレイアウトが崩れるため触りたくないのです。 ?? <HEAD> 省略 <STYLE type="text/css"> .sample1 {width:50%; } .sample2 {border: 1px #0000ff dotted; } </STYLE> </HEAD> では駄目ですか?

Take-bon
質問者

お礼

何度もありがとうございます。 説明が下手で申し訳ありません^^; コンテンツを編集するweb上のエディタ(htmlソースを直に書くモードにして)の中でhtmlを書いていたのです。 その中で<HEAD>~</HEAD>のなかに<STYLE>~</STYLE>の形にすると、結果的に以下のようなhtmlになってしまうのです。 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja"> <head>     (~~省略~~) <link rel="stylesheet" type="text/css" media="screen" href="(省略)/xoops.css" /> <link rel="stylesheet" type="text/css" media="screen" href="(省略)/themes/cube_default/style.css" />     (~~省略~~) </head>     (~~省略~~) <!-- content (body) --> <a name="top_of_pico_body" id="top_of_pico_body"></a> <div class="pico_body" id="pico_body"> ---------------------------ここからが私が書いたhtml------------------------------ <style type="text/css"><!-- .sample1 {width:50%; } .sample1 td {border: 1px #0000ff dotted; } --></style> <table class="sample1">   <tbody>     <tr>       <td class="sample2">カラム1</td>       <td class="sample2">カラム2</td>     </tr>     <tr>       <td class="sample2">カラム3</td>       <td class="sample2">カラム4</td>     </tr>   </tbody> </table> ---------------------------ここまでが私が書いたhtml------------------------------ </div>     (~~以下省略~~) <HEAD></HEAD>が消えてますし・・・^^;; しかし結局は回答番号:No.3のnaokitaさんの回答に書いたような方法で実現することになりました。 お陰様でスタイルシートのこともxoopsのことも勉強になりました^^ ありがとうございました。

  • OKwebb
  • ベストアンサー率44% (92/208)
回答No.1

えーと、ちょっと質問の意図していることと違ったらごめんなさい。 まず > 本来ならば、 としている方は、htmlとスタイルが混合しているのであまりよいとはいえません。 次に > 以下のように書いてもうまく表示されました。 の方は ・STYLEタグがBODYタグに含まれる点 ・id属性に同一の値が設定されている点 が正しくありません。 この STYLEタグをHEADタグに、 id属性をclass属性に #を.に変更すればいいのではないでしょうか。

Take-bon
質問者

お礼

>> 本来ならば、 >としている方は、htmlとスタイルが混合しているのであまりよいとはいえません。 ちょっと調べてみました。 htmlとスタイルが混合しているのが良くないのは、 ・XHTML はこの記述をすべきではないとされている。 ・メンテナンス効率が悪くなる と言うことでいいのでしょうか? >・STYLEタグがBODYタグに含まれる点 が良くないのは理解出来ます。 >・id属性に同一の値が設定されている点 <STYLE type="text/css"> .sample1 {width:50%; } .sample2 {border: 1px #0000ff dotted; } </STYLE> <TABLE class="sample1">  <TBODY>   <TR>    <TD class="sample2">カラム1</td>    <TD class="sample2">カラム2</td> こうすべきでしたね。すみません^^; ただ「本来ならば」のところは、サイトの見栄えを決定する「テーマ」のhtml内で外部スタイルシートが指定されているのです。 この外部スタイルシートをいじると全体のレイアウトが崩れるため触りたくないのです。 (「テーマ」は他人が作ったもので、また、「テーマ」を入れ替えて簡単にレイアウトを変えることが出来るため、外部スタイルシートは触りたくないのです) ならば、<TABLE style="width:50%;"> のような混在で書くしかないのかなぁ・・・と、思った次第です。 でも、確かに混在して書くとメンテナンス性が良くないので、混在以外でなんとか<BODY>~</BODY>の中でスタイルを記述する方法が無いかと探しています。

関連するQ&A

  • Layerの中にあるリンクがmacで動作しません

    以下が友達に質問されたソースを簡略化した物です。layerを左右2段組みにしてますが、右のlayer内が全く反応しません。layerを使わなければできるのですが、この方法のどこが間違っているかが教えられなくて質問しました。よろしくお願い致します。 javascript~window.open省略 <DIV style="top : 61px; left : 356px; position : absolute; z-index : 1; width: 331px; height: 40px;" id="Layer2"> <DIV> <TABLE border="1" width="331" height="40"> <TBODY> <TR> <TD width="61" height="20">サンプル2</TD> <TD width="214"><A href="#">◆</A></TD> </TR> </TBODY> </TABLE> </DIV> </DIV> <DIV style="top : 61px;left : 24px; position : absolute; z-index : 3; " id="Layer5"> <DIV> <TABLE border="1" width="313" height="40"> <TBODY> <TR> <TD width="134" height="16">サンプル</TD> <TD width="141"><A href="#">◆</A> </TD> </TR> </TBODY> </TABLE> </DIV> </DIV>

    • ベストアンサー
    • HTML
  • ●tableをCSSで書き直すには(HTMLソース付き)

    いつも勉強させていただいております。 今回は質問をさせていただけないでしょうか。 上の表の枠のように少し立体感があるようにしたいと思います。 これを、CSSにしたいのですが、border-styleをいろいろ試しても同じようになりません。 どのようにすれば良いでしょうか? <html> <STYLE TYPE="text/css"> <!-- .TTT { border-style:ridge; padding:0px; border-width:1px; } --> </STYLE> <body bgcolor="#FF88FF"> <table width="270" border="1" cellpadding="0" cellspacing="0" > <tr> <td>こんな感じにしたいです。</td> <td>BBB</td> </tr> </table> <br> <table style="width:270px;" class="TTT"> <tr class="TTT"> <td class="TTT">なぜか、こんな感じになってしまいます。</td> <td class="TTT">DDD</td> </tr> </table> <br> </body> </html>

  • タグに直接書き込むスタイルシートを、外部あるいはページ内にわけるには?

    下記テンプレートソースですが、タグに直接書き込むスタイルシートになっています。 このソースを、外部あるいはhead内に設定するには、どういうわけ方をしたらいいですか? いろいろ自分で試したのですが、うまく表示されません宜しくお願いします。 <table><tbody><tr><td> <div style="border:1px solid #ff6699;background:#ffcccc;font-size:13px"><div style="padding:3px" align="center"> * ここにタイトル * </div><div style="border-top:1px solid #ff6699;background:#fff;padding:10px" align="left"> * ここに本文 * </div></div> </td></tr></tbody></table>

    • ベストアンサー
    • HTML
  • fieldsetについて

    スタイルシートに、 <style type="text/css"> <!-- fieldset { padding: 0.5em; margin: 0.5em; BORDER-BOTTOM: #999999 2px dotted; BORDER-LEFT: #999999 2px dotted; BORDER-RIGHT: #999999 2px dotted; BORDER-TOP: #999999 2px dotted;} --> </style> と記述し、 <body> <fieldset> <legend>test</legend> <table> <tr> <td>テスト</td> </tr> </table> </fieldset> </body> とやっても、fieldset上の線がドットになりません。線の太さを1PXにするとなるのですが、どちらにせよlegendの”test”にも線がかぶってしまいます。 どうすればいいでしょうか??記述が間違っていればご指摘ください。 IE6を使っています。

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

    <HTML> <HEAD> <TITLE></TITLE> </HEAD> <BODY> <TABLE border="1"> <TBODY> <TR> <TD><IMG src="i1.gif" width="64" height="64" border="0"></TD> <TD><IMG src="i2.gif" width="64" height="64" border="0"></TD> </TR> <TR> <TD><IMG src="m1.gif" width="32" height="32" border="0"></TD> <TD><IMG src="m2.gif" width="32" height="32" border="0"></TD> </TR> </TBODY> </TABLE> </BODY> </HTML> こういったTableを使った表がある場合、スタイルシートで示すことは出来ますか?もし出来るならそのソースを教えてください。 また、こういったTableのホームページを一括でスタイルシートに変換できるソフトが存在していたら教えてください。 それと、この行数がかなり大きくなると、Tableよりも軽く表示がされると聞いたのですが本当でしょうか? ご返答、何卒、よろしくお願い致します。

    • ベストアンサー
    • HTML
  • CSSのtableについて【CSSが無かったのでHTMLで…。】

    <html> <head> <title>test</title> <style type="text/css"> <!-- table { border : 1px #000000 solid; text-align : center; } td,th { border : 1px #000000 solid; width : 100px; } --> </style> </head> <body> <table> <tr> <td rowspan="2"> 1 </td> <td> 3 </td> </tr> <tr> <td> 2 </td> </tr> <tr> <td colspan="2"> 3 </td> </tr> </table> </body> </html> このように入力をした場合、一番下にできるテーブル(3)2つ結合しているにもかかわらず、1つ分?の状態で文字がcenterになってしまいます。結合した(2つの)真ん中に表示させるにはどうしたらいいですか?? 教えてください☆

    • ベストアンサー
    • HTML
  • HTML

    HTML ホームページにスピンボックスというものを設置したんです。いかがその記述なんですが、下記のURLのページをご覧ください回転して出てくるのがそれです。 今は一回閉じてしまうとその後は出てこないんですが、 これを三分に一回出てくるように変えたいんです。できるんでしょうか?どこをどういじればいいんですか? <DIV id=sp1107739598196spbox style="Z-INDEX: 75; FILTER: progid:DXImageTransform.Microsoft.Matrix(sizingMethod='auto expand'); LEFT: -1000px; VISIBILITY: hidden; POSITION: absolute; TOP: -1000px"> <TABLE style="BORDER-RIGHT: #000000 2px dotted; BORDER-TOP: #000000 2px dotted; BORDER-LEFT: #000000 2px dotted; BORDER-BOTTOM: #000000 2px dotted" cellSpacing=0 cellPadding=0 border=0> <TBODY> <TR> <TD title=Close style="CURSOR: hand" onclick=sp1107739598196close() vAlign=center align=right bgColor=#000000><SPAN style="FONT-SIZE: 8pt; COLOR: #ffffff; FONT-FAMILY: verdana">閉じる ×</SPAN> </TD> </TR> <TR> <TD><IFRAME style="WIDTH: 380px; HEIGHT: 350px" border="0" src="pop.html" frameborder="0" allowTransparency></IFRAME> </TD> </TR> </TBODY> </TABLE> </DIV> http://www.geocities.jp/god80or20/downline/down2/downlineinr...

    • ベストアンサー
    • HTML
  • スタイルシートをhead内で定義したい

    下のテーブルのようにしたいんですが、上のテーブルはすきまができています。 このすきまをなくすために、<STYLE>の中を修正してください。 <TABLE>内は変更せずに<STYLE>だけでできるはずです。 <HTML> <HEAD> <STYLE> table.ccc{border:solid;border-color:#bbbbcc} td.ccc{border:solid;border-color:#bbccbb} .ccc th{border:solid;border-color:#ccbbbb} </STYLE> </HEAD> <BODY> <TABLE class="ccc"> <TR class="ccc"> <TH>名前</TH> <TH>住所</TH> </TR> <TR class="ccc"> <TD class="ccc">太郎</TD> <TD class="ccc">東京都新宿区</TD> </TR> <TR class="ccc"> <TD class="ccc">花子</TD> <TD class="ccc">沖縄県那覇市</TD> </TR> </TABLE> <br> <TABLE cellspacing=0 style="border:solid 4px #ddddee"> <TR> <TH style="border:solid 4px #eedddd">名前</TH> <TH style="border:solid 4px #eedddd">住所</TH> </TR> <TR> <TD style="border:solid 4px #ddeedd">太郎</TD> <TD style="border:solid 4px #ddeedd">東京都新宿区</TD> </TR> <TR> <TD style="border:solid 4px #ddeedd">花子</TD> <TD style="border:solid 4px #ddeedd">沖縄県那覇市</TD> </TR> </TABLE> </BODY> </HTML>

  • cssで<div>にpaddingを指定したとき

    下のように、cssで<div>にwidth720px、padding10px,background-color: #00FFFF;と指定して、 IE6とoperaで表示してみたところ、widthが740px、padding10pxになってしまいます。 divの下に740pxのテーブルをおいて確認してみました。 これは、こういうものと、思うしかないのでしょうか? また、こうなるのは、私だけなのでしょうか? <style type="text/css"> <!-- #contents { width: 720px; padding: 10px; background-color: #00FFFF; } --> </style> </head> <body> <div id="contents"> あああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああ </div> <table width="740" border="0"> <tr> <td bgcolor="#0000FF">あ</td> </tr> </table> </body>

    • ベストアンサー
    • HTML
  • tableの外枠をCSSで表示させない方法

    HTMLで作ったテーブルの外枠の縦線をCSSで表示させないようにしたいのですが可能でしょうか? HTMLはさわらずにできる限りCSSでやりたいと思い、いろいろ試してみましたがうまくいきませんでした。 線種はsolidを使いたいです。 よろしくお願いいたします。 <html> <head> <title>css table</title> <style type="text/css"> <!-- table.sample { width:550px; height:auto; border:solid 1px; border-collapse:collapse; border-left:none; border-right:none; } .sample th { width:100px; border:solid 1px; } .sample tr { border:solid 1px; } .sample td { border:solid 1px; } --> </style> </head> <body> <table class="sample" frame="hsides"> <tr> <th scope="row">&nbsp;</th> <td>&nbsp;</td> <td></td> <td></td> </tr> <tr> <th scope="row">&nbsp;</th> <td>&nbsp;</td> <td></td> <td></td> </tr> <tr> <th scope="row">&nbsp;</th> <td>&nbsp;</td> <td></td> <td></td> </tr> <tr> <th scope="row">&nbsp;</th> <td>&nbsp;</td> <td></td> <td></td> </tr> <tr> <th scope="row">&nbsp;</th> <td>&nbsp;</td> <td></td> <td></td> </tr> </table> </body> </html>

    • ベストアンサー
    • CSS

専門家に質問してみよう