「カテゴリーでさがす」の版間の差分
提供: 川西図鑑
その他の操作
編集の要約なし |
編集の要約なし |
||
| 1行目: | 1行目: | ||
<html> | <html> | ||
<style> | <style> | ||
| 22行目: | 21行目: | ||
transition: all 0.3s ease; | transition: all 0.3s ease; | ||
box-shadow: 0 2px 8px rgba(0,0,0,0.06); | box-shadow: 0 2px 8px rgba(0,0,0,0.06); | ||
overflow: hidden; | |||
} | } | ||
| 48行目: | 48行目: | ||
flex-direction: column; | flex-direction: column; | ||
gap: 10px; | gap: 10px; | ||
margin-bottom: | margin-bottom: 0; | ||
} | } | ||
| 84行目: | 84行目: | ||
color: #f59e0b; | color: #f59e0b; | ||
transform: translateX(2px); | transform: translateX(2px); | ||
} | |||
/* トグルボタン専用スタイル */ | |||
.genre-toggle { | |||
cursor: pointer; | |||
} | |||
.genre-toggle::after { | |||
content: '▼'; | |||
font-size: 14px; | |||
transition: transform 0.3s ease; | |||
} | |||
/* 開いている状態 */ | |||
.genre-card:target .genre-toggle::after { | |||
transform: rotate(180deg); | |||
} | } | ||
| 93行目: | 109行目: | ||
overflow: hidden; | overflow: hidden; | ||
opacity: 0; | opacity: 0; | ||
transition: | transition: max-height 0.4s ease, opacity 0.3s ease, margin-top 0.3s ease; | ||
} | } | ||
/* :target で開閉制御 */ | /* :target で開閉制御 */ | ||
.genre-card:target .subgenres { | .genre-card:target .subgenres { | ||
max-height: | max-height: 2000px; | ||
opacity: 1; | opacity: 1; | ||
margin-top: 16px; | margin-top: 16px; | ||
| 192行目: | 208行目: | ||
/* ======================================== | /* ======================================== | ||
ダークモード(自動) | |||
======================================== */ | ======================================== */ | ||
@media (prefers-color-scheme: dark) { | @media (prefers-color-scheme: dark) { | ||
| 262行目: | 278行目: | ||
padding: 12px 14px; | padding: 12px 14px; | ||
} | } | ||
} | |||
/* ======================================== | |||
JavaScriptでのトグル制御用 | |||
======================================== */ | |||
.genre-card.is-open .subgenres { | |||
max-height: 2000px; | |||
opacity: 1; | |||
margin-top: 16px; | |||
} | |||
.genre-card.is-open .genre-toggle::after { | |||
transform: rotate(180deg); | |||
} | } | ||
</style> | </style> | ||
<script> | |||
// ページ読み込み後に実行 | |||
document.addEventListener('DOMContentLoaded', function() { | |||
// すべてのジャンルで探すボタンにクリックイベントを追加 | |||
const toggleButtons = document.querySelectorAll('.genre-toggle'); | |||
toggleButtons.forEach(button => { | |||
button.addEventListener('click', function(e) { | |||
e.preventDefault(); | |||
const card = this.closest('.genre-card'); | |||
const wasOpen = card.classList.contains('is-open'); | |||
// すべてのカードを閉じる | |||
document.querySelectorAll('.genre-card').forEach(c => { | |||
c.classList.remove('is-open'); | |||
}); | |||
// クリックしたカードがもともと閉じていた場合のみ開く | |||
if (!wasOpen) { | |||
card.classList.add('is-open'); | |||
} | |||
// URLハッシュを更新(戻るボタン対応) | |||
if (!wasOpen) { | |||
history.pushState(null, '', '#' + card.id); | |||
} else { | |||
history.pushState(null, '', window.location.pathname); | |||
} | |||
}); | |||
}); | |||
// ページ読み込み時にハッシュがある場合は該当カードを開く | |||
if (window.location.hash) { | |||
const targetCard = document.querySelector(window.location.hash); | |||
if (targetCard && targetCard.classList.contains('genre-card')) { | |||
targetCard.classList.add('is-open'); | |||
} | |||
} | |||
// ブラウザの戻る/進むボタンに対応 | |||
window.addEventListener('hashchange', function() { | |||
document.querySelectorAll('.genre-card').forEach(card => { | |||
card.classList.remove('is-open'); | |||
}); | |||
if (window.location.hash) { | |||
const targetCard = document.querySelector(window.location.hash); | |||
if (targetCard && targetCard.classList.contains('genre-card')) { | |||
targetCard.classList.add('is-open'); | |||
} | |||
} | |||
}); | |||
}); | |||
</script> | |||
</html> | </html> | ||
= ジャンルから探す = | = ジャンルから探す = | ||
| 275行目: | 361行目: | ||
<div class="genre-actions"> | <div class="genre-actions"> | ||
[[飲食店検索|すべての飲食店を見る {{飲食店件数取得|column=ジャンル|detail=}}件]] | [[飲食店検索|すべての飲食店を見る {{飲食店件数取得|column=ジャンル|detail=}}件]] | ||
<html><a href="#food" class="genre-toggle">ジャンルで探す</a></html> | |||
</div> | </div> | ||
<div class="subgenres"> | <div class="subgenres"> | ||
| 300行目: | 386行目: | ||
<div class="genre-card" id="beauty"> | <div class="genre-card" id="beauty"> | ||
<h3 class="genre-title">美容・健康</h3> | <h3 class="genre-title">美容・健康</h3> | ||
<div class="genre-actions"> | <div class="genre-actions"> | ||
[[美容・健康一覧|一覧を見る]] | [[美容・健康一覧|一覧を見る]] | ||
<a href="#beauty" class="genre-toggle">ジャンルで探す</a> | |||
</div> | </div> | ||
<div class="subgenres"> | <div class="subgenres"> | ||
| 320行目: | 405行目: | ||
<div class="genre-card" id="store"> | <div class="genre-card" id="store"> | ||
<h3 class="genre-title">店・施設</h3> | <h3 class="genre-title">店・施設</h3> | ||
<div class="genre-actions"> | <div class="genre-actions"> | ||
[[店・施設一覧|すべてを見る]] | [[店・施設一覧|すべてを見る]] | ||
<a href="#store" class="genre-toggle">ジャンルで探す</a> | |||
</div> | </div> | ||
<div class="subgenres"> | <div class="subgenres"> | ||
* [[小売店一覧]] | * [[小売店一覧]] | ||
| 341行目: | 424行目: | ||
<div class="genre-card" id="person"> | <div class="genre-card" id="person"> | ||
<h3 class="genre-title">人</h3> | <h3 class="genre-title">人</h3> | ||
<div class="genre-actions"> | <div class="genre-actions"> | ||
[[人の図鑑一覧|すべてを見る]] | [[人の図鑑一覧|すべてを見る]] | ||
<a href="#person" class="genre-toggle">ジャンルで探す</a> | |||
</div> | </div> | ||
<div class="subgenres"> | <div class="subgenres"> | ||
| 357行目: | 439行目: | ||
<div class="genre-card" id="campary"> | <div class="genre-card" id="campary"> | ||
<h3 class="genre-title">団体・企業</h3> | <h3 class="genre-title">団体・企業</h3> | ||
<div class="genre-actions"> | <div class="genre-actions"> | ||
[[団体・企業一覧|すべてを見る]] | [[団体・企業一覧|すべてを見る]] | ||
<a href="#campary" class="genre-toggle">ジャンルで探す</a> | |||
</div> | </div> | ||
<div class="subgenres"> | <div class="subgenres"> | ||
* [[地元企業一覧]] | * [[地元企業一覧]] | ||
| 373行目: | 453行目: | ||
<div class="genre-card" id="job"> | <div class="genre-card" id="job"> | ||
<h3 class="genre-title">仕事</h3> | <h3 class="genre-title">仕事</h3> | ||
<div class="genre-actions"> | <div class="genre-actions"> | ||
[[仕事図鑑一覧|すべてを見る]] | [[仕事図鑑一覧|すべてを見る]] | ||
<a href="#job" class="genre-toggle">ジャンルで探す</a> | |||
</div> | </div> | ||
<div class="subgenres"> | <div class="subgenres"> | ||
* [[求人一覧]] | * [[求人一覧]] | ||
| 385行目: | 463行目: | ||
* [[業務委託・フリーランス一覧]] | * [[業務委託・フリーランス一覧]] | ||
* [[インターン一覧]] | * [[インターン一覧]] | ||
</div> | |||
</div> | </div> | ||
</div> | </div> | ||
</div> | </div> | ||