今年、ウェブサイトを立ち上げましたが、まだまだ初心者で少しずつでも上達したいと思い、今も毎日とはいきませんが勉強中です。
実は画像にポインターを持っていくと吹き出しが出るようにならないかと色々検索していたら
「今日はCSSだけでお手軽に吹き出しを作る方法」のサイトがありました。
(http://blog.asial.co.jp/1140)
そのサイトには吹き出しを作るときのソースを下記のように書いてありました。
1. <!DOCTYPE HTML>
2. <html lang="ja">
3. <head>
4. <meta charset="UTF-8">
5. <title></title>
6. <link media="all" rel="stylesheet" href="css/reset.css" type="text/css" />
7. <style type="text/css">
8. * {
9. box-sizing: border-box;
10. }
11.
12. .wrapper {
13. padding: 30px;
14. position: relative;
15. }
16.
17. .box {
18. position: relative;
19. background: #ccc;
20. height: 70px;
21. width: 100px;
22. margin-bottom: 20px;
23. border-radius: 50px;
24. }
25.
26. .box:before {
27. content: '';
28. position: absolute;
29. background: #ccc;
30. height: 20px;
31. width: 20px;
32. border-radius: 10px;
33. bottom: -20px;
34. left: 70px;
35. }
36.
37. .box:after {
38. content: '';
39. position: absolute;
40. background: #ccc;
41. height: 10px;
42. width: 10px;
43. border-radius: 5px;
44. bottom: -30px;
45. left: 90px;
46. }
47.
48. </style>
49. </head>
50. <body>
51. <div class="wrapper">
52. <div class="box">
53. </div>
54. </div>
55. </body>
56. </html>
これを参考にして最終的にcssファイルに次のように書き込みました。
.box{
position:relative;
background: lightcyan;
height:130px;
width:130px;
text-align:center;
padding:30px;
border-radius:100px;
display:none;}
.box:before{
content:'';
position:absolute;
background:lightcyan;
height:20px;
width:20px;
border-radius:10px;
bottom:100px;
left:-20px; }
.box:after{
content:'';
position:absolute;
background:lightcyan;
height:10px;
width:10px;
border-radius:10px;
bottom:100px;
left:-30px; }
a:hover .box {
display: block;
line-height : 20px;}
サイトのページには
<body>
<a style="cursor:pointer"><img src="asd3.png" alt="猫が御礼しているイラスト" width="170px" height="170px">
<div style="margin-top:-170px; margin-left:160px;">
<span class="box" style="color:red; font-family:HGS創英角ポップ体;">
今年も無事に<br>1年を<br>過ごす事が<br> できました。<br>嬉しかった<br> ニャ~。
</span> </div></a></body>
そうすると、下図のように、猫のイラストの上にポインターを持っていくと左図の表示が右図のようになり、思ったような表示になりました。
https://oshiete.xgoo.jp/_/bucket/oshietegoo/imag …
質問なのですが、最初は
8. * {
9. box-sizing: border-box;
10. }
11.
12. .wrapper {
13. padding: 30px;
14. position: relative;
15. }
を入れていたのですが
12. .wrapper {
13. padding: 30px;
14. position: relative;
15. }
は何ら影響がないみたいだったので削除しました。
一応表示は思ったようになったようだったのですが、よく見てみるとそれぞれのサイトのページの
<body>~</body>の幅が少し変化して、ページ全体の文字の表示や画像の配置にズレがしょうじていました。それで、 * { box-sizing: border-box; } を削除したらズレもなく表示もうまくいきました。
それでこの * はどういう意味かネットで調べましたがわかりませんでした。この8~10のソースの意味を教えて頂ければと思います。
また、12~15の .wrapper{・・・} 27、38の content: ''; の「””」もよく呑み込めません。出来れば合わせて教えていただければと思います。
それから <a style="cursor:pointer">・・・</a> の使用の仕方なのですが、私が10カ月ほど前に初級のWeb作成で習ったときは <a href="URL">・・・</a>や<a name"マーカー名">・・・</a> のような使い方だったのですが、今回色々試して <a style="cursor:pointer">・・・</a>としたら思ったようになりました。このような使い方でよいのでしょうか?また<a></a>だけでの使用も良いのでしょうか?
本当に未熟者の欲張った質問とは思いますが、出来るだけ解りやすく説明していただければ幸いと思います。
よろしくお願いします。 <m(__)m>
No.2
- 回答日時:
初心者にありがちなのですが、デザインに入れ込みすぎて、基本が抜けてしまっている。
そして、適当なサイトでソースを理解せず流用していく。
なんでもそうですが、基本からきちんと順を追って学ぶほうがはるかに早く上達するし、間違った道に迷いこまない。
単純に、メッセージを入れた段落があるので、それを吹き出しのように表示したい・・ということですよ。
20年前のHTML4.01の勧告以来、最も重視すべきは「構造とプレゼンテーションの分離( http://www.asahi-net.or.jp/%7Esd5a-ucd/rec-html4 … )」なのですよ。
この場合、HTMLは単純に
<p id="message">
<img src="./M.png" width="223" height="220" alt="首を傾げた猫"><span>今年も無事に<br>1年を<br>過ごす事が<br> できました。<br>嬉しかった<br> ニャ~。</span>
</p>
だけ、先でどのようにデザインしようが好きにできる。そもそも自分でもわかりやすい。
ので、メンテナンスも簡単になる。
CSSは
p#message{position:relative;width:160px;height:160px;padding:20px;background-color:yellow;float:left;}
p#message img{width:160px;height:auto;}
p#message span{display:none;color:red;width:100px;height:100px;border-radius:80px;left:200px;top:20px;padding:20px;text-align:center;}
p#message:hover:before,
p#message:hover:after,
p#message span{position:absolute;background-color:lightcyan;z-index:10;}
/* hover時 */
/* 疑似要素をつくる */
p#message:hover:before,
p#message:hover:after{content:"";display:block;}
/* 個別にサイズの指定 */
p#message:hover:before{width:10px;height:10px;border-radius:5px;left:150px;top:100px;}
p#message:hover:after{width:20px;height:20px;border-radius:10px;left:170px;top:80px;}
/* 隠していたものを表示 */
p#message:hover span{display:block;}
きちんと基礎から学びなおしましょう。それが最も早道なのですよ。
HTML: 基本的に文書構造しか書かない。最適な要素がない時に限ってdivやspanを使用し、classやidでその意味を補足する。
「DIV要素とSPAN要素は、id属性及び class属性と併用することで、文書に構造を付加するための一般機構を提供する。( http://www.asahi-net.or.jp/%7Esd5a-ucd/rec-html4 … )」
「ウェブ制作者は、 div 要素を、他に適切な要素がないときなど、最後の手段の要素として見なすことが、強く推奨されます。div 要素の代わりにもっと適切な要素を使うことは、読者にとってアクセシビリティ向上に、ウェブ制作者にとってメンテナンス性の向上につながります。( http://www.html5.jp/tag/elements/div.html )」
それによって、自在にデザインできますし、ユーザーエージェントごとにプレゼンテーションを変えたり、デザインを変更することも容易になる。
HTML 4.01 Specification (ja)( http://www.asahi-net.or.jp/%7Esd5a-ucd/rec-html4 … )
★参考にされたサイトの最も欠けている部分
Another HTML Lint - Gateway( http://www.htmllint.net/html-lint/htmllint.html )の右上のDATAでチェックしてごらんなさい。
CSS
きちんとセレクタ書きましょう。
p#message:hover span
段落要素のうち一意セレクタ(message)を持つものがhover(疑似クラス)したときの[子孫(半角スペース)」であるspan要素は・・・
ときちんと書いておくと、後々メンテナンスがとても楽でしょ。それによって詳細度もきちんと指定される。この場合詳細度は、112ですね。だから、詳細度が102p#message spanを上書きする。記述順にかかわらず。
少なくとも
Cascading Style Sheets Level 2 Revision 2 (CSS 2.2) Specification 日本語訳( https://momdo.github.io/css2/Overview.html )
の
4 構文と基本データ型
5 セレクター
6 プロパティ値とカスケーディング、継承の割り当て
は身に着けて取り掛からないとなりません。基本中の基本で、そのサイトは全くご存じないみたい。
こんなにシンプルで分かりやすいものになるはずです。
No.1ベストアンサー
- 回答日時:
■ * { box-sizing: border-box; }
ページ内の全ての要素/タグ(*) にて、箱型領域(box)の幅を計算する仕組みを変える。
https://developer.mozilla.org/ja/docs/Web/CSS/bo …
注意)
この指定をすると、ページ内の他の部分にて計算が狂い、デザインが崩れる可能性があり大変危険です。
適用範囲を限定したり、そもそも指定しない場合での width/height に変更するなどしてください。
■ .wrapper { position: relative; }
子孫要素で "position:absolute" を指定する際に必要となる「包含ブロック」を定義している。
https://developer.mozilla.org/ja/docs/Web/CSS/po …
■ .box:before { content:''; ... }
before/after で、吹き出しの小さい丸二つを描画しています。具体的には、
「文言が空で灰色のテキストフィールドを、縦横引き伸ばして角を丸くして表示」→ 灰色の丸
content:'' が無いと、「文言が無いので表示しなくて良い」と判断されてしまいます。
■ <a style="cursor:pointer"> ... </a>
間違ってはいませんが混乱しそうなので、以下の様に変更することをオススメします。
:hover は別に <a> だけの特権ではありません。
<style>
.wrapper { cursor:pointer; }
.wrapper .box { display:none; }
.wrapper:hover .box { display:block; }
</style>
<div class=wrapper><img><div class=box></div></div>
それぞれの解説を有難うございます。これからも少しずつでも勉強をしながらスキルを上げていきたいと思います。
本当にありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- HTML・CSS ヘッダーの画像にメインエリアがかぶってしまいます 1 2022/11/28 14:06
- JavaScript vertical sliderをautoplayしたい 2 2022/08/25 14:47
- JavaScript ソースコードのいじる場所が分かりません。 1 2022/12/23 02:06
- HTML・CSS 書籍を見つつサイト造りの練習をしているのですが、見た目が一致しません 2 2022/11/28 15:00
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/30 09:10
- HTML・CSS スクロールすると追従する画像のコードを書いているのですが、追従する画像の大きさの調節が上手くいきませ 2 2022/04/18 12:52
- HTML・CSS CSS のみのタブ切り替えについて 1 2023/01/11 16:47
- PHP style.cssのjQuery条件付きcssが機能しない 4 2022/07/17 18:27
- HTML・CSS 吹き出し 下記の吹き出しのスタイルシートについて 下記のスタイルシートは左側にアイコンがでる使用にな 1 2022/11/12 17:55
- HTML・CSS HTML、cssのatomつぅーやつで 課題Ex1ってやつを表示させたいのですが、 私は課題Ex1が 2 2022/12/15 16:56
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
htmlの文字が縦書きになる
-
widthやheightの数値に単位(px...
-
divで囲まれたpaddingの指定を...
-
スタイルシートで背景の繰り返...
-
CSS:印刷時のレイアウト崩れに...
-
Media Queries 4 で 非推奨とな...
-
余分な縦スクロールバーが出て...
-
【CSS】ヘッダーの高さが不明の...
-
画像イメージの上下左右、欲し...
-
スクロールボックスを中央に配...
-
CSS3で角丸写真にシャドーを付...
-
Safariでheight:100%のボックス...
-
ウェブページの上下に暗幕を表...
-
Firefoxで一番下のstickyが上に...
-
複数行テキストの内の文章にリンク
-
<li>の黒い点を消したい。
-
CSS(0の単位)について
-
CSSで指定した背景画像にリンク...
-
border-style:solidで文字がずれる
-
CSSで左に画像、右にテキストを...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
htmlの文字が縦書きになる
-
widthやheightの数値に単位(px...
-
画像イメージの上下左右、欲し...
-
css初心者 フレックスボックス...
-
表示倍率を変えるとレイアウト...
-
CSSがなぜかfont-sizeだけ効か...
-
CSS、width100%でもできる余白
-
W3Cのソースコードの検証サービ...
-
CSS:animation開始位置の設定
-
CSSで指定した背景画像にリンク...
-
<div>と<div>の間の10px程の...
-
余分な縦スクロールバーが出て...
-
CSSでボックスのheightが0になる
-
【CSS】ヘッダーの高さが不明の...
-
スクロールボックスを中央に配...
-
li 黒丸含んで移動する方法
-
border-style:solidで文字がずれる
-
【HTML&CSS】フッター下部の余...
-
Media Queries 4 で 非推奨とな...
-
初心者html・CSS ウィンドウを...
おすすめ情報