質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

Q&A

解決済

2回答

2168閲覧

ドロップダウンメニューに使用している画像とテキストの重なりを解消したい

ponyski

総合スコア17

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

0グッド

0クリップ

投稿2018/09/14 09:24

HTMLとCSSで三階層のドロップダウンメニューを作成中です。
見本としてこちらのページの作り方を参考にさせていただいています。

現在私が作成中のドロップダウンメニューでは、第一階層に画像を使用しており、
マウスオーバーで画像を切り替えています。
第一階層は全て<a></a>タグを付けていたのですが、先方からの依頼で第一階層はどこにもリンクしない
ものがあるとのことです(全てではない)。

ご質問したいのは、第一階層で<a></a>タグを外した場合の見た目について、
画像の切り替えはうまくいったのですが、画像部分に<li></li>で定義しているテキストが
重なってしまいます。

text-indentの問題かなと思い(他の第一階層はtext-indentでテキストを飛ばしています)、
色々やってみたのですが、重なりが解消されない状態です。

HTML

1<ul class="ddmenu"> 2 <li class="m01">HOME 3 <ul> 4 <li><a href="#">テスト</a></li> 5 <li class="tri">テスト1 6 <ul> 7 <li><a href="#">テスト1-1</a></li> 8 <li><a href="#">テスト1-2</a></li> 9 </ul> 10 </li> 11 <li><a href="#">サンプル</a></li> 12 <li><a href="#">サンプル</a></li> 13 </ul> 14 </li> 15 <li class="m02"><a href="#">ニュース</a> 16 <ul> 17 <li class="tri">ニュース1 18 <ul> 19 <li><a href="#">ニュース1-1</a></li> 20 <li><a href="#">ニュース1-2</a></li> 21 <li><a href="#">ニュース1-3</a></li> 22 </ul> 23 </li> 24 <li><a href="#">ニュース2</a></li> 25 </ul> 26 </li> 27</ul>

CSS

1/* -------------------- */ 2/* ▼メニューバーの装飾 */ 3/* -------------------- */ 4ul.ddmenu { 5 margin: 0px; /* メニューバー外側の余白(ゼロ) */ 6 padding: 0px 0px 0px 0px; /* メニューバー内側の余白(左に15px) */ 7 background-color: #ffffff; /* バーの背景色(濃い赤色) */ 8} 9 10/* -------------------------- */ 11/* ▼メインメニュー項目の装飾 */ 12/* -------------------------- */ 13ul.ddmenu li { 14 width: 166px; /* メニュー項目の横幅(125px) */ 15 display: inline-block; /* ★1:横並びに配置する */ 16 list-style-type: none; /* ★2:リストの先頭記号を消す */ 17 position: relative; /* ★3:サブメニュー表示の基準位置にする */ 18 float:left; 19} 20ul.ddmenu a { 21 font-family: "メイリオ", "MS Pゴシック",'MS PGothic', sans-serif ; 22 font-size: 12px; 23 background-color: #ffffff; /* メニュー項目の背景色(濃い赤色) */ 24 color: #335599; /* メニュー項目の文字色(白色) */ 25 line-height: 50px; /* メニュー項目のリンクの高さ(40px) */ 26 text-align: center; /* メインメニューの文字列の配置(中央寄せ) */ 27 text-decoration: none; /* メニュー項目の装飾(下線を消す) */ 28 font-weight: bold; /* 太字にする */ 29 display: block; /* ★4:項目内全域をリンク可能にする */ 30} 31 32ul.ddmenu { 33 font-family: "メイリオ", "MS Pゴシック",'MS PGothic', sans-serif ; 34 font-size: 12px; 35 background-color: #ffffff; /* メニュー項目の背景色(濃い赤色) */ 36 color: #335599; /* メニュー項目の文字色(白色) */ 37 line-height: 50px; /* メニュー項目のリンクの高さ(40px) */ 38 text-align: center; /* メインメニューの文字列の配置(中央寄せ) */ 39 text-decoration: none; /* メニュー項目の装飾(下線を消す) */ 40 font-weight: bold; /* 太字にする */ 41 display: block; /* ★4:項目内全域をリンク可能にする */ 42} 43 44ul.ddmenu > li:hover > a { 45 background-color: #ffffff; /* メニュー項目にマウスが載ったときの背景色(淡いピンク) */ 46 color: #ffffff; /* メニュー項目にマウスが載ったときの文字色(濃い赤色) */ 47} 48 49ul.ddmenu > li:hover { 50 background-color: #ffffff; /* メニュー項目にマウスが載ったときの背景色(淡いピンク) */ 51 color: #ffffff; /* メニュー項目にマウスが載ったときの文字色(濃い赤色) */ 52} 53 54/* --背景画像入れ替え------------------------ */ 55ul.ddmenu li.m01 { 56 background: url(images/menu1_1.gif); 57} 58 59ul.ddmenu li.m01 > hover { 60background: url(images/menu1_2.gif); 61} 62 63ul.ddmenu li.m01:hover { 64background: url(images/menu1_2.gif); 65} 66 67ul.ddmenu > li.m01 { 68 text-indent: -9999px; 69} 70 71ul.ddmenu > li.m01 > a { 72text-indent: 0 73} 74 75ul.ddmenu > li.m01 { 76text-indent: 0 77} 78 79ul.ddmenu li.m02 > a { 80 background: url(images/menu2_1.gif); 81} 82 83ul.ddmenu li.m02 > a:hover { 84background: url(images/menu2_2.gif); 85} 86 87ul.ddmenu li.m02:hover> a { 88background: url(images/menu2_2.gif); 89} 90 91ul.ddmenu li.m02 > a { 92 text-indent: -9999px; 93} 94/* -------------------------- */ 95 96/* -------------------- */ 97/* ▼サブメニューの装飾 */ 98/* -------------------- */ 99ul.ddmenu ul { 100 display: none; /* ★1:標準では非表示にする */ 101 margin: 0px; /* ★2:サブメニュー外側の余白(ゼロ) */ 102 padding: 0px; /* ★3:サブメニュー内側の余白(ゼロ) */ 103 position: absolute; /* ★4:絶対配置にする */ 104 border-left: 1px solid white; 105} 106 107/* ---------------------------------- */ 108/* ▼サブメニューがある場合に開く処理 */ 109/* ---------------------------------- */ 110ul.ddmenu li:hover > ul { 111 display: block; /* ★5:マウスポインタが載っている項目の内部にあるリストを表示する */ 112} 113 114/* ------------------------ */ 115/* ▼サブメニュー項目の装飾 */ 116/* ------------------------ */ 117ul.ddmenu ul li { /* ※A */ 118 width: 185px; /* サブメニュー1項目の横幅(135px) */ 119 border-bottom: 1px solid #cccccc; /* 項目上側の枠線(ピンク色で1pxの実線) */ 120} 121 122ul.ddmenu ul li a { /* ※B */ 123 line-height: 35px; /* サブメニュー1項目の高さ(35px) */ 124 text-align: left; /* 文字列の配置(左寄せ) */ 125 padding-left: 10px; /* 文字列前方の余白(5px) */ 126 font-weight: normal; /* 太字にはしない */ 127 background-color:#dbebff; 128} 129 130ul.ddmenu ul li a:hover { /* ※C */ 131 background-color: #fcfcfc; /* サブメニュー項目にマウスが載ったときの背景色(淡い黄色) */ 132 color: #005500; /* サブメニュー項目にマウスが載ったときの文字色(濃い緑色) */ 133} 134 135.ddmenu > li:hover li:hover > a { 136background-color: #fcfcfc; 137color: #005500; 138} 139 140/* ----------------------------------- */ 141/* ▼3階層目以降(孫メニュー以降)の装飾 */ /* ※下ではなく横(右)に表示します。 */ 142/* ----------------------------------- */ 143ul.ddmenu ul ul { 144 margin: 0px; /* ★サブメニュー外側の余白(ゼロ) */ 145 padding: 0px; /* ★サブメニュー内側の余白(ゼロ) */ 146 display: none; /* ★標準では非表示にする */ 147 position: absolute; /* ★絶対配置にする */ 148 top: 0px; /* 1pxだけ上方向にずらす(※上に1pxの枠線を引いている場合) */ 149 left: 100%; /* ★基準位置からの距離を親ボックスの幅100%にする */ 150 border-left: 1px solid white; /* 左側に引く枠線(ピンク色で1pxの実線) */ 151 border-right: 1px solid white; 152} 153 154ul.ddmenu li:last-child ul li ul { 155 left: -100%; 156} 157 158ul.ddmenu li:last-child > ul > li { 159border-left: 1px solid white; 160} 161 162ul.ddmenu ul > li:after { 163 position: absolute; 164 content: ""; 165 top: 12px; 166 left: 3px; 167 width: 0; 168 height: 0; 169 border: 5px solid transparent; 170 border-left-color: #3366ff; 171} 172 173 174/* 孫メニューがある場合左右向き矢印を表示(class追加)*/ 175 176ul.ddmenu li ul li.tri:before { 177 position: absolute; 178 content: ""; 179 top: 24px; 180 right: 8px; 181 width: 0; 182 height: 0; 183 border: 5px solid transparent; 184 border-top-color: #000000; 185 186} 187 188ul.ddmenu li ul li.tri_left:after { 189 position: absolute; 190 content: ""; 191 top: 24px; 192 right: 8px; 193 width: 0; 194 height: 0; 195 border: 5px solid transparent; 196 border-top-color: #000000; 197} 198 199 200ul.ddmenu li ul li.tri { 201 line-height: 35px; /* サブメニュー1項目の高さ(35px) */ 202 text-align: left; /* 文字列の配置(左寄せ) */ 203 padding-left: 10px; /* 文字列前方の余白(5px) */ 204 font-weight: normal; /* 太字にはしない */ 205 font-family: "メイリオ", "MS Pゴシック",'MS PGothic', sans-serif ; 206 background-color:#dbebff; 207 width:175px; 208 color: #335599; 209} 210 211.ddmenu > li:hover li.tri:hover { 212background-color: #fcfcfc; 213color: #005500; 214} 215 216 217 218ul.ddmenu li ul li.tria:before { 219 position: absolute; 220 content: ""; 221 top: 24px; 222 right: 8px; 223 width: 0; 224 height: 0; 225 border: 5px solid transparent; 226 border-top-color: #000000; 227 228} 229

<a>タグ有りの場合
<a>タグ有りの場合(青地に白字のHomeがマウスオーバー用画像)

<a>タグ無しの場合
<a>タグ無しの場合(マウスオーバー前)

<a>タグ無しの場合(マウスオーバー後)
<a>タグ無しの場合(マウスオーバー後)

2番目の画像と3番目の画像(「Home」)で見られる、画像とテキストの重なりを避けたいと思っています。

ul.ddmenu > li.m01 {
text-indent: -9999px;
}

ul.ddmenu > li.m01 {
text-indent: 0
}
がダブってしまっていますが、下の text-indent: 0 の記述を外すと第二階層で
<a>タグが付いていない項目の文字が表示されなくなってしまうのです。

質問もコードも長くなってしまい、申し訳ございませんが、もし有用なアドバイスを
いただくことができましたら本当に助かります。どうぞよろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

HTML

1<span>HOME</span>

として,

CSS

1span { 2 visibility: hidden; 3}

とすると,うまくいきました.

投稿2018/09/15 00:22

IKIX

総合スコア142

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ponyski

2018/09/15 05:10

何度も回答をお寄せいただき、本当にありがとうございます。 おかげさまで visibility: hidden; で、画像の上に重なっているテキストは消えました! 私の考えが非常に浅はかだったのですが、やはりスマホで見る場合は<a>タグの代わりになる 設定が必要だと今さら気がつきました。 そこで、 visibility: hidden; を適用した上で、ontouchstart="" を追加したところ 無事にスマホでも第二階層以降のプルダウンを展開することができました。 今回色々なCSSの設定をお教えいただき、勉強になりました。心から感謝いたします。
guest

0

文字列「HOME」を非表示にする方法を3通り考えてみました.他にも方法はあると思います.


:文字列「HOME」をspanタグで囲み,

CSS

1span{ 2 text-indent: -9999px; 3}

で見えなくする.


:文字列「HOME」のアンカーにdisabledクラスをつけ,リンクを無効にしつつ表示もしない.

HTML

1<a href="/" class="disabled">HOME</a>

CSS

1a.disabled{ 2 pointer-events: none; 3 display: none; 4}

:文字列「HOME」を思い切って消してしまう.

投稿2018/09/14 10:34

IKIX

総合スコア142

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ponyski

2018/09/14 15:34

貴重なアドバイスをいただき、どうもありがとうございます。 「文字列「HOME」のアンカーにdisabledクラスをつけ,リンクを無効にしつつ表示もしない」 という方法で解決できそうで喜んだのですが、スマホで見るとタップしても何も起こらなくなってしまう (第二階層以降が表示されなくなってしまう)ので、とっても残念なのですがこの方法は使えなさそうです(涙)。 「spanタグで囲む」という方法も試してみたのですが、やはりテキストが表示されてしまいます。 やはり最後の「文字列を消してしまう」のがいいのかなとも思いますが、それは最終手段のような 気もしますね。。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問