9月更新・前月(8月)の人気記事トップ10 09/02/2024
- ( 01 – ) 【Labs】position:absoluteとwidth:100%を指定すると横幅の設定がうまくいかない場合の対処方法について
- ( 07 ↑) 【Mac】macOSをHigh SierraからMontereyにアップグレード
- ( 03 – ) 【Mac】横画面で撮影した動画をYouTubeショート用にMacのiMovieで縦画面に編集する方法
- ( 10 ↑) 【iPhone / iPad】iPhoneのツイッターアプリでユーザー名をコピーする方法
- (圏外↑) 【Labs】CSSだけでドロップダウンメニュー
- ( 02 ↓) 【jQuery】入門2. jQueryをHTMLに組み込む
- ( 09 ↑) 【Mac】Safariでソースコードを見る方法
- ( 04 ↓) 【jQuery】入門7. jQueryで新しいWindowを開く
- ( 06 ↓) 【2024年5月】iPad画面解像度まとめ
- (圏外↑) 【GIMP】レイヤーをロック
【Labs】スマホ対応CSSだけでドロップダウンメニュー
こんにちは(・∀・)
こちらの【Labs】スマホ対応CSSだけでドロップダウンメニューの横並びドロップダウンメニューをスマホに対応させました。3パターンのサンプルをご用意しましたのでよろしければご活用ください。
Contents
- 1. スマホサイトもPCサイトも通常のドロップダウンメニュー
- 2. スマホサイトではメニューが横スクロールとなり子メニュー展開なし(スクロールバー表示)
- 3. スマホサイトではメニューが横スクロールとなり子メニュー展開なし(ヌルヌルスクロール)
横並びドロップダウンメニュー
横並びで表示するドロップダウンメニューのサンプルです。
1. スマホサイトもPCサイトも通常のドロップダウンメニュー
HTML
<div class="gnav">
<ul class="nav">
<li><a href="#">Home</a>
</li>
<li><a href="#">Strategy</a>
<ul>
<li><a href="#">b1</a></li>
<li><a href="#">b1</a>
<ul>
<li><a href="#">b2</a></li>
<li><a href="#">b2</a></li>
</ul>
</li>
</ul>
</li>
<li><a href="#">About</a>
<ul>
<li><a href="#">c1</a>
<ul>
<li><a href="#">c2</a></li>
<li><a href="#">c2</a></li>
</ul>
</li>
<li><a href="#">c1</a></li>
</ul>
</li>
<li><a href="#">Works</a>
<ul>
<li><a href="#">d1</a></li>
<li><a href="#">d1</a>
<ul>
<li><a href="#">d2</a></li>
<li><a href="#">d2</a>
<ul class="left">
<li><a href="#">d3</a></li>
<li><a href="#">d3</a></li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li><a href="#">Contact</a>
<ul>
<li><a href="#">e1</a>
<ul class="left">
<li><a href="#">e2-1</a></li>
<li><a href="#">e2-1</a></li>
</ul>
</li>
<li><a href="#">e1</a>
<ul class="left">
<li><a href="#">e2-2</a></li>
<li><a href="#">e2-2</a></li>
</ul>
</li>
</ul>
</li>
<!--nav--></ul>
<!--gnav--></div>
<div class="content">
<p>通常の横並びドロップダウンメニューです。メニュー部分にマウスオーバーするとコンテンツの上に子メニューが展開します。</p>
<p>メニュー数が少ない、またはメニューの文字列の数が少ないデザイン向けです。</p>
<p>PCサイトの子孫メニューの制御ははoverflowで行っております。displayでの制御も可能ですが、その場合はcontentプロパティで表示している▶矢印は見えなくなります。</p>
</div>
CSS
.gnav {
width: 100%;
height: 40px;
margin: 0;
padding: 0;
background: #9fb7d4;
}
.gnav .nav {
width: 300px;
height: 40px;
margin: 0 auto;
padding: 0;
display: flex;
}
.gnav .nav li {
position: relative;
list-style: none;
box-sizing: border-box;
border-left: 1px solid #eee;
}
.gnav .nav li a {
display: block;
width: 60px;
height: 40px;
text-align: center;
color: #fff;
font-size: 12px;
line-height: 3.2;
background: #9fb7d4;
box-sizing: border-box;
text-decoration: none;
}
.gnav .nav li:first-child {
border-left: 1px solid #eee;
}
.gnav .nav li:last-child {
border-right: 1px solid #eee;
}
.gnav .nav > li:hover > a {/*layer-1*/
color: orange;
background: #afc6e2;
}
.gnav .nav > li li:hover > a {/*layer-2*/
color: olive;
background: #afc6e2;
}
.gnav .nav li ul {
top: 40px;
left: -40px;
position: absolute;
}
.gnav .nav li ul li {
overflow: hidden;
height: 0;
}
.gnav .nav li ul li a {
border-top: 1px solid #eee;
}
.gnav .nav li:hover > ul > li {
overflow: visible;
height: 40px;
}
.gnav .nav li ul li ul {
top: 0;
left: 20px;
}
.gnav .nav li ul li ul:before {/*layer-2▷*/
position: absolute;
content: "";
top: 15px;
left: 30px;
border: 5px solid transparent;
border-left: 5px solid #fff;
}
.gnav .nav li ul li ul li:hover > a {/*layer-3*/
color: pink;
background: #afc6e2;
}
.gnav .nav li ul li ul.left {
top: 0;
left: -100px;
}
.gnav .nav li ul li ul.left:before,/*layer-2-left▷*/
.gnav .nav li ul li ul li ul.left:before {/*layer-3-left▷*/
position: absolute;
content: "";
top: 15px;
left: 100px;
border: 5px solid transparent;
border-right: 5px solid #fff;
}
.gnav .nav li ul li ul.left li:hover > a {/*layer-2-left*/
color: pink;
background: #afc6e2;
}
.gnav .nav li ul li ul li ul.left li:hover > a {/*layer-3-left*/
color: purple;
background: #afc6e2;
}
.content {
width: 100%;
min-height: 200px;
background: #eee;
margin: 0 auto;
padding: 10px;
text-align: left;
box-sizing: border-box;
}
@media (min-width: 769px) {
.gnav {
overflow: visible;
}
.gnav .nav {
width: 755px;
}
.gnav .nav li {
box-sizing: border-box;
}
.gnav .nav li a {
display: block;
width: 150px;
height: 40px;
font-size: 14px;
line-height: 2.8;
}
.gnav .nav li:first-child {
border-left: 1px solid #eee;
}
.gnav .nav li:last-child {
border-right: 1px solid #eee;
}
.gnav .nav li ul li ul {
top: 0;
left: 110px;
}
.gnav .nav li ul li ul:before {/*layer-2▷*/
left: 30px;
}
.gnav .nav li ul li ul.left {
left: -190px;
}
.gnav .nav li ul li ul.left:before,/*layer-2-left▷*/
.gnav .nav li ul li ul li ul.left:before {/*layer-3-left▷*/
left: 190px;
}
.content {
width: 755px;
}
/* ** */}
Result
サンプルデモ1はこちら
スマホでのご確認はこちらをどうぞ
2. スマホサイトではメニューが横スクロールとなり子メニュー展開なし(スクロールバー表示)
HTML
<div class="gnav2">
<ul class="nav">
<li><a href="#">Home</a>
</li>
<li><a href="#">Strategy</a>
<ul>
<li><a href="#">b1</a></li>
<li><a href="#">b1</a>
<ul>
<li><a href="#">b2</a></li>
<li><a href="#">b2</a></li>
</ul>
</li>
</ul>
</li>
<li><a href="#">About</a>
<ul>
<li><a href="#">c1</a>
<ul>
<li><a href="#">c2</a></li>
<li><a href="#">c2</a></li>
</ul>
</li>
<li><a href="#">c1</a></li>
</ul>
</li>
<li><a href="#">Works</a>
<ul>
<li><a href="#">d1</a></li>
<li><a href="#">d1</a>
<ul>
<li><a href="#">d2</a></li>
<li><a href="#">d2</a>
<ul class="left">
<li><a href="#">d3</a></li>
<li><a href="#">d3</a></li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li><a href="#">Contact</a>
<ul>
<li><a href="#">e1</a>
<ul class="left">
<li><a href="#">e2-1</a></li>
<li><a href="#">e2-1</a></li>
</ul>
</li>
<li><a href="#">e1</a>
<ul class="left">
<li><a href="#">e2-2</a></li>
<li><a href="#">e2-2</a></li>
</ul>
</li>
</ul>
</li>
<!--nav--></ul>
<!--gnav2--></div>
<div class="content2">
<p>通常の横並びドロップダウンメニューです。メニュー部分にマウスオーバーするとコンテンツの上に子メニューが展開します。</p>
<p>スマホサイトでは横スクロールのナビゲーションとなり、子メニューは展開しません。</p>
<p>メニュー数が多かったりメニューの文字列の数が多いデザイン向けです。</p>
<p>メニューの一部が表示されなくなるのでHTMLのリンク構造をスマホサイトとPCサイトで変える必要があります。</p>
<p>PCサイトの子孫メニューの制御ははoverflowで行っております。displayでの制御も可能ですが、その場合はcontentプロパティで表示している▶矢印は見えなくなります。</p>
</div>
CSS
.gnav2::-webkit-scrollbar {
height: 2px;
}
.gnav2::-webkit-scrollbar-track {
margin: 0 2px;
background: #ccc;
border-radius: 5px;
}
.gnav2::-webkit-scrollbar-thumb {
background: #d49fc2;
border-radius: 5px;
}
.gnav2 {
width: 100%;
height: 40px;
margin: 0;
padding: 0;
background: #9fb7d4;
overflow-x: scroll;
overflow-y: hidden;
/*-webkit-overflow-scrolling: touch;*/
}
.gnav2 .nav {
width: 750px;
height: 40px;
margin: 0 auto;
padding: 0;
display: flex;
}
.gnav2 .nav li {
position: relative;
list-style: none;
box-sizing: border-box;
border-left: 1px solid #eee;
}
.gnav2 .nav li a {
display: block;
width: 150px;
height: 40px;
text-align: center;
color: #fff;
font-size: 14px;
line-height: 2.8;
background: #9fb7d4;
box-sizing: border-box;
text-decoration: none;
}
.gnav2 .nav li:first-child {
border-left: 0;
}
.gnav2 .nav > li:hover > a {/*layer-1*/
color: orange;
background: #afc6e2;
}
.gnav2 .nav > li li:hover > a {/*layer-2*/
color: olive;
background: #afc6e2;
}
.gnav2 .nav li ul {
top: 40px;
left: -40px;
position: absolute;
}
.gnav2 .nav li ul li {
overflow: hidden;
height: 0;
}
.gnav2 .nav li ul li a {
border-top: 1px solid #eee;
}
.gnav2 .nav li:hover > ul > li {
overflow: visible;
height: 40px;
}
.gnav2 .nav li ul li ul {
top: 0;
left: 110px;
}
.gnav2 .nav li ul li ul:before {/*layer-2▷*/
position: absolute;
content: "";
top: 15px;
left: 30px;
border: 5px solid transparent;
border-left: 5px solid #fff;
}
.gnav2 .nav li ul li ul li:hover > a {/*layer-3*/
color: pink;
background: #afc6e2;
}
.gnav2 .nav li ul li ul.left {
top: 0;
left: -190px;
}
.gnav2 .nav li ul li ul.left:before,/*layer-2-left▷*/
.gnav2 .nav li ul li ul li ul.left:before {/*layer-3-left▷*/
position: absolute;
content: "";
top: 15px;
left: 190px;
border: 5px solid transparent;
border-right: 5px solid #fff;
}
.gnav2 .nav li ul li ul.left li:hover > a {/*layer-2-left*/
color: pink;
background: #afc6e2;
}
.gnav2 .nav li ul li ul li ul.left li:hover > a {/*layer-3-left*/
color: purple;
background: #afc6e2;
}
.content2 {
width: 100%;
min-height: 200px;
background: #eee;
margin: 0 auto;
padding: 10px;
text-align: left;
box-sizing: border-box;
}
@media (min-width: 769px) {
.gnav2 {
overflow: visible;
}
.gnav2 .nav {
width: 755px;
}
.gnav2 .nav li {
box-sizing: border-box;
}
.gnav2 .nav li:first-child {
border-left: 1px solid #eee;
}
.gnav2 .nav li:last-child {
border-right: 1px solid #eee;
}
.content2 {
width: 755px;
}
/* ** */}
Result
サンプルデモ2はこちら
スマホでのご確認はこちらをどうぞ
3. スマホサイトではメニューが横スクロールとなり子メニュー展開なし(ヌルヌルスクロール)
HTML
<div class="gnav3">
<ul class="nav">
<li><a href="#">Home</a>
</li>
<li><a href="#">Strategy</a>
<ul>
<li><a href="#">b1</a></li>
<li><a href="#">b1</a>
<ul>
<li><a href="#">b2</a></li>
<li><a href="#">b2</a></li>
</ul>
</li>
</ul>
</li>
<li><a href="#">About</a>
<ul>
<li><a href="#">c1</a>
<ul>
<li><a href="#">c2</a></li>
<li><a href="#">c2</a></li>
</ul>
</li>
<li><a href="#">c1</a></li>
</ul>
</li>
<li><a href="#">Works</a>
<ul>
<li><a href="#">d1</a></li>
<li><a href="#">d1</a>
<ul>
<li><a href="#">d2</a></li>
<li><a href="#">d2</a>
<ul class="left">
<li><a href="#">d3</a></li>
<li><a href="#">d3</a></li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li><a href="#">Contact</a>
<ul>
<li><a href="#">e1</a>
<ul class="left">
<li><a href="#">e2-1</a></li>
<li><a href="#">e2-1</a></li>
</ul>
</li>
<li><a href="#">e1</a>
<ul class="left">
<li><a href="#">e2-2</a></li>
<li><a href="#">e2-2</a></li>
</ul>
</li>
</ul>
</li>
<!--nav--></ul>
<!--gnav3--></div>
<div class="content3">
<p>通常の横並びドロップダウンメニューです。メニュー部分にマウスオーバーするとコンテンツの上に子メニューが展開します。</p>
<p>スマホサイトでは横スクロールのナビゲーションとなり、子メニューは展開しません。</p>
<p>メニュー数が多かったりメニューの文字列の数が多いデザイン向けです。</p>
<p>メニューの一部が表示されなくなるのでHTMLのリンク構造をスマホサイトとPCサイトで変える必要があります。</p>
<p>PCサイトの子孫メニューの制御ははoverflowで行っております。displayでの制御も可能ですが、その場合はcontentプロパティで表示している▶矢印は見えなくなります。</p>
</div>
CSS
.gnav3 {
width: 100%;
height: 40px;
margin: 0;
padding: 0;
background: #9fb7d4;
overflow-x: scroll;
overflow-y: hidden;
-webkit-overflow-scrolling: touch;
}
.gnav3 .nav {
width: 750px;
height: 40px;
margin: 0 auto 2px auto;
padding: 0;
display: flex;
}
.gnav3 .nav li {
position: relative;
list-style: none;
box-sizing: border-box;
border-left: 1px solid #eee;
}
.gnav3 .nav li a {
display: block;
width: 150px;
height: 40px;
text-align: center;
color: #fff;
font-size: 14px;
line-height: 2.8;
background: #9fb7d4;
box-sizing: border-box;
text-decoration: none;
}
.gnav3 .nav li:first-child {
border-left: 0;
}
.gnav3 .nav > li:hover > a {/*layer-1*/
color: orange;
background: #afc6e2;
}
.gnav3 .nav > li li:hover > a {/*layer-2*/
color: olive;
background: #afc6e2;
}
.gnav3 .nav li ul {
top: 40px;
left: -40px;
position: absolute;
}
.gnav3 .nav li ul li {
overflow: hidden;
height: 0;
}
.gnav3 .nav li ul li a {
border-top: 1px solid #eee;
}
.gnav3 .nav li:hover > ul > li {
overflow: visible;
height: 40px;
}
.gnav3 .nav li ul li ul {
top: 0;
left: 110px;
}
.gnav3 .nav li ul li ul:before {/*layer-2▷*/
position: absolute;
content: "";
top: 15px;
left: 30px;
border: 5px solid transparent;
border-left: 5px solid #fff;
}
.gnav3 .nav li ul li ul li:hover > a {/*layer-3*/
color: pink;
background: #afc6e2;
}
.gnav3 .nav li ul li ul.left {
top: 0;
left: -190px;
}
.gnav3 .nav li ul li ul.left:before,/*layer-2-left▷*/
.gnav3 .nav li ul li ul li ul.left:before {/*layer-3-left▷*/
position: absolute;
content: "";
top: 15px;
left: 190px;
border: 5px solid transparent;
border-right: 5px solid #fff;
}
.gnav3 .nav li ul li ul.left li:hover > a {/*layer-2-left*/
color: pink;
background: #afc6e2;
}
.gnav3 .nav li ul li ul li ul.left li:hover > a {/*layer-3-left*/
color: purple;
background: #afc6e2;
}
.content3 {
width: 100%;
min-height: 200px;
background: #eee;
margin: 0 auto;
padding: 10px;
text-align: left;
box-sizing: border-box;
}
@media (min-width: 769px) {
.gnav3 {
overflow: visible;
}
.gnav3 .nav {
width: 755px;
}
.gnav3 .nav li {
box-sizing: border-box;
}
.gnav3 .nav li:first-child {
border-left: 1px solid #eee;
}
.gnav3 .nav li:last-child {
border-right: 1px solid #eee;
}
.content3 {
width: 755px;
}
/* ** */}
Result
サンプルデモ3はこちら
スマホでのご確認はこちらをどうぞ
関連リンク
【Labs】タブ移動もできるドロップダウンメニュー
【Labs】CSSだけでドロップダウンメニュー
【Labs】jQueryでドロップダウンメニュー