「カテゴリーでさがす」の版間の差分
提供: 川西図鑑
その他の操作
編集の要約なし |
編集の要約なし |
||
| 98行目: | 98行目: | ||
/* 開いている状態 */ | /* 開いている状態 */ | ||
.genre-card | .genre-card.is-open .genre-toggle::after { | ||
transform: rotate(180deg); | transform: rotate(180deg); | ||
} | } | ||
/* ======================================== | /* ======================================== | ||
サブジャンルリスト(カード内・非表示用) | |||
======================================== */ | ======================================== */ | ||
.subgenres { | .subgenres { | ||
display: none; | |||
} | |||
/* ======================================== | |||
展開パネル(グリッド間に表示) | |||
======================================== */ | |||
.subgenres-expanded { | |||
grid-column: 1 / -1; | |||
background: #fff; | |||
border: 2px solid #f59e0b; | |||
border-radius: 16px; | |||
padding: 24px; | |||
margin: 0; | |||
max-height: 0; | max-height: 0; | ||
overflow: hidden; | overflow: hidden; | ||
opacity: 0; | opacity: 0; | ||
transition: max-height 0.4s ease, opacity 0.3s ease, margin | transition: max-height 0.4s ease, opacity 0.3s ease, padding 0.3s ease, margin 0.3s ease; | ||
box-shadow: 0 4px 16px rgba(245, 158, 11, 0.15); | |||
} | } | ||
.subgenres-expanded.is-visible { | |||
. | |||
max-height: 2000px; | max-height: 2000px; | ||
opacity: 1; | opacity: 1; | ||
margin- | padding: 24px; | ||
margin: -10px 0 10px 0; | |||
} | } | ||
.subgenres ul { | .subgenres-expanded ul { | ||
list-style: none; | list-style: none; | ||
padding: 0; | padding: 0; | ||
margin: 0; | margin: 0; | ||
display: grid; | display: grid; | ||
gap: | grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); | ||
gap: 12px; | |||
} | } | ||
.subgenres li { | .subgenres-expanded li { | ||
margin: 0; | margin: 0; | ||
} | } | ||
.subgenres a { | .subgenres-expanded a { | ||
display: flex; | display: flex; | ||
align-items: center; | align-items: center; | ||
padding: | padding: 14px 18px; | ||
border: 1px solid #e5e7eb; | border: 1px solid #e5e7eb; | ||
border-radius: 8px; | border-radius: 8px; | ||
| 145行目: | 160行目: | ||
} | } | ||
.subgenres a::before { | .subgenres-expanded a::before { | ||
content: '•'; | content: '•'; | ||
margin-right: | margin-right: 10px; | ||
color: #f59e0b; | color: #f59e0b; | ||
font-weight: bold; | font-weight: bold; | ||
font-size: 18px; | |||
} | } | ||
.subgenres a:hover { | .subgenres-expanded a:hover { | ||
background: #fff; | background: #fff; | ||
border-color: #f59e0b; | border-color: #f59e0b; | ||
| 172行目: | 188行目: | ||
} | } | ||
.skin-theme-clientpref-night .genre-actions | .skin-theme-clientpref-night .genre-actions a { | ||
background: #1e1e1e; | background: #1e1e1e; | ||
border-color: #3a3a3a; | border-color: #3a3a3a; | ||
| 193行目: | 208行目: | ||
} | } | ||
.skin-theme-clientpref-night .subgenres a { | .skin-theme-clientpref-night .subgenres-expanded { | ||
background: #2a2a2a; | |||
border-color: #f59e0b; | |||
} | |||
.skin-theme-clientpref-night .subgenres-expanded a { | |||
background: #1e1e1e; | background: #1e1e1e; | ||
border-color: #3a3a3a; | |||
color: #e5e7eb; | |||
} | } | ||
.skin-theme-clientpref-night .subgenres a::before { | .skin-theme-clientpref-night .subgenres-expanded a::before { | ||
color: #fbbf24; | color: #fbbf24; | ||
} | } | ||
.skin-theme-clientpref-night .subgenres a:hover { | .skin-theme-clientpref-night .subgenres-expanded a:hover { | ||
background: #2a2a2a; | background: #2a2a2a; | ||
border-color: #f59e0b; | border-color: #f59e0b; | ||
| 221行目: | 243行目: | ||
} | } | ||
.skin-theme-clientpref-os .genre-actions | .skin-theme-clientpref-os .genre-actions a { | ||
background: #1e1e1e; | background: #1e1e1e; | ||
border-color: #3a3a3a; | border-color: #3a3a3a; | ||
| 242行目: | 263行目: | ||
} | } | ||
.skin-theme-clientpref-os .subgenres a { | .skin-theme-clientpref-os .subgenres-expanded { | ||
background: #2a2a2a; | |||
border-color: #f59e0b; | |||
} | |||
.skin-theme-clientpref-os .subgenres-expanded a { | |||
background: #1e1e1e; | background: #1e1e1e; | ||
border-color: #3a3a3a; | |||
color: #e5e7eb; | |||
} | } | ||
.skin-theme-clientpref-os .subgenres a::before { | .skin-theme-clientpref-os .subgenres-expanded a::before { | ||
color: #fbbf24; | color: #fbbf24; | ||
} | } | ||
.skin-theme-clientpref-os .subgenres a:hover { | .skin-theme-clientpref-os .subgenres-expanded a:hover { | ||
background: #2a2a2a; | background: #2a2a2a; | ||
border-color: #f59e0b; | border-color: #f59e0b; | ||
| 273行目: | 301行目: | ||
} | } | ||
.genre-actions a | .genre-actions a { | ||
.subgenres a { | font-size: 13px; | ||
padding: 12px 14px; | |||
} | |||
.subgenres-expanded { | |||
padding: 20px; | |||
} | |||
.subgenres-expanded.is-visible { | |||
padding: 20px; | |||
} | |||
.subgenres-expanded ul { | |||
grid-template-columns: 1fr; | |||
} | |||
.subgenres-expanded a { | |||
font-size: 13px; | font-size: 13px; | ||
padding: 12px 14px; | padding: 12px 14px; | ||
| 297行目: | 341行目: | ||
// ページ読み込み後に実行 | // ページ読み込み後に実行 | ||
document.addEventListener('DOMContentLoaded', function() { | document.addEventListener('DOMContentLoaded', function() { | ||
const grid = document.querySelector('.genre-grid'); | |||
let currentExpandedPanel = null; | |||
// すべてのジャンルで探すボタンにクリックイベントを追加 | // すべてのジャンルで探すボタンにクリックイベントを追加 | ||
const toggleButtons = document.querySelectorAll('.genre-toggle'); | const toggleButtons = document.querySelectorAll('.genre-toggle'); | ||
| 305行目: | 352行目: | ||
const card = this.closest('.genre-card'); | const card = this.closest('.genre-card'); | ||
const cardId = card.id; | |||
const wasOpen = card.classList.contains('is-open'); | const wasOpen = card.classList.contains('is-open'); | ||
// 既存の展開パネルを削除 | |||
if (currentExpandedPanel) { | |||
currentExpandedPanel.remove(); | |||
currentExpandedPanel = null; | |||
} | |||
// すべてのカードを閉じる | // すべてのカードを閉じる | ||
| 315行目: | 369行目: | ||
if (!wasOpen) { | if (!wasOpen) { | ||
card.classList.add('is-open'); | card.classList.add('is-open'); | ||
// サブジャンルの内容を取得 | |||
const subgenresContent = card.querySelector('.subgenres').innerHTML; | |||
// カードの位置を取得して、同じ行の最後に展開パネルを挿入 | |||
const allCards = Array.from(grid.children).filter(el => el.classList.contains('genre-card')); | |||
const cardIndex = allCards.indexOf(card); | |||
// グリッドの列数を計算(ウィンドウ幅に基づく) | |||
const gridStyle = window.getComputedStyle(grid); | |||
const gridTemplateColumns = gridStyle.gridTemplateColumns.split(' ').length; | |||
// 同じ行の最後のカードのインデックスを計算 | |||
const rowEndIndex = Math.floor(cardIndex / gridTemplateColumns) * gridTemplateColumns + gridTemplateColumns - 1; | |||
const insertAfterCard = allCards[Math.min(rowEndIndex, allCards.length - 1)]; | |||
// 展開パネルを作成 | |||
const expandedPanel = document.createElement('div'); | |||
expandedPanel.className = 'subgenres-expanded'; | |||
expandedPanel.innerHTML = subgenresContent; | |||
// 展開パネルを挿入 | |||
insertAfterCard.after(expandedPanel); | |||
currentExpandedPanel = expandedPanel; | |||
// アニメーション用に少し遅延 | |||
setTimeout(() => { | |||
expandedPanel.classList.add('is-visible'); | |||
}, 10); | |||
} | } | ||
}); | }); | ||
}); | }); | ||
// | // ウィンドウリサイズ時に展開パネルの位置を再計算 | ||
let resizeTimer; | |||
window.addEventListener('resize', function() { | |||
clearTimeout(resizeTimer); | |||
resizeTimer = setTimeout(function() { | |||
const openCard = document.querySelector('.genre-card.is-open'); | |||
if (openCard) { | |||
// 再度開き直す | |||
openCard.querySelector('.genre-toggle').click(); | |||
openCard.querySelector('.genre-toggle').click(); | |||
} | } | ||
} | }, 250); | ||
}); | }); | ||
}); | }); | ||
</script> | </script> | ||
</html> | </html> | ||
| 388行目: | 456行目: | ||
<div class="genre-actions"> | <div class="genre-actions"> | ||
[[美容・健康一覧|一覧を見る]] | [[美容・健康一覧|一覧を見る]] | ||
<a href="#beauty" class="genre-toggle">ジャンルで探す</a> | <html><a href="#beauty" class="genre-toggle">ジャンルで探す</a></html> | ||
</div> | </div> | ||
<div class="subgenres"> | <div class="subgenres"> | ||
| 407行目: | 475行目: | ||
<div class="genre-actions"> | <div class="genre-actions"> | ||
[[店・施設一覧|すべてを見る]] | [[店・施設一覧|すべてを見る]] | ||
<a href="#store" class="genre-toggle">ジャンルで探す</a> | <html><a href="#store" class="genre-toggle">ジャンルで探す</a></html> | ||
</div> | </div> | ||
<div class="subgenres"> | <div class="subgenres"> | ||
| 426行目: | 494行目: | ||
<div class="genre-actions"> | <div class="genre-actions"> | ||
[[人の図鑑一覧|すべてを見る]] | [[人の図鑑一覧|すべてを見る]] | ||
<a href="#person" class="genre-toggle">ジャンルで探す</a> | <html><a href="#person" class="genre-toggle">ジャンルで探す</a></html> | ||
</div> | </div> | ||
<div class="subgenres"> | <div class="subgenres"> | ||
| 441行目: | 509行目: | ||
<div class="genre-actions"> | <div class="genre-actions"> | ||
[[団体・企業一覧|すべてを見る]] | [[団体・企業一覧|すべてを見る]] | ||
<a href="#campary" class="genre-toggle">ジャンルで探す</a> | <html><a href="#campary" class="genre-toggle">ジャンルで探す</a></html> | ||
</div> | </div> | ||
<div class="subgenres"> | <div class="subgenres"> | ||
| 455行目: | 523行目: | ||
<div class="genre-actions"> | <div class="genre-actions"> | ||
[[仕事図鑑一覧|すべてを見る]] | [[仕事図鑑一覧|すべてを見る]] | ||
<a href="#job" class="genre-toggle">ジャンルで探す</a> | <html><a href="#job" class="genre-toggle">ジャンルで探す</a></html> | ||
</div> | </div> | ||
<div class="subgenres"> | <div class="subgenres"> | ||
| 463行目: | 531行目: | ||
* [[業務委託・フリーランス一覧]] | * [[業務委託・フリーランス一覧]] | ||
* [[インターン一覧]] | * [[インターン一覧]] | ||
</div> | |||
</div> | </div> | ||
</div> | </div> | ||
</div> | </div> | ||
</div> | </div> | ||
2026年1月29日 (木) 10:48時点における版
ジャンルから探す
川西の情報を、ジャンルごとに整理しています。 気になるジャンルを選んでください。