ship-gis/src/scss/SideComponent.scss
jeonghyo.K 81255c4839 추가 수정사항 반영
1. 페이지네이션, 스크롤, 날짜 선택 ui 추가
2. 공통코드 조회 api 적용 (위성 조회, 등록 팝업 등)
3. 필수값 입력 메세지 추가
2026-02-11 16:49:26 +09:00

568 lines
18 KiB
SCSS

@charset "utf-8";
#wrap {
#sidePanel {
/* gnb */
#nav {
position: fixed;
top: 4.4rem;
left: 0;
z-index: 100;
width: 4.3rem;
height: calc(100% - 4.4rem);
display: flex;
flex-direction: column;
justify-content: space-between;
background: var(--secondary1);
border-right: 1px solid var(--tertiary2);
.gnb {
width: 4.2rem;
display: flex;
flex-direction: column;
li {
width: 100%;
height: 4.4rem;
display: flex;
align-items: center;
justify-content: center;
button {
width: 100%;
height: 100%;
display: flex;
align-items: center;
justify-content: center;
background-repeat: no-repeat;
background-position: center;
background-size: 3rem;
/* 공통 상태 */
&:hover,
&:active,
&.active {
background-color: var(--primary1);
}
/* gnb icons */
&.gnb1 {
background-image: url(../assets/images/ico_gnb01.svg);
&:hover,
&:active,
&.active {
background-image: url(../assets/images/ico_gnb01_on.svg);
}
}
&.gnb2 {
background-image: url(../assets/images/ico_gnb02.svg);
&:hover,
&:active,
&.active {
background-image: url(../assets/images/ico_gnb02_on.svg);
}
}
&.gnb3 {
background-image: url(../assets/images/ico_gnb03.svg);
&:hover,
&:active,
&.active {
background-image: url(../assets/images/ico_gnb03_on.svg);
}
}
&.gnb4 {
background-image: url(../assets/images/ico_gnb04.svg);
&:hover,
&:active,
&.active {
background-image: url(../assets/images/ico_gnb04_on.svg);
}
}
&.gnb5 {
background-image: url(../assets/images/ico_gnb05.svg);
&:hover,
&:active,
&.active {
background-image: url(../assets/images/ico_gnb05_on.svg);
}
}
&.gnb6 {
background-image: url(../assets/images/ico_gnb06.svg);
&:hover,
&:active,
&.active {
background-image: url(../assets/images/ico_gnb06_on.svg);
}
}
&.gnb7 {
background-image: url(../assets/images/ico_gnb07.svg);
&:hover,
&:active,
&.active {
background-image: url(../assets/images/ico_gnb07_on.svg);
}
}
&.gnb8 {
background-image: url(../assets/images/ico_gnb08.svg);
&:hover,
&:active,
&.active {
background-image: url(../assets/images/ico_gnb08_on.svg);
}
}
}
}
}
.side {
width: 4.2rem;
display: flex;
flex-direction: column;
li {
width: 100%;
height: 4.4rem;
display: flex;
align-items: center;
justify-content: center;
button {
width: 3rem;
height: 3rem;
display: flex;
align-items: center;
justify-content: center;
background-repeat: no-repeat;
background-position: center;
background-size: 3rem;
background-color: var(--primary3);
&.filter {
background-image: url('../assets/images/ico_side01.svg');
}
&.layer {
background-image: url('../assets/images/ico_side02.svg');
}
}
}
}
}
/* side-pannel */
.slidePanel {
position: fixed;
top: 4.4rem;
left: 4.3rem;
width: 54rem;
height: calc(100% - 4.4rem);
min-height: 0;
display: flex;
flex-direction: column;
background-color: var(--secondary2);
z-index: 99;
transform: translateX(0);
transition: transform .3s ease;
/* 닫힘 상태 */
&.is-closed {
transform: translateX(-100%);
.toogle::after {
transform: translate(-50%, -50%) rotate(180deg);
}
}
.tabBox {
flex-shrink: 0;
width: 100%;
padding: 1.5rem 2rem 0 2rem;
}
.tabWrap {
flex: 1;
min-height: 0;
display: none;
flex-direction: column;
&.is-active {
display: flex;
}
.tabWrapInner {
display: flex;
flex-direction: column;
flex: 1;
min-height: 100%;
.tabWrapCnt {
flex: 1 1 auto;
min-height: 0;
overflow-y: auto;
padding-bottom: 3rem;
// 필터 스위치그룹
.switchGroup {
display: flex;
flex-direction: column;
width: 100%;
.sgHeader {
display: flex;
align-items: center;
justify-content: space-between;
padding: 1.2rem 1rem;
background-color: var(--secondary1);
border-bottom: .1rem solid var(--secondary3);
.colL {
display: flex;
align-items: center;
gap: 1rem;
font-weight: var(--fw-bold);
.favship {
width: 2rem;
height: 2rem;
background: url(../assets/images/ico_favship.svg) no-repeat center / contain;
}
.btnDelDark {
padding: 0.2rem 0.6rem;
font-size: 1.1rem;
font-weight: var(--fw-regular);
color: var(--danger, #ff4d4f);
border: .1rem solid var(--danger, #ff4d4f);
border-radius: 0.4rem;
background: transparent;
cursor: pointer;
line-height: 1.4;
&:hover {
background: var(--danger, #ff4d4f);
color: #fff;
}
}
}
.toggleBtn {
display: flex;
align-items: center;
width: 2.4rem;
height: 2.4rem;
background: url(../assets/images/ico_arrow_toggle_down.svg) no-repeat center / contain;
transition: transform 0.3s ease;
&.is-open {
transform: rotate(180deg);
}
}
}
.switchBox {
overflow: hidden;
max-height: 0;
transition: max-height 0.3s ease;
&.is-open {
max-height: 500rem;
}
.switchList {
display: flex;
flex-direction: column;
width: 100%;
background-color: var(--tertiary1);
padding: 1rem;
li {
display: flex;
justify-content: space-between;
height: 2.4rem;
span {
}
}
}
}
}
}
.btnBox {
flex: 0 0 auto;
margin-top: auto;
display: flex;
justify-content: flex-end;
padding: 2rem;
}
}
.tabTop {
flex-shrink: 0;
width: 100%;
padding: 0 2rem;
.title {
font-size: var(--fs-ml);
color: var(--white);
font-weight: var(--fw-bold);
padding: 1.7rem 0;
}
// 기상패널 범례
.legend {
display: flex;
align-items: flex-start;
flex-direction: column;
gap: .4rem;
margin-bottom: 2.5rem;
.legendTitle {
font-size: var(--fs-m);
}
.legendList {
width: 100%;
border-radius: .6rem;
padding: 1.5rem;
background-color: rgba(var(--secondary4-rgb), .2);
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 1rem;
li {
display: flex;
align-items: center;
justify-content: flex-start;
font-size: var(--fs-ml);
img {
width: 2.6rem;
height: 2.6rem;
margin-right: .5rem;
}
}
}
}
}
.tabBtm {
flex: 1;
min-height: 0;
overflow-y: auto;
overflow-x: hidden;
border-top: 1px solid var(--secondary1);
padding: 3rem 2rem;
&.noLine {
overflow-x: hidden;
overflow-y: auto;
border-top: 0;
padding: 0 2rem;
}
&.noSc {
overflow-y: visible;
padding-bottom: 0;
}
.tabBtmInner {
display: flex;
flex-direction: column;
height: 100%;
min-height: 0;
.tabBtmCnt {
flex: 1 1 auto;
min-height: 0;
overflow-x: hidden;
overflow-y: auto;
padding-bottom: 2rem;
}
.btnBox {
flex: 0 0 auto;
margin-top: auto;
display: flex;
justify-content: flex-end;
gap: 1rem;
padding: 2rem 0;
&.rowSB {
justify-content: space-between;
}
button {
flex: initial;
min-width: 12rem;
}
}
}
}
// 위성/기상 메뉴 스크롤바 다크 테마
.tabBtm,
.tabBtmCnt {
&::-webkit-scrollbar {
width: 6px;
}
&::-webkit-scrollbar-track {
background: transparent;
}
&::-webkit-scrollbar-thumb {
background: rgba(var(--white-rgb), 0.3);
border-radius: 3px;
&:hover {
background: rgba(var(--white-rgb), 0.5);
}
}
scrollbar-width: thin;
scrollbar-color: rgba(255, 255, 255, 0.3) transparent;
}
}
.toogle {
position: absolute;
overflow: hidden;
z-index: 10;
top: 50%;
left: 100%;
width: 2.4rem;
height: 5rem;
border-radius: 0 1rem 1rem 0;
transform: translateY(-50%);
background-color: var(--secondary2);
border: solid 1px var(--secondary3);
&::after {
content: "";
position: absolute;
top: 50%;
left: 50%;
width: 2.4rem;
height: 2.4rem;
transform: translate(-50%, -50%);
background: url(../assets/images/ico_toggle.svg) no-repeat center / 2.4rem;
transition: transform .3s ease;
}
}
// ai모드
.panelHeader {
display: flex;
align-items: center;
padding: 0 2rem;
.panelTitle {
padding: 1.7rem 0;
font-size: var(--fs-ml);
font-weight: var(--fw-bold);
}
}
.panelBody {
display: flex;
flex: 1;
min-height: 0;
padding: 0 2rem;
.ai {
display: grid;
grid-template-columns: repeat(2, 1fr);
align-items: start;
gap: 1rem;
row-gap: 1rem;
grid-auto-rows: min-content;
width: 100%;
li {
display: flex;
align-items: center;
justify-content: flex-start;
a {
position: relative;
display: flex;
flex-direction: column;
gap: .6rem;
width: 100%;
height: auto;
padding: 2rem 1.2rem;
background-color: var(--secondary1);
border: 2px solid transparent;
border-radius: .6rem;
&.on {
background-color: var(--secondary5);
border-color: var(--primary1);
}
&:not(.on) > * {
opacity: .5;
}
.title {
display: flex;
align-items: center;
font-weight: var(--fw-bold);
img {
width: 2.2rem;
height: 2.2rem;
margin-right: .5rem;
}
}
.keyword {
font-weight: var(--fw-bold);
}
.control {
position: absolute;
top: 2rem;
right: 1.5rem;
display: flex;
align-items: center;
i {
width: .8rem;
height: .8rem;
border-radius: 50%;
background-color: var(--white);
margin-right: .5rem;
}
}
}
}
}
}
.panelFooter {
border-top: 1px solid var(--secondary1);
padding: 1rem 2rem;
}
}
}
}