티스토리 뷰

저번 시간에 이어서 상점 탑 로고를 수정하겠습니다. 탑 내비게이션을 최종적으로는 위 이미지처럼 수정하기로 했었습니다. 로고도 변경해야 할 테고, 로고의 위치도 수정해야 할 건데 반응형이기 때문에 저번 시간과 같이 미세하게 다르지만 똑같은 작업을 세 번씩 해야 하기 때문에 끝까지 읽어주시면 좋을 것 같습니다.

스마트 디자인 편집창을 열어 첫 화면을 보면 로고가 보일 것입니다. 마우스 커서를 근처에 가져가면 편집 버튼이 생깁니다. 클릭을 해봅니다.

더보기

로고를 index.html(첫 화면)에서 클릭으로 편하게 오픈 했지만, 사실은 index.html을 감싼 main.html 안에 있습니다. 바꿔 말하면 메인 레이아웃(main.html)이 index.html 의 내용을 감싸고 있습니다. 쉽게 1행의 <!--@layout(/layout/basic/main.html)-->부분을 삭제 후 저장해서 확인해보시면 어떤 이야기인지 훨씬 쉽게 이해하실 수 있을 겁니다. 그리고 저번 시간에도 언급했던 메인 레이아웃, 공통 레이아웃, 디테일 레이아웃 각각 따로인 이 레이아웃들에 똑같은 경로의 똑같은 스타일시트 (/css/module/layout/logotop.css)를 쓰고 있기 때문에 이 css를 수정했을 때 세개의 레이아웃에 똑같이 적용된다는 이야기입니다.

index.html

<!--@layout(/layout/basic/main.html)-->

<!--@css(/css/module/layout/logotop.css)-->

 

창이 하나 열리는데 속성 탭을 클릭합니다. 이미지 변경이 가능한 페이지가 보입니다. 파일 선택을 눌러 로고를 선택하고 적용 버튼을 클릭합니다. 적용하면 아주 쉽게 변하죠?

더보기

41번 행을 살펴보면,

<a href="/index.html"><img src="{$logo}" alt="{$mall_name}" /></a>

조금이라도 html을 알고 계신 분이라면 img src 다음에 분명 이미지 주소(이미지 경로)가 있어야 이미지가 보일 텐데 주소는 없고 {$logo}가 있는데 로고 이미지가 보이고 있는 이 상황.

 

카페24는 모듈이라는 것들이 존재해서 이 것들에 대해서 알고 있으면 이 모듈을 활용하기도 하고, 편의에 따라 모듈을 삭제하기도 합니다. 예를 들어 이미지 호스팅이 있어 로고 이미지를 직접 경로로 사용할 생각이 있는 경우 {$logo}를 삭제하고 이미지 경로를 주면 됩니다.

 

(이것도 마찬가지로 모든 레이아웃에 직접 경로를 적용해줘야 합니다. 그리고 이 모듈이 사용되는 곳에도 직접 경로를 적용하거나, 따로 모듈 창을 열어 로고 이미지를 다시 등록해줘야 합니다. 로고는 홈페이지 내에 많은 곳에 들어가니 가급적이면 모듈을 통해 한번만 등록해서 여기저기 보이는 게 작업 시간이 훨씬 줄고 편하겠죠.)

 

이 카페 24에서 모듈이라는 것은 웹 프로그램에 준하는 것들입니다. 제가 주로 많이 사용 했던 부분은 상품 리스트의 상품명, 상품가, 상품가격, 썸네일이 중이 보일지 소가 보일지 등등 생각보다 많은 부분에서 모듈명을 알아야 할 필요가 있었기 때문에 언급합니다.

 

하기 링크는 카페24 모듈 리스트입니다. 생각보다 이 페이지를 찾는 게 쉽지 않아 공유합니다.

https://sdsupport.cafe24.com/product/list.html?cate_no=61

로고 이미지를 쉽게 변경했지만, 위치를 변경하고 사이즈를 변경하는 것은 아주 어렵지는 않지만 이미지를 변경하는 것만큼 간단하진 않습니다. 사이트 미리보기로 돌아와 살펴보고 스마트 디자인 편집기에서 수정하고 이 작업을 반복하겠습니다. 개발자 도구를 열어 요소 선택 툴로 로고 주변을 살펴봅니다. 이 로고 이미지를 감싸고 있는 div(.topArea)의 position이 relative로 되어있습니다. 작성된 순서에 따라 배치되고 있기 때문에 이를 무시하기 위해 absolute로 수정을 할 것입니다.

더보기

실제로 제가 작업을 할 때에는 개발자 도구로 로고 이미지부터 그 주변까지 어떤 속성이 있는지 다 살펴봅니다. 이번에는 딱 원하는 위치에 로고를 놓을 것이기 때문에 position을 찾다 보니 로고 이미지를 감싸고 있는 div나 태그를 찾았습니다. 요소 선택 툴로 요소를 선택 후 스타일만 볼 것이 아니라 위의 요소란의 태그들도 확인해가면서 보면 훨씬 도움이 됩니다. 예를 들어 이미지를 클릭 후 태그를 살펴보면 구조가 img<a<h1<div(.topArea)<div(.inner)<div(#header) 이렇게 되어있고 최소 div(.topArea)까지는 태그를 선택해서 아래 나오는 스타일을 살펴볼 필요가 있습니다.

다시 스마트 디자인 편집창으로 와서 쇼핑몰 메인>메인 레이아웃>레이아웃.css를 엽니다. 5행 #header .topArea를 찾아 확인하니 확실히 relative로 되어있습니다.

더보기

창을 여는 방법은 세 가지가 있습니다. 보이는 페이지의 경로를 따라 파일 열기로 계속 계속 오픈하는 방법. 예를 들어 편집창 첫 페이지는 무조건 index.html인데 1행에 보면 <!--@layout(/layout/basic/main.html)-->이 것이 메인 레이아웃 html입니다. 이것을 파일열기로 클릭하여 메인 레이아웃에 들어가면, 18행에  <!--@css(/layout/basic/css/layout.css)-->가 있습니다. 제가 작업할 때는 주로 이렇게 작업하지만, ftp나 폴더 탐색처럼 경로를 볼 수 있도록 편집창 좌측에 전체 화면 보기 탭이 있습니다. 이것을 클릭하셔서, 레이아웃(layout)>기본레이아웃(basic)>css>layout.css이렇게 찾는 방법도 있습니다. 하지만 사이트의 구조 파악이 되어있지 않다면 찾기 쉽지 않겠지요. (경로가 다르고 파일명이 같은 경우도 많습니다.) 마지막 방법은 마찬가지로 편집창 좌측에 있는 화면명 검색으로 찾는 방법이 있습니다. 

layout.css를 검색하면 이미지처럼 검색되어 보입니다. 이것도 검색할 파일의 명과 위치를 어느 정도 파악하고 있다는 전제하에 사용할 수 있습니다.

5행의 #header .topArea에 position을 absolute로 변경 후 저장(Ctrl+s)합니다. 그리고 다시 사이트 미리보기로 와서 F5로 새로고침 후 확인을 합니다.

확인하니 작성된 순서가 풀려 딱히 설정이 없는 .topArea div는 h1의 속성대로 보이고 있습니다.

개발자 도구로 요소 선택을 해서 구조를 확인합니다. h1의 상위 div인 .topArea에 딱히 설정이 없으니 h1의 @media (min-width: 1025px) .xans-layout-logotop class가 그대로 반영된 상태입니다. 가로 800px 위 간격 53px 아래 간격 31px 이미지 사이즈 높이 40px 높이 도합 124px에 text-aling은 center 한마디로 가로 800px 세로 124px 가로 중앙 정렬인 h1이 .topArea의 absolute포지션에 위치 설정이 없으니 무조건 좌측 상단에 붙어있는 모습인 거죠. 다시 편집창으로 돌아갑니다.

쇼핑몰 메인&gt;메인 레이아웃&gt;logotop.css

메인 레이아웃 페이지의 40행 <!--@css(/css/module/layout/logotop.css)-->를 파일 열기로 열어봅니다. 모바일/태블릿 버전 밑에 PC버전이 있네요.

다시 미리 보기 사이트로 건너와 h1의 위치를 수정해봅니다. width는 h1의 내용물에 딱 맞아지도록 100%로 수정하고 padding을 이용해 위치를 조절합니다. padding은 top 15px 정도면 알맞아 보이네요.

10행 .xans-layout-logotop에 width는 100%로, padding은 15px 0px 0px로 수정합니다. 

그리고 로고 이미지 사이즈가 너무 작아 보여서 조금 키워주고 싶으니 이번에야 말로 img 태그를 클릭하여 스타일을 확인합니다. 로고 이미지의 최대 높이가 27px로 되어 있어 이미지가 작네요. 가로 최대 사이즈는 딱히 신경 쓰지 않아도 될 것 같습니다.

이미지 최대 높이를 54px로 수정해보겠습니다. 저는 이 정도 사이즈가 마음에 드네요. 다시 편집창으로 돌아갑니다.

아까 보던 화면 그대로 12행에 .xans-layout-logotop img 로고 이미지 관련 스타일이 있네요.

max-height를 54px로 수정 후 저장합니다.

수정을 하고 보니 로고 사이즈에 비해서 내비게이션의 높이가 조금 적은 게 아닌가 싶어 사이즈를 늘립니다. (탑 내비게이션 높이를 조절하는 방법)

개발자 도구 요소 선택 툴로 내비게이션을 선택합니다. #header .navigation의 속성을 보면 높이가 64px로 다소 좁은데 80px로 늘려보고 괜찮아 보이니 바로 수정하도록 하겠습니다.

편집 창의 layout.css로 돌아와 PC버전을 살펴봅니다. 92행에 #header .navigation이 있네요.

min-height 80px로 수정하고 저장하겠습니다. 저장 후 미리 보기 사이트에서 확인하신 후 스크롤을 한번 해주시기 바라겠습니다.

스크롤을 내리니 로고는 사라지고, 내비게이션 바의 높이가 60px로 돌아왔습니다. 스크롤 시 position의 fixed속성으로 내비게이션 바를 고정해놨습니다. 그런데 그저 고정하는 것이 아니라 속성이 또 적혀 있어서 이 fixed class 에서도 높이를 수정해줘야 합니다. 내비게이션 바가 스크롤시 고정되는 스타일은 최근 쇼핑몰에서 많이 사용하는 스타일입니다. 그런 이유로 수정을 하고 있었는데, 살펴보니 태블릿과 모바일 버전에서는 스크롤을 해도 고정 되질 않던데 이 부분도 나중에 수정하겠습니다. 우선은 PC 버전을 수정하겠습니다.

우선 높이부터 수정하겠습니다. 요소 선택 툴로 이미지의 2번 위치를 클릭합니다. 그러면 #header.fixed의 스타일을 확인할 수 있는데, 우선 높이를 80px로 스크롤 전과 동일하게 맞추겠습니다. (로고 이미지의 사이즈를 고려해서)

편집 창의 layout.css로 돌아와 PC버전 90행에 높이를 60px에서 80px로 수정 후 저장합니다.

 

이제 스크롤을 다시 위로 올려 내비게이션 바를 확인하면 로고 때문에 바의 높이를 수정했더니 메뉴나 아이콘의 위치가 중앙이 아니라서 영 불편합니다. 높이를 대략적으로 중앙 정렬하겠습니다.

개발자 도구에서 보니 .navigation__category li라는 class를 찾아서 padding값을 수정해야겠네요. 지금은 위에서 23px이라 내비게이션 바의 높이가 80px인 것을 감안하면 확실히 높은 위치에 있긴 하네요.

개발자 도구에서 여러분이 직접 원하는 수치를 조절해 보시는 것을 추천해드립니다. 스타일의 수치에 더블 클릭을 하면 직접 수정해 보실 수 있습니다. (실제 사이트의 서버에 적용되어 저장되는 것이 아닙니다. 그렇기 때문에 편집 툴에서 수정 후 반드시 저장해주세요.) 저는 padding-top이 32px이면 알맞아 보이네요.

메인 레이아웃에서 45행 <!--@import(/layout/basic/navigation.html)-->을 열어 확인합니다. 2행에 .navigation__category li가 확인되네요.

padding에 80px 0px 0px 수정 후 저장합니다.

이제 아이콘들도 위치를 수정해보겠습니다. 아이콘들의 class들은 전편에서 많이 다뤘기 때문에 익숙하실 겁니다. 

 

#header .navigation__util 기억나실까요? top 20px인 부분을 30px로 수정해보니 괜찮은 것 같습니다.

편집 창의 layout.css에 미디어 쿼리로 작성되어있습니다. 저희는 우선 pc버전을 확인합니다.

#header .navigation__util 아이콘들에 높이 20px을 30px로 수정하고 저장합니다.

이제 사이드 메뉴 버튼의 위치를 수정합니다. #header .navigation .btnNav 익숙한 class네요. 마찬가지로 top 20px을 30px로 수정하겠습니다.

이미지와 같이 수정을 완료하셨다면 저장해주세요. 이제 다시 스크롤을 내려보겠습니다. 지금 상태에서는 스크롤을 내렸을 때 로고가 나오지 않습니다.

원인을 살펴보니 #header.fixed .navigation에 background가 있어서 로고 이미지가 가려지고 있는 것 같습니다. 실제로 속성을 없애니 잘 보입니다.

그것도 아니면 z-index 속성을 활용하는 방법도 있습니다. 어차피 내비게이션 fixed의 background는 삭제할 거니 삭제하는 방향으로 수정하겠습니다.

#header.fixed .navigation 은 편집 창의 layout.css에 있었지요. 저는 이미지에 보시면 설명을 위해 주석처리를 했지만, 여러분은 삭제해주시고 저장해주세요. 여기까지 하면 PC버전은 원하던 디자인으로 수정이 완료되었습니다. 태블릿도 모바일도 이런 방식으로 수정을 해주시면 됩니다.

 

이제 모바일 버전, 태블릿 버전의 로고 이미지 위치 및 사이즈를 조절하고 내비게이션 바를 고정하는 작업까지 하면 완료되겠습니다. 빠른 설명으로 진행하겠습니다.

 

header 고정 방법

layout.css에서 위 이미지에 표시된 두 줄을 복사합니다. 위 두 줄은 PC버전의 header고정 내용입니다. 이미지의 100행 끝에 background-color:rgba(255,255,255,0.8)을 추가했습니다. 스크롤 시 고정된 header 배경의 색상이 화이트에 0.8의 알파 값을 갖는 수치입니다.

#header.fixed { overflow:hidden; position:fixed; top:0; width:100%; height:80px; z-index:1000; transition:.5s; background-color: rgba(255,255,255,0.8); }
#header.fixed .navigation { position:absolute; top:0; left:0px; right:0px; /*background:#fff; 배경 컬러 삭제*/ }

복사한 두 줄을 메모장이나 다른 곳으로 옮겨서 #header.fixed .navigation의 left 및 right를 0px로 수정하여 다시 복사합니다. 이렇게 복사된 내용을 layout.css에 보이는 PC 버전과 최상단 제외 모든 버전의 안에 붙여 넣기 합니다.

/********************* Mobile *********************/
@media all and (max-width:767px) {
    /* responsive class */
    .RTI, .RTB, .RTIB { display:none !important; }
    .RMB { display:block !important; }
    .RMI { display:inline !important; }
    .RMIB { display:inline-block !important; }

    #header.fixed { overflow:hidden; position:fixed; top:0; width:100%; height:60px; z-index:1000; transition:.5s; rgba(255,255,255,0.8);}
    #header.fixed .navigation { position:absolute; top:0; left:0px; right:0px; /*background:#fff;*/ }
    
    #header .navigation .btnNav { right:16px; }
    #header .navigation__util { right:60px;}
    }
/********************* Mobile / Tablet *********************/
@media all and (max-width:1024px) {
    /* responsive class */
    .RWI, .RW, .RWB, .RWIB { display:none !important; }
    .RTMB { display:block !important; }
    .RTMI { display:inline-block !important; }

    #capp-shop-new-product-optionselect-layer { position:fixed !important; top:0 !important; right:0 !important; left:auto !important; width:100% !important; height:100% !important; margin:0 !important; }

    #header { position:relative; height:60px; padding:20px 0 0; box-sizing:border-box; }
    
    #header.fixed { overflow:hidden; position:fixed; top:0; width:100%; height:60px; z-index:1000; transition:.5s; rgba(255,255,255,0.8);}
    #header.fixed .navigation { position:absolute; top:0; left:0px; right:0px; /*background:#fff;*/ }
    
    #header .navigation .btnNav {position:absolute; top:18px;  }
    #header .navigation__util { position:absolute;  top:18px; }
    .bottom-nav { z-index:901; position:fixed; bottom:0; width:100%; height:52px; -webkit-transform: translate3d(0,0,0);transform: translate3d(0,0,0);-webkit-transition: -webkit-transform .3s linear,padding-bottom .3s linear;transition: transform .3s linear,padding-bottom .3s linear; }
    .bottom-nav--hide { -webkit-transform: translate3d(0,60px,0); transform: translate3d(0,60px,0); }
    .bottom-nav__tabBar { display:flex;justify-content: space-between; height:52px; padding:14px 26px 0; box-sizing:border-box; background:#fff; -webkit-transform: translate3d(0,0,0); transform: translate3d(0,0,0); -webkit-transition: -webkit-transform .3s linear,padding-bottom .3s linear; transition: transform .3s linear,padding-bottom .3s linear; }
    .bottom-nav__tabBar li a,
    .bottom-nav__tabBar li button { position:relative; display:block; white-space:nowrap; width:24px; height:24px; font-size:1px; line-height:1px; color:transparent; text-indent:150%; vertical-align:top; background:none; }
    .bottom-nav__tabBar li button:focus { outline:0; }
    .bottom-nav__tabBar .count { display:block; position:absolute; top:12px; right:-5px; width:16px; height:16px; font-size:11px; color:#fff; text-align:center; text-indent:0; line-height:15px; border-radius:50%; background:#000; }
    .bottom-nav__top { opacity:0; visibility:hidden; position:absolute; top: -72px; right:16px; width:54px; height:54px; padding:15px 0 0; font-size:14px; border:1px solid #e3e3e3; box-sizing:border-box; text-align:center; text-transform: uppercase; background:rgba(256,256,256,0.9); transition:.5s; }
    .bottom-nav__top a { display:block; }
    .bottom-nav__top .icon.icoArrowTop { display:block; margin:0 auto; }
    .bottom-nav__top--show { opacity:1; visibility:visible; }
    .bottom-nav__top span { display:block; margin:4px 0 0; }
    #detail .bottom-nav { z-index:401; }
    #detail .bottom-nav--hide .bottom-nav__top { opacity:0; }
    .button--fixed .bottom-nav__tabBar { display:none; }
    .button--fixed #header.fixed { overflow:hidden; position:fixed; top:0; width:100%; height:60px; z-index:1000; transition:.5s; }
    .button--fixed #header.fixed .navigation { position:absolute; top:0; left:0; right:0; background:#fff; }
    #contents { position:relative; padding-bottom:100px; }
    main#contents { padding-bottom:66px; }
    #footer { padding:0 0 82px; }
    #topBanner { height:auto; }
    #topBanner .desc { overflow:visible; height:auto; line-height:1.67; }
    #topBanner .btnClose { right:16px; top:12px; }
    
    .xans-layout-mobileaction { position:absolute; top:45px; left:16px; }
    .xans-layout-mobileaction a { overflow:hidden; display:block; text-indent:-150%; color:transparent; font-size:1px; line-height:1px; white-space:nowrap; }
    #detail .xans-layout-mobileaction { top:16px; }
}
/********************* Tablet *********************/
@media all and (min-width:768px) and (max-width:1024px) {
    /* responsive class */
    .RMI, .RMB, .RMIB { display:none !important; }
    .RTI { display:inline !important; }
    .RTB { display:block !important; }
    .RTIB { display:inline-block !important; }
    
    #header.fixed { overflow:hidden; position:fixed; top:0; width:100%; height:60px; z-index:1000; transition:.5s; background-color: rgba(255,255,255,0.8); }
    #header.fixed .navigation { position:absolute; top:0; left:0px; right:0px; /*background:#fff;*/ }
    
    #header .navigation .btnNav { right:24px;  }
    #header .navigation__util { right:80px; }
}

이렇게 붙여 넣기를 완료하셨다면 저장 후 사이트 미리보기로 확인합니다. 별다른 이상이 없으면 로고로 넘어갑니다.

편집창에서 logotop.css를 열어 모바일 및 태블릿 버전에서 이미지 로고 이미지 사이즈를 수정합니다.

/********************* Mobile / Tablet *********************/
@media all and (max-width:1024px) {
.xans-layout-logotop { text-align:center; }
.xans-layout-logotop a { font-size:27px; line-height:1; color:#000; font-weight:bold; text-decoration:none; font-style:normal; }
.xans-layout-logotop img { max-width:800px; max-height:40px; }
}

저는 최대 높이 40px로 수정했습니다. 저장 후 보면 로고 사이즈는 커졌을 겁니다. 하지만 좌측과 높이가 전혀 지정되어있지 않습니다.

다시 layout.css를 열어 모바일 및 태블릿 버전의 ID header에서 padding을 확인합니다. padding-top 20px을 10px로 수정했습니다.

/********************* Mobile / Tablet *********************/
@media all and (max-width:1024px) {
    /* responsive class */
    .RWI, .RW, .RWB, .RWIB { display:none !important; }
    .RTMB { display:block !important; }
    .RTMI { display:inline-block !important; }

    #capp-shop-new-product-optionselect-layer { position:fixed !important; top:0 !important; right:0 !important; left:auto !important; width:100% !important; height:100% !important; margin:0 !important; }

    #header { position:relative; height:60px; padding:10px 0 0; box-sizing:border-box; }
   .
   .
   .

모바일과 태블릿 모두에 동일하게 padding-top: 10px이 적용됩니다. 높이 설정은 됐으니 좌측 간격으로 넘어갑니다.

layout.css를 보면 딱히 #header .topArea에 관한 미디어 쿼리 내용이 없습니다. 이를 활용해 간격 조정을 하도록 하겠습니다. 개발자 도구에서 테스트 해보니 태블릿은 왼쪽 26px 모바일은 왼쪽 16px이면 알맞아 보였습니다.

#header .topArea { left:26px; } 은 태블릿에 #header .topArea { left:16px; } 은 모바일에 작성합니다.

/********************* Mobile *********************/
@media all and (max-width:767px) {
    /* responsive class */
    .RTI, .RTB, .RTIB { display:none !important; }
    .RMB { display:block !important; }
    .RMI { display:inline !important; }
    .RMIB { display:inline-block !important; }

    #header .topArea { left:16px; }
    
    #header.fixed { overflow:hidden; position:fixed; top:0; width:100%; height:60px; z-index:1000; transition:.5s; }
	#header.fixed .navigation { position:absolute; top:0; left:0px; right:0px; /*background:#fff;*/ }
    
    #header .navigation .btnNav { right:16px; }
    #header .navigation__util { right:60px;}
}
/********************* Tablet *********************/
@media all and (min-width:768px) and (max-width:1024px) {
    /* responsive class */
    .RMI, .RMB, .RMIB { display:none !important; }
    .RTI { display:inline !important; }
    .RTB { display:block !important; }
    .RTIB { display:inline-block !important; }
    
    #header .topArea { left:26px; }
    
    #header.fixed { overflow:hidden; position:fixed; top:0; width:100%; height:60px; z-index:1000; transition:.5s;  background-color: rgba(255,255,255,0.8)}
	#header.fixed .navigation { position:absolute; top:0; left:0px; right:0px; /*background:#fff;*/ }
    
    #header .navigation .btnNav { right:24px;  }
    #header .navigation__util { right:80px; }
}

이렇게 입력되었다면 저장 후 확인하시면 되겠습니다! 처음에는 똑같은 작업을 반복하느라 시간도 오래 걸리고 힘들게 느껴질 수 있지만 사이트 구조에 익숙해지면 작업 속도가 점점 빨라집니다. 문제가 있거나, 막히시는 부분, 설명이 개선되었으면 하는 부분이 있으시면 댓글 남겨주세요. 긴 글 읽어주셔서 감사합니다.

댓글
공지사항