파일 구조/명
- index.html :전체 마크업
- asset
1) css : scss 작성 후 watch sass를 해주면 style.css에 모든 css코드가 나타남 - 수정 해줄 필요 x
2) images : 필요한 이미지 포토샵에서 크롭 후 저장
3) scss : style 코드 작성
- abstracts
- _mixin.scss
- _var.scss
- base
- _preset.scss
- _reset.scss
- _typo.scss
- component
- _buttons.scss
- _title.scss
- layout
- _footer.scss
- _header.scss
- pages
- _home.scss
- style.scss
1) 시안 받기
2) 구현가능한지 기획문서나 디자이너 의도파악 협의
3) 이미지 크롭jpg,png , 폰트파일제공(ttf,otf) → woff,woff2,eot,svg ..등등
4) 마크업 → css → js(X)
5) 혼자 검수
lh의 오차가 크지 않을 때
(line-height : Xpx) - (폰트의 실제 높이 : Ypx) = 결과값 (X-Y)px
위아래 공백 나눔 : (X-Y) /2
lh의 오차가 크거나 auto 일 때
lh을 1(=폰트px)로 잡고, 폰트의 실제 크기를 m으로 재서 /2
1) 래핑 할 곳을 드래그하고
2) ctrl shift p 눌러서 약어로 래핑
3) 엔터 후 .묶어줄 클래스 (.inner)
4) 엔터
& : 붙여쓰고 싶을 때 사용
1) 부모를 불러줄 때
<section class="sc-recommend"> <a href="" class="link-detail">자세히 알아보기</a>
.link-detail{ .sc-recommend &{ } }
부모를 불러줄 땐, 부모&를 해주면 된다
2)왕따선택자a{ &+a{} }
a+a{} 왕따선택자와 같다
3) 자식 속성을 부여할 때a{ &.aa{} }
a .aa{} 로 자식속성을 부여 할 수 있다
그 외
- scss는 줄바꿈을 따로 안해줘도 된다. (style.css에서 자동 줄바꿈 되어 있음)
- lorem10 lorem20을 치면 영문 자동 완성 글자가 생성된다
- 폰트 : serif 궁서 / san serif 기본서체
- 이미지 아래 공백 : img{display: block;} = vertical align:top;
<head>
<link rel="stylesheet" href="./asset/css/style.css">
</head>
wrapper : 화면을 줄였을 때 최소의 크기(min-width)를 잡아놓기 위해 사용
<body>
<div class="wrapper">
<header class="header">
<div class="group-util">
<div class="inner">
<a href="">Login</a>
<a href="">Join us</a>
<a href="">Mypage</a>
<a href="">Cart</a>
</div>
</div>
<div class="group-flex">
<h1 class="logo"><a href=""><span class="blind">gglab</span></a></h1>
<div class="sns-area">
<a href="" class="link-sns ic-facebook"><span class="blind">페이스북 바로가기</span></a>
<a href="" class="link-sns ic-blog"><span class="blind">블로그 바로가기</span></a>
<a href="" class="link-sns ic-insta"><span class="blind">인스타그램 바로가기</span></a>
<a href="" class="link-sns ic-youtube"><span class="blind">유튜브 바로가기</span></a>
</div>
<div class="search-area">
<a href="" class="link-search"><span class="blind">검색</span></a>
</div>
</div>
<div class="group-nav">
<nav class="inner">
<ul class="gnb-list">
<li class="gnb-item"><a href="">ABOUT US</a></li>
<li class="gnb-item"><a href="">PRODUCT</a></li>
<li class="gnb-item"><a href="">COMMUNITY</a></li>
<li class="gnb-item"><a href="">CS CENTER</a></li>
<li class="gnb-item"><a href="">CONTACT</a></li>
<li class="gnb-item"><a href="">STORE</a></li>
</ul>
</nav>
</div>
</header>
.
<main class="container">
<section class="sc-visual">
<h2 class="blind">메인슬라이드</h2>
<a href="" class="link-slide">
<img src="http://gglab.co.kr/_data/banner/5c0cb3a6c61508a6b5ef820492389644.jpg" alt="">
</a>
<a href="" class="btn-nav prev"><span class="blind">이전</span></a>
<a href="" class="btn-nav next"><span class="blind">다음</span></a>
<div class="pagination">
<span class="bullet active"></span>
<span class="bullet"></span>
<span class="bullet"></span>
<span class="bullet"></span>
</div>
</section>
.
- group-content로 각각의 블럭 (제목~자세히알아보기) 묶어주기
- h3(or strong) sc-title으로 제목 부여
- wrap으로 이미지/설명+버튼 묶어줌
- img-box 이미지
- info-box설명+버튼
- desc : p태그로 설명 작성
- link-detial : a태그로 버튼 생성
<div class="inner">
<section class="sc-intro">
<h2 class="blind">서비스 소개</h2>
<div class="group-content">
<h3 class="sc-title">About us</h3>
<div class="wrap">
<div class="img-box">
<img src="./asset/images/intro1.jpg" alt="">
</div>
<div class="info-box">
<p class="desc">
좋은제품연구소가 추구하는 좋은 제품이란 5G를 만족하는 제품입니다.<br><br>
좋은 생각(Good Think), 좋은 품질(Good Quality), 좋은 디자인(Good Design), 좋은 가격(Good Price), 좋은 서비스(Good Service)로 늘 소비자의 입장에서 제품을 바라보고 생각하며, 고객의 마음을 제품에 적용하고자 합니다.
</p>
<a href="" class="link-detail">자세히 알아보기</a>
</div>
</div>
</div>
<div class="group-content">
<h3 class="sc-title">Monitor</h3>
<div class="wrap reverse">
<div class="img-box">
<img src="./asset/images/intro2.jpg" alt="">
</div>
<div class="info-box">
<p class="desc">
좋은 제품 연구소 AMF는 많은 고객님의 니즈와 모니터 시장의 제품을 분석하여, 사실적이고 성능이 뛰어난 제품들을 고객님들께 부담없이 제공하기 위해서 최선을 다 하고 있습니다.
</p>
<a href="" class="link-detail">자세히 알아보기</a>
</div>
</div>
</div>
<div class="group-content">
<h3 class="sc-title">TV</h3>
<div class="wrap">
<div class="img-box">
<img src="./asset/images/intro3.jpg" alt="">
</div>
<div class="info-box">
<p class="desc">
좋은 제품 연구소 QUQU는 기존의 UHD TV를 많은 고객님께 합리적인 가격으로 제공하기 위해 다양한 제품을 개발 중입니다.
</p>
<a href="" class="link-detail">자세히 알아보기</a>
</div>
</div>
</div>
<div class="group-content">
<h3 class="sc-title">Home appliances</h3>
<div class="wrap reverse">
<div class="img-box">
<img src="./asset/images/intro4.jpg" alt="">
</div>
<div class="info-box">
<p class="desc">
좋은 제품 연구소 QUQU는 UHD TV 및 다양한 생활가전도 고객님들께 제공하기 위해 많은 제품들을 개발중입니다.
</p>
<a href="" class="link-detail">자세히 알아보기</a>
</div>
</div>
</div>
</section>
</div>
.
- group-content bg-○로 각각의 블럭 (박스~자세히알아보기) 묶어주기
- inner로 묶어 w,m0auto안으로 박스가 형성될 수 있게
- info-box로 제목+설명+버튼 묶어줌
- h3 title으로 제목
- p desc로 설명
- link-detial : a태그로 버튼 생성
<section class="sc-recommend">
<h2 class="sc-title">추천제품</h2>
<div class="group-content bg-monitor">
<div class="inner">
<div class="info-box">
<h3 class="title">AMF24PV144</h3>
<p class="desc">
이 제품은 배틀그라운드 및 FPS에 최적화 되어 있는 144Hz주사율을 가지고 있는 제품으로써 게임 환경에 가장 어울리는 제품이며, 또한 기존에 모니터 디자인에 많은 차이점을 두어 Z 스탠드라는 새로운 디자인에 도전했습니다.
</p>
<a href="" class="link-detail">자세히 알아보기</a>
</div>
</div>
</div>
<div class="group-content bg-tv">
<div class="inner">
<div class="info-box">
<h3 class="title">G65N4K</h3>
<p class="desc">
좋은 제품 연구소 G65N4K는 UHD TV으로써 대화면으로 즐기는 선명한 화질과 다양한 포트로 PS4 및 엑스박스 , USB로 연결 후 게임 및 영화, IPTV를 즐길 수 있는 제품입니다.
</p>
<a href="" class="link-detail">자세히 알아보기</a>
</div>
</div>
</div>
<div class="group-content bg-air">
<div class="inner">
<div class="info-box">
<h3 class="title">에어프라이기</h3>
<p class="desc">
좋은제품연구소 GA-10는 오픈형 에어프라이기 로 10L의 대용량 에어프라이기입니다.
</p>
<a href="" class="link-detail">자세히 알아보기</a>
</div>
</div>
</div>
</section>
.
- class를 매겨줄 때 list 다음은 item으로, event-item으로 li class 생성
- link-event로 a태그를 부여해 전체적으로 클릭이 가능하게
- img-box와 info-box 두가지로 나누어 div 형성
- img-box 안 img 삽입- info-box : 기간, 제목, 설명
- em태그로 기간 설정
- strong태그로 제목 설정
- p태그로 설명- span태그로 link-detail 버튼 생성
이유 : a태그 안에 a태그를 만드는 것은 불가능. a태그 안에 a태그를 만들시, 클릭이 안됨. span태그를 사용해줘야 함.
<div class="inner">
<section class="sc-event">
<h2 class="blind">이벤트</h2>
<ul class="event-list">
<li class="event-item">
<a href="" class="link-event">
<div class="img-box">
<img src="./asset/images/event.jpg" alt="">
</div>
<div class="info-box">
<em class="term">[2018.12.01 ~ 2018.12.26]</em>
<strong class="title">크리스마스 랜덤박스 증정 이벤트</strong>
<p class="desc">좋은제품연구소가 크리스마스를 맞이하여 랜덤박스 증정 이벤트를 진행한다. 모니터와 TV 구입자를 대상으로 진행하는 이번 이벤트는 총 200분ㅇㅇㅇㅇㅇㅇ
KXG-언더독 모니터와 TV(일부 제품 제외) 구입자를 대상으로 진행하는 이번 이벤트는 총 200분에게 커브드 모니터, 언더독 게이밍 체어, 블루투스 이어폰, 게이밍 스툴, QX260 번지, 게이밍 장패드를 랜덤박스를 통해 증정한다.
</p>
</div>
<span href="" class="link-detail">자세히 알아보기</span>
</a>
</li>
<li class="event-item">
<a href="" class="link-event">
<div class="img-box">
<img src="./asset/images/event.jpg" alt="">
</div>
<div class="info-box">
<em class="term">[2018.12.01 ~ 2018.12.26]</em>
<strong class="title">크리스마스 랜덤박스 증정 이벤트</strong>
<p class="desc">좋은제품연구소가 크리스마스를 맞이하여 랜덤박스 증정 이벤트를 진행한다. 모니터와 TV 구입자를 대상으로 진행하는 이번 이벤트는 총 200분ㅇㅇㅇㅇㅇㅇ
KXG-언더독 모니터와 TV(일부 제품 제외) 구입자를 대상으로 진행하는 이번 이벤트는 총 200분에게 커브드 모니터, 언더독 게이밍 체어, 블루투스 이어폰, 게이밍 스툴, QX260 번지, 게이밍 장패드를 랜덤박스를 통해 증정한다.
</p>
</div>
<span href="" class="link-detail">자세히 알아보기</span>
</a>
</li>
<li class="event-item">
<a href="" class="link-event">
<div class="img-box">
<img src="./asset/images/event.jpg" alt="">
</div>
<div class="info-box">
<em class="term">[2018.12.01 ~ 2018.12.26]</em>
<strong class="title">크리스마스 랜덤박스 증정 이벤트</strong>
<p class="desc">좋은제품연구소가 크리스마스를 맞이하여 랜덤박스 증정 이벤트를 진행한다. 모니터와 TV 구입자를 대상으로 진행하는 이번 이벤트는 총 200분ㅇㅇㅇㅇㅇㅇ
KXG-언더독 모니터와 TV(일부 제품 제외) 구입자를 대상으로 진행하는 이번 이벤트는 총 200분에게 커브드 모니터, 언더독 게이밍 체어, 블루투스 이어폰, 게이밍 스툴, QX260 번지, 게이밍 장패드를 랜덤박스를 통해 증정한다.
</p>
</div>
<span href="" class="link-detail">자세히 알아보기</span>
</a>
</li>
<li class="event-item">
<a href="" class="link-event">
<div class="img-box">
<img src="./asset/images/event.jpg" alt="">
</div>
<div class="info-box">
<em class="term">[2018.12.01 ~ 2018.12.26]</em>
<strong class="title">크리스마스 랜덤박스 증정 이벤트</strong>
<p class="desc">좋은제품연구소가 크리스마스를 맞이하여 랜덤박스 증정 이벤트를 진행한다. 모니터와 TV 구입자를 대상으로 진행하는 이번 이벤트는 총 200분ㅇㅇㅇㅇㅇㅇ
KXG-언더독 모니터와 TV(일부 제품 제외) 구입자를 대상으로 진행하는 이번 이벤트는 총 200분에게 커브드 모니터, 언더독 게이밍 체어, 블루투스 이어폰, 게이밍 스툴, QX260 번지, 게이밍 장패드를 랜덤박스를 통해 증정한다.
</p>
</div>
<span href="" class="link-detail">자세히 알아보기</span>
</a>
</li>
</ul>
</section>
.
- wrap으로 이미지imgbox와 설명+버튼infobox를 묶어줌
- img-box img로 이미지 삽입
- info-box로 설명+자세히알아보기 버튼 생성
- strong title로 제목
- p desc로 설명
- link-detail로 a태그 버튼 생성
- a태그 btnnav 이전, 다음 생성- div태그 pagination으로 하단바 생성
- 도형은 span태그 사용, bullet active로 색상 있는 하단바 class로 구분
- btn nav와 bullet을 sc-review 아래에 주지 않고 group-content 아래 준 이유 : 좌우버튼과 하단바의 중앙을 보면 이미지+설명블럭의 중간으로 보이기 때문에, h2태그의 여백까지 포함하면 정확한 위치를 맞추기 번거로움.
<section class="sc-review">
<h2 class="sc-title">Best Reviews</h2>
<div class="group-content">
<div class="wrap">
<div class="img-box">
<img src="./asset/images/content.jpg" alt="">
</div>
<div class="info-box">
<strong class="title">GGLAB 에어프라이기 솔직 구매후기!!</strong>
<p class="desc">
에어프라이기를 살까 말까 엄청 고민하다가, 이번에 GGLAB 신년 이벤트를 한다길래 저렴한 가격에 구입했어요!! 에어프라이어로 감자튀김을 만들어 먹었는데, 아래로 기름이 쫙 빠지면서 바삭하고 맛있게 구워지더라구요~ 남편 안주로도, 한끼 식사로도, 너무 좋습니다! GGLAB에서 에어프라이어 구매하길 100번 잘했어요! 구매 고민하시는 분들은 지금 이벤트
중이니까 바로 구입하세요!! 가성비 최고에요 ~ 요리의 품질이 달라졌어요 만족… .100%
</p>
<a href="" class="link-detail">자세히 알아보기</a>
</div>
</div>
<a href="" class="btn-nav prev"><span class="blind">이전</span></a>
<a href="" class="btn-nav next"><span class="blind">다음</span></a>
<div class="pagination">
<span class="bullet active"></span>
<span class="bulle"></span>
<span class="bullet"></span>
<span class="bullet"></span>
</div>
</div>
</section>
.
- section 밑에는 h2, 보여지니까 blind 안함
- ul은 ~list, li는 ~item으로 class명 지정
- 클릭할 수 있게 li 밑에 a태그로 묶음
- 내용은 span태그로 작성
- a태그로 더보기 버튼 만들고, blind로 설명 작성
<div class="group-row">
<section class="sc-board">
<h2>News</h2>
<ul class="board-list">
<li class="board-item">
<a href="">
<span class="date">2019. 01. 03</span>
<span class="text">좋은제품연구소 홈페이지 리뉴얼 안내</span>
</a>
</li>
<li class="board-item">
<a href="">
<span class="date">2018. 12. 28</span>
<span class="text">2019년 1월 좋은제품연구소 휴무 안내</span>
</a>
</li>
<li class="board-item">
<a href="">
<span class="date">2018. 12. 20</span>
<span class="text">크리스마스 좋은제품연구소 고객센터 휴무 안내</span>
</a>
</li>
<li class="board-item">
<a href="">
<span class="date">2018. 12. 28</span>
<span class="text">2019년 1월 좋은제품연구소 휴무 안내</span>
</a>
</li>
</ul>
<a href="" class="link-more"><span class="blind">더보기</span></a>
</section>
<section class="sc-board">
<h2>Download</h2>
<ul class="board-list">
<li class="board-item">
<a href="">
<span class="date">2019. 01. 03</span>
<span class="text">AMF24PV144 사용매뉴얼 입니다.</span>
</a>
</li>
<li class="board-item">
<a href="">
<span class="date">2018. 12. 28</span>
<span class="text">AMF24PV144 사용매뉴얼 입니다.</span>
</a>
</li>
<li class="board-item">
<a href="">
<span class="date">2018. 12. 20</span>
<span class="text">AMF24PV144 사용매뉴얼 입니다.</span>
</a>
</li>
<li class="board-item">
<a href="">
<span class="date">2018. 12. 28</span>
<span class="text">AMF24PV144 사용매뉴얼 입니다.</span>
</a>
</li>
</ul>
<a href="" class="link-more"><span class="blind">더보기</span></a>
</section>
</div>
</div>
</main>
.
- group-info는 크게 h2로고 / adress아래 설명로 나뉨
- h2로 logo클래스 생성해주고, 로고 넣기 위해 blind처리
- address태그 생성해서 설명 3줄 묶어줌
- p태그 사이 바는 i태그로 생성 i태그는 디자인요소
- group-css는 모두 글자로 형성, h3제목 / span시간 / a태그 전화번호로 나뉨
- h3으로 제목 생성
- span태그로 영업시간 작성
- a태그로 전화번호 생성
<footer class="footer">
<div class="inner">
<div class="group-info">
<h2 class="logo"><a href=""><span class="blind"></span></a></h2>
<address class="addr-area">
<p>㈜좋은제품연구소<i class="bar"></i>대표 : 박현주<i class="bar"></i>주소 : 서울특별시 강서구 방화대로21길 64 (공항동) 1층</p>
<p>대표번호 : 070-7733-1029<i class="bar"></i>FAX : 031-312-8689<i class="bar"></i><a href="mailto:phj@gglab.co.kr">phj@gglab.co.kr</a></p>
<p class="copy">Copyrights by ㈜좋은제품연구소. All rights reserved. Designed & Hosted by MODOOM.</p>
</address>
</div>
<div class="group-cs">
<h3>Customer Center</h3>
<span class="desc">09:00 ~ 18:00 (주말/공휴일 휴무)</span>
<a href="tel:070-7733-1029">070-7733-1029</a>
</div>
</div>
</footer>
</div>
</body>
</html>
@import './abstracts/var'; //변수세팅
@import './abstracts/mixin'; //소스요술상자
@import './base/typo'; //폰트들
@import './base/reset'; //리셋
@import './base/preset'; //미리셋팅하는 common
@import './layout/header'; //푸터
@import './layout/footer'; //헤더
@import './component/buttons'; //버튼모음
@import './component/title'; //타이틀모음
@import './pages/home' //index페이지
마크업을 마치고 scss에 폴더/파일 생성
_○○.scss와 ○○.scss의 차이?
하단바가 붙으면 css로 변환이 되지 않는다.
하단바가 붙은 scss를 모두 style.scss에 @import 시켜준다
import 후 Watch Sass를 하면 css폴더에 style.css가 생성되어 scss에 css를 작성하면 바로 반영된다.
@import url('https://fonts.googleapis.com/css2?family=Montserrat:wght@400;500;700&family=Noto+Sans+KR:wght@400;500;700&display=swap');
시안에 있는 폰트를 확인하고 폰트 다운받기
Montserrat
Noto Sans Korean
style 안 @import~swap'); 복사해서 붙여넣기
$font-en: 'Montserrat', sans-serif;
$font-kr: 'Noto Sans KR', sans-serif;
CSS rules 복사해서 붙여넣기
blockquote, body, button, code, dd, div, dl, dt, fieldset, form, h1, h2, h3, h4, h5, h6, input, legend, li, ol, p, pre, select, td, textarea, th, ul {margin:0;padding:0;font: inherit;}
fieldset, img {border:0}
dl, li, menu, ol, ul {list-style:none}
blockquote, q {quotes:none}
blockquote:after, blockquote:before, q:after, q:before {content:"";content:none}
button, input, select, textarea {vertical-align:middle;font-size:100%}
button {border:0;background-color:transparent;cursor:pointer}
table {border-collapse:collapse;border-spacing:0}
body {-webkit-text-size-adjust:none}
input:checked[type=checkbox] {background-color:#666;-webkit-appearance:checkbox}
html input[type=button], input[type=email], input[type=password], input[type=reset], input[type=search], input[type=submit], input[type=tel], input[type=text] {-webkit-appearance:none;border-radius:0}
input[type=search]::-webkit-search-cancel-button {-webkit-appearance:none}
body {}
body, button, input, select, td, textarea, th {font-size:14px;line-height:1.5;font-family:KakaoSmall, Apple SD Gothic Neo, Malgun Gothic, 맑은 고딕, sans-serif;font-weight:400;color:inherits}
a {color:inherit}
a, a:active, a:hover {text-decoration:none}
address, caption, cite, code, dfn, em, var {font-style:normal;font-weight:400}
img{display: block;}
kakao의 reset 코드를 사용했다.
body, wrapper, inner, blind 등 자주 사용되는 요소들을 미리 셋팅
body{
color:#222;
font-size: 16px;
letter-spacing: -0.025em;
font-family: $font-kr;
}
letter-spacing : 자간
font-family: $font-kr;
.wrapper{
min-width: 1246px;
}
.inner{
width: 1100px;
margin: 0 auto;
}
.blind{
position: absolute;
width: 1px; height: 1px;
overflow: hidden;
clip: rect(0 0 0 0);
margin: -1px;
}
.header{
.group-util{
background: #eee;
height: 35px;
font-size: 14px;
color: #858585;
line-height: 35px;
.inner{display: flex; justify-content: flex-end;}
a{
&+a{margin-left: 20px;}
}
}
.group-flex{
width: 1100px;
height: 100px;
position: relative;
display: flex;
justify-content: space-between;
margin: 0 auto;
align-items: center;
}
.logo{
position: absolute;
top: 50%; left: 50%;
transform: translate(-50%, -50%);
a{ display: block;
width: 171px; height: 21px;
background: url(../images/logo.png) no-repeat; }
}
.sns-area{display: flex;
.link-sns{
width: 28px; height: 28px;
&+.link-sns{
margin-left: 21px;
}
&.ic-facebook{background: url(../images/facebook.png) no-repeat center;}
&.ic-blog{background: url(../images/blog.png) no-repeat center;}
&.ic-insta{background: url(../images/instagram.png) no-repeat center;}
&.ic-youtube{background: url(../images/youtube.png) no-repeat center;}
}
}
.search-area{
.link-search{
display: block;
width: 31px; height: 31px;
border: 2px solid #ddd;
background: url(../images/search.png) no-repeat center;
}
}
.group-nav{
border: 1px solid #ddd;
border-width: 1px 0;
.gnb-list{
display: flex;
text-align: center;
}
.gnb-item{flex:1;
&>a{font-family: $font-en;
font-weight: bold;
line-height: 60px;
display: block;}}
}
}
h60을 .gnb-list에 주지 않고, item에서 lh60을 하는 이유?
list에 h60을 주면 align-items: center을 함께 줘서 상하중앙정렬을 해줘야 함
.footer{ background: #aaa;
height: 260px;
font-size: 16px;
color: #fff;
margin-top: 120px;
.inner{
display: flex;
justify-content: space-between;
}
.logo{
margin: 57px 0 22.5px 0;
width: 171px; height: 21px;
a{
display: block; height: 100%;
background: url(../images/logo_footer.png) no-repeat;
}
}
.addr-area{
p{line-height: 30px;}
.bar{display: inline-block;
margin: 0 10px 0 7px;
width: 2px; height: 14px; background: #fff; }
.copy{margin-top: 18px;}
}
.group-cs{
border: 2px solid #d5d5d5;
width: 295px; height: 161px;
margin: 48px 0;
text-align: left;
line-height: 30px;
padding-left: 22px;
h3{font-family: $font-en;
font-size: 24px;
font-weight: bold;
margin-top: 19.5px;
}
.desc{font-size: 18px;
margin-top: 3.5px;
}
a{display: block;
font-family: $font-en;
font-size: 36px;
font-weight: bold;
margin-top: 21px;
margin-bottom: 27px;
}
}
}
.sc-visual{
position: relative;
.link-slide{
img{
width: 100%;
}
}
}
- sc-visual의 버튼과 점은 component/_buttons.scss에 만들어준다
.sc-intro{
.group-content{
.wrap{
display: flex;
justify-content: space-between;
&.reverse{flex-direction: row-reverse;}
}
.img-box{
img{}
}
.info-box{
width: 510px;
.desc{
font-size: 18px;
line-height: 28px;
margin: 43px 0 47px;
}
}
}
}
- sc-intro의 h3은 title에 만들어준다
- link-detial은 buttons에 만들어준다
.sc-recommend{
.group-content{
padding: 93px 0;
&.bg-monitor{
background: url(../images/monitor.jpg) center / cover;
}
&.bg-tv{
background: url(../images/tv.jpg) center / cover;
}
&.bg-air{
background: url(../images/air.jpg) center / cover;
}
.info-box{
width: 370px; height: 330px; background: rgba(0,0,0,0.5); color: #fff;
.title{line-height: 1;
font-size: 22px;
padding: 25px 0 14px 19px;
.desc{line-height: 28px;
font-size: 18px;
letter-spacing: -0.025em;
padding: 0 19px 47px 19px;
}
}
}
}
.sc-event{
margin-top: 100px;
.event-list{
display: flex;
flex-wrap: wrap;
justify-content: space-between;
}
.event-item{width: 500px;}
.info-box{
padding-top: 24px;
.term{font-size: 18px;
color:#858585;
line-height: 28px;
}
.title{
@include elip;
font-size: 22px;
line-height: 1;
margin: 18px 0 12px;
}
.desc{
@include elip-multi(2,28px);
font-size:18px;
line-height: 28px;
margin-bottom: 25px;
letter-spacing: -0.025em;
}
}
}
.sc-review{
.group-content{
position: relative;
.wrap{
display: flex;
justify-content: space-between;
}
.img-box{
img{}
}
.info-box{
padding-top: 26px;
width: 520px;
.title{font-size: 22px;
line-height: 28px;
}
.desc{
font-size: 18px;
line-height: 32px;
padding: 11px 0 26px;
@include elip-multi(6,32px);
}
}
}
}
.group-row{
display: flex;
justify-content: space-between;
margin: 79px 0 120px;
.sc-board{
width: 511px;
position: relative;
h2{line-height: 40px; font-size: 22px; color: #222;
margin-bottom: 12px;
margin-left: 9px;
}
.board-list{border-top: 3px solid #ddd;}
.board-item{border-bottom: 1px solid #ddd;
font-size: 16px;
line-height: 60px;}
.date{color: #888; margin-left: 10px;}
.text{margin-left: 24px;}
.link-more{
background: url(../images/linkmore.png) no-repeat center;
width: 26px; height: 26px;
border: 2px solid #eee;
position: absolute;
top: 15px;
right: 0;
}
}
}
component에 입력해서 모든 동일한 class값들이 다 똑같은 값을 가질 수 있게 한다
.btn-nav {position: absolute;
top: 50%;
width: 24px; height: 39px;
transform: translate(-50%, -50%);
.sc-visual &{
&.prev {background: url(../images/btnprev_fff.png) no-repeat center;
left: 17%;}
&.next {background: url(../images/btnnext_fff.png) no-repeat center;
right: 17%;}
}
.group-content &{
&.prev {background: url(../images/btnprev_blk.png) no-repeat center;
left: -17%;}
&.next {background: url(../images/btnnext_blk.png) no-repeat center;
right: -17%;}
}
}
<> btn이 들어가는 부분
1) .sc-visual
2) .sc-review - group-content
.pagination{position: absolute;
display: flex;
transform: translateX(-50%);
bottom: 0; left: 50%;
gap:11px;
.bullet{
border-radius: 50%;
width: 13px;
height: 13px;
.sc-visual &{
margin-bottom: 33px;
border: 2px solid #fff;
&.active{background: #fff;}
}
.group-content &{
border: 2px solid #ddd;
&.active{background: #ddd;}
}
}
}
○○○ 하단 bullet
1) .sc-visual
2) .sc-review - group-content
.link-detail{
display: block;
width: 190px;
height: 50px;
box-sizing: border-box;
border: 2px solid #222;
text-align: center;
line-height: 46px;
.sc-recommend &{
color: #fff;
border-color: #fff;
margin-left: 20px;
}
.sc-event &{
margin-bottom: 50px;
}
}
자세히 알아보기 버튼
1) .sc-intro (blk)
2) .sc-recommend (fff)
3) .sc-event (blk)
4) .sc-review (blk)
.sc-title{
text-align: center;
font-size: 42px;
font-family: $font-en;
line-height: 1;
.sc-intro &{
margin: 85px 0 65px;
}
.sc-recommend &{
margin: 107px 0 60px;
}
.sc-review &{
margin: 27px 0 65px;
}
}
sc-title은 제목 폰트로 사용하는 부분 -> 부모요소 불러와서 css 적용
- .sc-intro
- About us
- Monitor
- TV
- Home appliances
- .sc-review
- Best Reviews
너무 말도안되는 값 or auto값은 코드에서 lh1로 설정해준다.
글씨의 위아래 공백 재기 : 공백은 절대 m으로 수치를 구해서 잴 수 없다
1) 폰트의 lh구하기
120이 나왔기 때문에, lh를 1로 설정해, 폰트 사이즈인 42px와 같이 만들어 준다.
2) 폰트의 실제 길이 재주기
폰트 사이즈는 42px이지만, 실제 폰트는 31px인 것을 확인할 수 있다
3) 폰트의 여백 재주기
(폰트 크기=lh=42)-(실제 폰트 h=31) = 11
11/2 = 5.5 = 5 (소숫점x)
4) 윗 여백 구하기
윗 여백 90 - 폰트의 여백 5 = 85px
4) 아래 여백 구하기아랫여백72 윗 여백 72 - 폰트의 여백 5 = 67px
@mixin elip {
display: block;
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
}
소스에서 사용한 수치를 불러온다.
home에서 가져온 값을 참고하여 (지정할 라인 수, 지정되어있는 lh) 사용
@mixin elip-multi($line,$lineHeight){
text-overflow: ellipsis;
overflow: hidden;
line-height: $lineHeight;
max-height: $lineHeight*$line;
-webkit-box-orient: vertical;
-webkit-line-clamp: $line;
display: -webkit-box;
}
(ex)
.desc{ @include elip-multi(2,28px); font-size:18px; line-height: 28px;
만들고자하는 라인 수 2,
지정되어있는 lh값 28
문제상황1
btn-nav를 설정했는데 브라우저 비율에 따라 left, right 지정되는 위치가 다르다
시도 1.btn-nav {position: absolute; top: 50%; transform: translate(-50%,-50%); width: 24px; height: 39px; .sc-visual & { &.prev {background: url(../images/btnprev_fff.png) no-repeat center; left: 327px;} &.next {background: url(../images/btnnext_fff.png) no-repeat center; right: 327px;} }
<50% : 너무 바깥쪽에 위치한다><100% : 너무 안쪽으로 들어간다><75%일 때만 가장 적절한 위치에 위치함>
시도 2 : left,right 수치를 %로 사용해준다.btn-nav {position: absolute; top: 50%; width: 24px; height: 39px; transform: translate(-50%, -50%); .sc-visual &{ &.prev {background: url(../images/btnprev_fff.png) no-repeat center; left: 17%;} &.next {background: url(../images/btnnext_fff.png) no-repeat center; right: 17%;} }
전체 w1900에서 버튼까지의 길이 328을 나눔 = 6 = 6/100 = 16.6% = 17%로 계산했다.
sc-visual의 btn은 브라우저의 크기를 조정했을 때, 버튼의 크기 및 위치의 수정이 원활하게 되지만, review 부분의 btn은 브라우저의 크기를 조정해도 버튼의 크기 및 위치가 변하지 않아 제대로 적용되지 않는다
해결방안
.btn-nav {position: absolute; top: 50%; left: 50%; width: 24px; height: 39px; transform: translateY(-50%); z-index: 1; .sc-visual &{ &.prev {background: url(../images/btnprev_fff.png) no-repeat center; margin-left: -622px;} &.next {background: url(../images/btnnext_fff.png) no-repeat center; margin-left: 600px;} } .group-content &{ &.prev {background: url(../images/btnprev_blk.png) no-repeat center; margin-left: -622px;} &.next {background: url(../images/btnnext_blk.png) no-repeat center; margin-left: 600px;} } }
- top50 left50 poa wh 그대로
- tftlY(-50)로 top 고정
- zindex1으로 정중앙으로 가져오게 함 (화면을 줄여도 움직이지 않음)
- 전체 inner가 1100, 반으로 나누면 600
- 오른쪽의 ml은 600(축이 오른쪽이니까 w의 크기를 더하지 않아도 됨)
- 왼쪽은 ml -622 (600+w의 크기 22)
문제상황2
title이 모두 영어이며, 하나의 한글 폰트가 적용되지 않았다
해결방안
- 한글 폰트 scss에 fontfamily를 매겨준다
- 전체 title.scc에서 fontfamily에 한글 폰트를 font-family: $font-en, $font-kr;로 해준다
- 영문폰트는 영어,숫자만 지원하기 때문에 다음 순서인 한글이 적용된다
- 문제점 : 한글에 숫자가 섞여있다면, 숫자는 영문폰트가 선순위기때문에 영문폰트로 적용된다
.sc-recommend{ .sc-title{font-family: $font-kr;}
문제점을 감안해서 한글 폰트에 직접 fontfamily를 적용했다.