मूल सामग्रीमा जानुहोस्

एप स्क्रिनको ढाँचा

माथिको बार, बीचको स्क्रोल हुने भाग र तलको ट्याब बार — तीन तह छुट्याएर स्क्रोल गर्दा पनि बारलाई ठाउँमै राख्ने टुक्रा।

लेआउट

प्रत्यक्ष पूर्वावलोकन

स्रोत

<div class="dc-shell">
  <header class="dc-shell__top">
    <h1 class="dc-shell__title">일자리</h1>
    <button class="dc-shell__ico" type="button">
      <span aria-hidden="true">⋯</span>
      <span class="dc-sr">더보기</span>
    </button>
  </header>
  <main class="dc-shell__body">
    <p class="dc-shell__note">본문만 스크롤합니다. 위·아래 바는 제자리에 남습니다.</p>
    <a class="dc-shell__card" href="#">
      <span class="dc-shell__card-title">용접 보조 · 김해</span>
      <span class="dc-shell__card-meta">일당 160,000원 · 오늘 마감</span>
    </a>
    <a class="dc-shell__card" href="#">
      <span class="dc-shell__card-title">식품 포장 · 평택</span>
      <span class="dc-shell__card-meta">일당 130,000원 · 기숙사 있음</span>
    </a>
    <a class="dc-shell__card" href="#">
      <span class="dc-shell__card-title">물류 상하차 · 인천</span>
      <span class="dc-shell__card-meta">일당 140,000원 · 주 5일</span>
    </a>
    <a class="dc-shell__card" href="#">
      <span class="dc-shell__card-title">호텔 객실 정리 · 제주</span>
      <span class="dc-shell__card-meta">월급 2,450,000원 · 초보 가능</span>
    </a>
    <a class="dc-shell__card" href="#">
      <span class="dc-shell__card-title">농장 일손 · 나주</span>
      <span class="dc-shell__card-meta">일당 120,000원 · 차량 지원</span>
    </a>
  </main>
  <nav class="dc-shell__tabs" aria-label="주요 메뉴">
    <a class="dc-shell__tab" href="#" aria-current="page">
      <span class="dc-shell__tab-ico" aria-hidden="true">⌂</span>
      <span class="dc-shell__tab-lbl">홈</span>
    </a>
    <a class="dc-shell__tab" href="#">
      <span class="dc-shell__tab-ico" aria-hidden="true">⌕</span>
      <span class="dc-shell__tab-lbl">검색</span>
    </a>
    <a class="dc-shell__tab" href="#">
      <span class="dc-shell__tab-ico" aria-hidden="true">♡</span>
      <span class="dc-shell__tab-lbl">찜</span>
    </a>
    <a class="dc-shell__tab" href="#">
      <span class="dc-shell__tab-ico" aria-hidden="true">◉</span>
      <span class="dc-shell__tab-lbl">내 정보</span>
    </a>
  </nav>
</div>
.dc-shell {
  display: flex; flex-direction: column;
  height: 560px; overflow: hidden;
  background: var(--dc-bg);
  border: 1px solid var(--dc-line);
  border-radius: var(--dc-r-md);
  font-family: var(--dc-font);
}
.dc-shell__top {
  flex: 0 0 auto;
  display: flex; align-items: center; gap: var(--dc-2);
  padding: calc(var(--dc-safe-top) + var(--dc-2)) var(--dc-2) var(--dc-2) var(--dc-4);
  background: var(--dc-surface);
  border-bottom: 1px solid var(--dc-line);
}
.dc-shell__title {
  flex: 1 1 auto; min-width: 0;
  font-size: 19px; font-weight: 800; letter-spacing: -.02em;
  color: var(--dc-text);
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.dc-shell__title--center { text-align: center; font-size: 16px; font-weight: 700; }
.dc-shell__ico {
  flex: 0 0 auto;
  display: grid; place-items: center;
  width: 44px; height: 44px;
  border: 0; border-radius: var(--dc-r-full);
  background: transparent; color: var(--dc-text);
  font-size: 20px; line-height: 1;
}
.dc-shell__ico:active { background: var(--dc-sunken); }
.dc-shell__body {
  flex: 1 1 auto; min-height: 0;
  overflow-y: auto; overscroll-behavior: contain;
  display: flex; flex-direction: column; gap: var(--dc-3);
  padding: var(--dc-4);
  background: var(--dc-bg);
}
.dc-shell__note { margin: 0; font-size: 12px; color: var(--dc-text-mute); }
.dc-shell__card {
  display: flex; flex-direction: column; gap: var(--dc-1);
  min-height: 72px; padding: var(--dc-4);
  border: 1px solid var(--dc-line); border-radius: var(--dc-r-md);
  background: var(--dc-surface); box-shadow: var(--dc-sh-1);
  text-decoration: none;
}
.dc-shell__card:active { background: var(--dc-sunken); }
.dc-shell__card-title { font-size: 15px; font-weight: 700; color: var(--dc-text); }
.dc-shell__card-meta { font-size: 13px; color: var(--dc-text-sub); }
.dc-shell__tabs {
  flex: 0 0 auto;
  display: flex; align-items: stretch;
  padding-bottom: var(--dc-safe-bottom);
  background: var(--dc-surface);
  border-top: 1px solid var(--dc-line);
}
.dc-shell__tab {
  flex: 1 1 0; min-width: 0;
  display: flex; flex-direction: column;
  align-items: center; justify-content: center; gap: 3px;
  min-height: 56px; padding: var(--dc-2) var(--dc-1);
  color: var(--dc-text-mute); text-decoration: none;
  transition: color var(--dc-fast), background var(--dc-fast);
}
.dc-shell__tab:active { background: var(--dc-sunken); }
.dc-shell__tab[aria-current="page"] { color: var(--dc-brand-text); }
.dc-shell__tab-ico { font-size: 20px; line-height: 1; }
.dc-shell__tab-lbl { font-size: 11px; font-weight: 700; letter-spacing: -.01em; }
.dc-shell__foot {
  flex: 0 0 auto;
  padding: var(--dc-3) var(--dc-4) calc(var(--dc-safe-bottom) + var(--dc-3));
  background: var(--dc-surface);
  border-top: 1px solid var(--dc-line);
}
.dc-shell__btn {
  display: block; width: 100%; min-height: 48px;
  border: 0; border-radius: var(--dc-r-sm);
  background: var(--dc-brand); color: var(--dc-text-on);
  font-family: inherit; font-size: 16px; font-weight: 700;
}
.dc-shell__btn:active { background: var(--dc-brand-hi); }
.dc-shell__form { display: flex; flex-direction: column; gap: var(--dc-2); }
.dc-shell__label { font-size: 13px; font-weight: 700; color: var(--dc-text-sub); }
.dc-shell__input {
  width: 100%; min-height: 48px; padding: 0 var(--dc-3);
  border: 1px solid var(--dc-line-field); border-radius: var(--dc-r-sm);
  background: var(--dc-surface); color: var(--dc-text); font-size: 15px;
}

कसरी प्रयोग गर्ने

  • बारलाई स्थिर राखी बीचको भाग मात्र स्क्रोल गराउनुहोस्, नत्र ट्याब बार पनि माथि जान्छ
  • माथिको बारले 'कहाँ छु' भन्छ, ट्याब बारले 'कहाँ जान सकिन्छ' भन्छ — दुईटा नमिसाउनुहोस्
  • फारामजस्तो एउटै काम सकिने स्क्रिनमा ट्याब बार हटाएर तल एउटै बटन राख्नुहोस्

ध्यान दिनुपर्ने कुरा

  • --dc-safe-top र --dc-safe-bottom छुटे नच र होम बारले सामग्री छोप्छ
  • उचाइ vh नभई dvh ले लिनुहोस्, नत्र एड्रेस बार खुम्चिँदा बार उफ्रन्छ
  • आइकन मात्र भएको बटनमा dc-sr ले नाम राख्नुहोस्

अर्को