
sample.gifのような形をつくりたいのですが
うまくいかず詰まっています。
1つ1つの青い四角はボタンです。
※アニメーションgifで
さらにロールオーバーボタンにする予定です;_;
大きくdivで囲って(赤い四角)
それをそれをposition:relativeに。
さらに1つ1つのボタン(青い四角)をdivで囲って
各ボタンをposition: absoluteで
位置を設定。
というやり方は間違っていますか?
1つの親ボックスの中に複数のabsoluteがあると
ダメなのでしょうか?
まだまだ初心者に毛が生えた程度なので
position: absoluteをよく分かっておらず
ネットで調べて見よう見まねでやっています。
もしこっちのやり方の方が良いよ。というような
やり方があれば、よければそちらも教えてください。
こんな形にしたのを後悔しているのですが
決まってしまったので、何とか作りたいのですが…
よろしくお願いします。

No.1ベストアンサー
- 回答日時:
とっても簡単ですが、そのまえに発想方法が根本から間違っています。
HTMLは、あくまで文書構造を記述するものでどのようにプレゼンテーション(表現)するかとは切り離さないとだめです。
>大きくdivで囲って(赤い四角)それをそれをposition:relativeに。
>さらに1つ1つのボタン(青い四角)をdivで囲って各ボタンをposition: absoluteで
>位置を設定。
自体が間違いです。それをするから先に進めないし、将来デザインを変えようにもHTMLから書き直さなきゃならない。
仕様書には
『スタイルシートはこれらの問題を解決すると同時に、HTMLにおける制限されたプレゼンテーション機構に取ってかわる。 ( http://www.asahi-net.or.jp/%7Esd5a-ucd/rec-html4 … )』
『構造とプレゼンテーションの分離 ( http://www.asahi-net.or.jp/%7Esd5a-ucd/rec-html4 … )』
と様々なところで指摘されている。そもそもHTMLは、
【引用】____________ここから
HTMLは、どんな環境からもWebの情報を利用できるようにすべきだという方針の下に開発されている。例えば、様々な解像度や色深度のグラフィックディスプレイを持つPCや、携帯電話、モバイル機器、音声入出力機器、帯域が広いコンピュータや狭いコンピュータ、等の環境である。
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ここまで[Introduction to HTML 4 (ja)( http://www.asahi-net.or.jp/%7Esd5a-ucd/rec-html4 … )]より
前置きが長くなりましたが、それが、もしナビゲーションリストでしたら、
<div class="nav" id="siteMap">
<ul>
<li><a href="/">Top</a></li>
<li><a href="/news">NEWS</a></li>
<li><a href="/info">Info</a></li>
<li><a href="/product">Product</a></li>
<li><a href="/service">Service</a></li>
<li><a href="/support">Support</a></li>
<li><a href="/profile">Profile</a></li>
<li><a href="/contact">Contact</a></li>
</ul>
</div>
というマークアップになるはずです。もちろん一つ一つにサブメニューがあっても構いません。
<li><a href="/product">Product</a>
<ul>
<li><a href="/product/hardware">Hardware</a></li>
<li><a href="/product/software">Software</a></li>
</ul>
</li>
とね・・・。
それを横に並べようが、縦に並べようが、プルダウンメニューにしようが、円形や三角形に並べようが、縦や横のスライドメニューにしようが、あるいは、中心に画像を表示させようが、アニメーションGIFを使おうが・・それはスタイルシートの問題です。
★大事なことは、HTMLには文書構造だけを記述するということ。この、もっとも大事な基本ができていないようです。
下記にサンプルのHTMLをあげておきます。このナビゲーション項目を円形に並べる方法を考えてみてください。随分と楽になるはずです。
★Another HTML-lint 5 ( http://www.htmllint.net/html-lint/htmllint.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">
<!--
-->
_</style>
</head>
<body>
_<div class="header">
__<h1>タイトル</h1>
__<div class="nav" id="siteMap">
___<ul>
____<li><a href="/">Top</a></li>
____<li><a href="/news">NEWS</a></li>
____<li><a href="/info">Info</a></li>
____<li><a href="/product">Product</a>
_____<ul>
______<li><a href="/product/hardware">Hardware</a></li>
______<li><a href="/product/software">Software</a></li>
_____</ul>
____</li>
____<li><a href="/service">Service</a></li>
____<li><a href="/support">Support</a></li>
____<li><a href="/profile">Profile</a></li>
____<li><a href="/contact">Contact</a></li>
___</ul>
__</div>
_</div>
_<div class="section">
__<h2>見出し</h2>
__<p>・・・</p>
_</div>
_<div class="footer">
__<h2>文書情報</h2>
__<dl class="documentHistry">
___<dt id="FIRST-PUBLISHED">First Published</dt>
___<dd>2012-08-18</dd>
___<dt id="LAST-MODIFIED">Last Modified</dt>
___<dd>2012-08-18 09:00:00 (JST)</dd>
__</dl>
__<address>© ORUKA1951 2012 - 2015 All Rights Reserved mailto:*****</address>
_</div>
</body>
</html>
ORUKA1951様
すごく丁寧に回答して頂き本当に本当にありがとうございます。
書いてもらっているHTMLを元に、CSSを調べながら円になるレイアウトを試していたら
お礼が遅くなってしまいました。すみません。
アドバイス頂いた内容を読めば読む程、自分の知識が間違っている&足りないことが
よく分かりました…
まだ自分で書いたCSSだとうまくいっていないですが、取り急ぎお礼を書き込みさせて頂きます!
いつかORUKA1951様みたいに、スラスラHTMLを書けるようになりたいです。(>_<)
No.3
- 回答日時:
リンクに背景画像を指定する場合は、
a[href="/service"]{background:url(./images/background/service.gif);}
と要素セレクタで指定するので良いです。
そうすることで、HTMLまたはスタイルシートで順番や位置を変更しても書き直す必要がありません。
ORUKA1951様回答ありがとうございます!
CSSのサンプルコードも書いて頂きとても参考になりました。
まさに背景画像を配置したかったので、こちらの回答もとても助かりました。
そして、とても時間がかかってしまいましたが…
ORUKA1951様のコードをまねしながら何とか円のレイアウトができました!(:_;)
本当に本当にありがとうございました!
No.2
- 回答日時:
時間がちょっとだけ取れたので、CSS2.1の範囲内で簡単なサンプルを書いてみました。
子セレクタはあえて使っていません。そのほうが少しだけ文字数が減る。スタイルシートもわかりやすいと思います。なぜなら、文書構造にしたがって書いてあるからです。そのためにはHTMLがきちんと書かれている必要があります。
★スマートホンでもそのまま利用できるリキッドスタイルです。
★印刷には別のスタイルが適用されます。印刷プレビューで確認。
★W3C CSS 検証サービス ( http://jigsaw.w3.org/css-validator/#validate_by_ … )
で検証済みです。
<style type="text/css" media="screen">
<!--
html,body{margin:0;padding:0;}
body{width:100%;height:100%;}
div.header div.nav{width:80%;height:80%;min-width:640px;border:gray solid 1px;left:10%;top:10%;position:absolute;text-align:center;}
div.header div.nav ul,div.header div.nav ul li{display:block;list-style-type:none;margin:0;padding:0;}
div.header div.nav ul li{width:15%;position:absolute;line-height:3em;}
div.header div.nav ul li a{display:block;width:100%;height:100%;text-decoration:none;border:outset 3px gray;}
div.header div.nav ul li a:visited{background-color:rgb(180,180,0);}
div.header div.nav ul li a:link{background-color:yellow;}
div.header div.nav ul li a:hover,div.header div.nav ul li a:focus{background-color:fuchsia;}
div.header div.nav ul li a:active{background-color:red;color:green;border-style:inset;}
div.header div.nav ul li{left:44%;top:2%;}
div.header div.nav ul li+li{left:70%;top:14%;}
div.header div.nav ul li+li+li{left:82%;top:42%;}
div.header div.nav ul li+li+li+li{left:70%;top:70%;}
div.header div.nav ul li+li+li+li+li{left:42%;top:82%;}
div.header div.nav ul li+li+li+li+li+li{left:14%;top:70%;}
div.header div.nav ul li+li+li+li+li+li+li{left:2%;top:42%;}
div.header div.nav ul li+li+li+li+li+li+li+li{left:14%;top:14%;}
div.header div.nav ul li ul{display:none;position:relative;}
div.header div.nav ul li ul li{width:100%;line-height:1.2em;left:0;position:static;}
div.header div.nav ul li:hover ul{display:block;}
div.section{position:absolute;top:90%;left:0;width:60%;}
div.footer{position:absolute;top:90%;width:40%;right:0;}
-->
</style>
<style type="text/css" media="print">
<!--
div.header div.nav ul li a{color:black;text-decoration:none;}
div.header div.nav ul li a:after{
content:"\A → http://hoge.com"attr(href);
white-space:pre;
}
-->
</style>
★最後に、コーディングのもっとも肝心要なことは、文書構造とプレゼンテーションを分離することです。そうすることで、
・端末ごとにページを作成する必要はなくなります。
・デザインを変えたくなってもスタイルシートだけ書き換えれば済みます。
しかも、わかりやすいスタイルシートになるのでいちいちHTMLを開く必要もなくなります。ましてや書き直す必要もありません。
class名は、『id属性及び class属性と併用することで、文書に構造を付加するための一般機構を提供する ( http://www.asahi-net.or.jp/%7Esd5a-ucd/rec-html4 … )』ためのものです。デザインのためではありません。私が使用しているclass名は、HTML5の「新しい要素 ( http://standards.mitsue.co.jp/resources/w3c/TR/h … )」名を使っています。それは、HTML4.01の時代の『文書に構造を付加するため』を理解している人が少なかったから新しい要素になったのです。
したがって、私のサンプルは<div class="header">→<header>,<div class="nav">→<nav>とするだけで、そのままHTML5になります。
あなたが挑戦してきたHTMLやCSSと比較して、そのシンプルさが、ご理解いただけるとよいのですが・・
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- HTML・CSS HTML、cssのatomつぅーやつで 課題Ex1ってやつを表示させたいのですが、 私は課題Ex1が 2 2022/12/15 16:56
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/30 09:10
- JavaScript vertical sliderをautoplayしたい 2 2022/08/25 14:47
- JavaScript 画像の表示位置 3 2022/12/23 08:25
- HTML・CSS 吹き出し 下記の吹き出しのスタイルシートについて 下記のスタイルシートは左側にアイコンがでる使用にな 1 2022/11/12 17:55
- JavaScript html5に変えるとスライドショーが消えてしまった。 3 2022/03/26 19:53
- HTML・CSS img と p を縦中央に配置したいのですがうまくいきません。 2 2023/01/12 14:38
- HTML・CSS htmlとcssで吹き出しの中に文字を置きたいのですが、 html 〈div class bb〉 〈 3 2023/02/04 22:44
- HTML・CSS ヘッダーの画像にメインエリアがかぶってしまいます 1 2022/11/28 14:06
- JavaScript 画面に表示したらアニメーションを開始したい 3 2023/01/13 15:38
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
複数の文字を一度に置換ってで...
-
ページを開いているときのリン...
-
HTMLについて
-
番号付きリスト(<Ol><Li>・・...
-
divタグ内のコンテンツが重なっ...
-
リストの数字のフォントサイズ...
-
ulタグやliタグの中でbrタグ...
-
画像にリンクを張ると画像がず...
-
疑似クラス :activeが効きません
-
イメージマップと画像のスライ...
-
CSSでメニューボタンを横一列に...
-
htmlの<ol>タグで、数字などを...
-
ol要素の番号とリスト項目の離...
-
複数行にまたがる括弧を表示し...
-
cssで、入れ子になったリストに...
-
URLにアクセスした際に指定した...
-
liタグの中に<p>タグやら<dl>を...
-
<li>で改行する横並びのメニュー
-
input みたいなボタン
-
【至急】ul li 行間調整ができ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
html/cssの、navを2段にする...
-
リストマーカーをボックス内に...
-
liタグの中に<p>タグやら<dl>を...
-
ulタグやliタグの中でbrタグ...
-
複数行にまたがる括弧を表示し...
-
html <ul></ul>の並びで一行空...
-
ulとliで囲った文字の一部を変...
-
HTMLで組織図を作成する方法
-
list-style-type部分だけ大きく...
-
htmlの<ol>タグで、数字などを...
-
テーブル内のプルダウンの下に...
-
html <li>の中の文字一部に色を...
-
<ul><li></li></ul>にするメリ...
-
番号付きリスト(<Ol><Li>・・...
-
divタグ内のコンテンツが重なっ...
-
リストの数字のフォントサイズ...
-
レスポンシブWebデザインでリン...
-
背景色を行ごとに変えるには?
-
Dreamweaverで、ul要素の下に写...
-
ページを開いているときのリン...
おすすめ情報