UI개발 4팀 이상진
5개월차
UI개발 4팀 이상진
1. 서비스 소개
2. 요구사항
3. 이슈 & 해결
4. 마치며
1-1. 서비스 소개
1-1. 서비스 소개
1-1. 서비스 소개
" 패피들이 알려주는
리얼아이템 "
1-2. 담당페이지
1-2. 담당페이지
1-2. 담당페이지
소개페이지
1-3. 소개페이지
6MD
2-1. 요구사항 - 개발
6MD
1MD
2-1. 요구사항 - 개발
6MD
1MD
2-1. 요구사항 - 개발
2-1. 요구사항
2-1. 요구사항
스크립트에 익숙하지 않은 내가
2-1. 요구사항
2-1. 요구사항
2-1. 요구사항
2-2. 디자인 시안 : BG 플리킹
mobile
pc
2-2. 디자인 시안 : frame
2-2. 디자인 시안 : frame > 문구
2-2. 디자인 시안 : frame > 문구
2-2. 반응형 & 크로스브라우징
모바일 :
android 4.x
PC :
Internet Explorer 9
3-1. frame : width / height
3-1. frame : width / height
3-1. frame : width / height
3-1. frame : width / height
3-1. frame : width / height
3-1. frame : width / height
3-1. frame : width / height
3-1. frame : width / height
100%
3-1. frame : width / height
100%
85%
3-1. frame : width / height
100%
85%
1 : 2.5
3-1. frame : width / height
3-1. frame : width / height
브라우저의 "height"에 따라 가변
3-1. frame : width / height
<div class="container">
3-1. frame : width / height
.container {
box-sizing: border-box;
height: 100%;
padding: 62px 0 42px;
}
<div class="container">
3-1. frame : width / height
.container {
box-sizing: border-box;
height: 100%;
padding: 62px 0 42px;
}
<div class="container">
3-1. frame : width / height
.container {
box-sizing: border-box;
height: 100%;
padding: 62px 0 42px;
}
<div class="container">
<div class="content">
.container .content {
height: 100%;
}
100%
3-1. frame : width / height
.container {
box-sizing: border-box;
height: 100%;
padding: 62px 0 42px;
}
.container .content {
height: 100%;
}
<div class="container">
<div class="content">
100%
3-1. frame : width / height
.container {
box-sizing: border-box;
height: 100%;
padding: 62px 0 42px;
}
.container .content {
height: 100%;
}
<div class="container">
<div class="content">
100%
.container .content .frame {
height: 85%;
}
3-1. frame : width / height
<div class="container">
<div class="content">
100%
3-1. frame : width / height
<div class="container">
<div class="content">
100%
.container .content .frame {
width: ??;
height: 85%;
}
?
3-1. frame : width / height
<div class="container">
<div class="content">
100%
x : y
1 : 2.5
.container .content .frame {
width: ??;
height: 85%;
}
?
3-1. frame : width / height
<div class="container">
<div class="content">
100%
x : y
1 : 2.5
.container .content .frame {
width: height * 1/2.5;
height: 85%;
}
3-1. frame : width / height
<div class="container">
<div class="content">
100%
x : y
1 : 2.5
.container .content .frame {
width: height * 1/2.5;
height: 85%;
}
height * 1/2.5
3-1. frame : width / height
<div class="container">
<div class="content">
100%
x : y
1 : 2.5
" 연산(x / + - ) " 필요
.container .content .frame {
width: height * 1/2.5;
height: 85%;
}
height * 1/2.5
3-1. frame : width / height
<div class="container">
<div class="content">
100%
x : y
1 : 2.5
" 연산(x / + - ) " 필요
.container .content .frame {
width: height * 1/2.5;
height: 85%;
}
height * 1/2.5
스크립트 처리
3-1. frame : width / height
<div class="container">
<div class="content">
100%
x : y
1 : 2.5
" 연산(x / + - ) " 필요
.container .content .frame {
width: height * 1/2.5;
height: 85%;
}
height * 1/2.5
스크립트 처리
var setFrameWidth = function(){
var frame = $('.content .frame');
var frameHeight = frame.outerHeight();
frame.outerWidth(frameHeight / 2.5);
};
$(window).resize(function(){
setFrameWidth();
});
3-1. frame : width / height
3-1. frame : width / height
1
2.5
9
16
2
1.5
3-1. frame : width / height
브라우저의 height 기준으로 width가 바뀌는 spec 이므로 사용할 수 없음
1
2.5
9
16
2
1.5
3-1. frame : width / height
3-1. frame : width / height
css내 수치들을 "계산"해주는 속성
3-1. frame : width / height
css내 수치들을 "계산"해주는 속성
height: calc(140px - 22px);
3-1. frame : width / height
css내 수치들을 "계산"해주는 속성
height: calc(140px - 22px);
"뷰포트"의 높이값
3-1. frame : width / height
css내 수치들을 "계산"해주는 속성
height: calc(140px - 22px);
"뷰포트"의 높이값
100vw
100vh
3-1. frame : width / height
css내 수치들을 "계산"해주는 속성
height: calc(140px - 22px);
// 브라우저 전체 높이값
height: 100vh;
"뷰포트"의 높이값
3-1. frame : width / height
height: calc(140px - 22px);
+
css내 수치들을 "계산"해주는 속성
"뷰포트"의 높이값
// 브라우저 전체 높이값
height: 100vh;
<div class="container">
<div class="content">
100%
x : y
1 : 2.5
3-1. frame : width / height
구현2. calc() & vh 사용하기
<div class="container">
<div class="content">
100%
x : y
1 : 2.5
3-1. frame : width / height
구현2. calc() & vh 사용하기
<div class="container">
<div class="content">
100%
x : y
1 : 2.5
구현2. calc() & vh 사용하기
width = height * 1/2.5
3-1. frame : width / height
<div class="container">
<div class="content">
100%
구현2. calc() & vh 사용하기
3-1. frame : width / height
width = height * 1/2.5
구현2. calc() & vh 사용하기
3-1. frame : width / height
width = height * 1/2.5
구현2. calc() & vh 사용하기
3-1. frame : width / height
width = height * 1/2.5
100vh
구현2. calc() & vh 사용하기
3-1. frame : width / height
width = height * 1/2.5
구현2. calc() & vh 사용하기
100vh - (62+42)px
3-1. frame : width / height
width = height * 1/2.5
3-1. frame : width / height
구현2. calc() & vh 사용하기
width = height * 1/2.5
85%
3-1. frame : width / height
구현2. calc() & vh 사용하기
(100vh - (62+42)px)
width = height * 1/2.5
85%
3-1. frame : width / height
구현2. calc() & vh 사용하기
(100vh - (62+42)px) * 0.85
width = height * 1/2.5
85%
3-1. frame : width / height
구현2. calc() & vh 사용하기
(100vh - (62+42)px) * 0.85
width = height * 1/2.5
3-1. frame : width / height
구현2. calc() & vh 사용하기
width: (100vh - (62+42)px) * 0.85 * 1/2.5
3-1. frame : width / height
구현2. calc() & vh 사용하기
width: (100vh - (62+42)px) * 0.85 * 1/2.5
3-1. frame : width / height
구현2. calc() & vh 사용하기
.frame {
box-sizing: border-box;
position: absolute;
z-index: 2100;
top: 0;
right: 0;
bottom: 0;
left: 0;
width: calc((100vh - (62px+42px)) * 0.85 * 0.4);
height: 85%;
margin: auto;
border: 8px solid #2b2e3c;
}
3-1. frame : width / height
구현2. calc() & vh 사용하기 : 크로스브라우징
3-1. frame : width / height
구현2. calc() & vh 사용하기 : 크로스브라우징
안드로이드 4.3
안드로이드 4.3
안드로이드 4.4
- 곱셈/나눗셈
3-1. frame : width / height
구현2. calc() & vh 사용하기 : 크로스브라우징
4.4.2
4.1.2
7.0
3-1. frame : border 형태
mobile
pc
3-1. frame : border 형태
mobile : 우측 하단이 뚫린 형태
3-1. frame : border 형태
3-1. frame : border 형태
3-1. frame : border 형태
사용할 수 없음
3-1. frame : border 형태
3-1. frame : border 형태
mobile
pc
3-1. frame : border 형태
mobile
pc
svg 이미지
css : border
3-1. frame : border 형태
// mobile
.frame {
border-box: box-sizing;
border: none;
background-image: url(['border이미지경로']);
background-size: 100%;
background-position: center;
}
// PC
@media (min-width: 1025px) {
.frame {
border: 7px solid #2b2e3c;
background-image: none;
}
}
3-2. eg.js 사용과 z-index
3-2. eg.js 사용과 z-index
bg_1
bg_2
bg_3
<div class="group_section">
<section class="section bg_1"></section>
<section class="section bg_2"></section>
<section class="section bg_3"></section>
</div>
3-2. eg.js 사용과 z-index
AS-IS
bg_1
bg_2
bg_3
<div class="group_section">
<div class="eg-flick-container" style="position: relative;
z-index: 2000; width: 100%; height: 100%; transform: translate
(-918px, 0px); will-change: transform;"></div>
</div>
3-2. eg.js 사용과 z-index
TO-BE
bg_1
bg_2
bg_3
z-index: 2000;
3-2. eg.js 사용과 z-index
<div class="group_section">
<div class="eg-flick-container" style="position: relative;
z-index: 2000; width: 100%; height: 100%; transform: translate
(-918px, 0px); will-change: transform;"></div>
</div>
TO-BE
3-2. eg.js 사용과 z-index : frame영역 플리킹
정상적인 플리킹
플리킹 이슈
이슈 원인. z-index
3-2. eg.js 사용과 z-index : frame영역 플리킹
이슈 원인. z-index
body {
z-index: auto;
}
3-2. eg.js 사용과 z-index : frame영역 플리킹
이슈 원인. z-index
div.eg-flick-container {
z-index: 2000;
}
3-2. eg.js 사용과 z-index : frame영역 플리킹
div.frame {
z-index: 2100;
}
이슈 원인. z-index
3-2. eg.js 사용과 z-index : frame영역 플리킹
이슈 원인. z-index
3-2. eg.js 사용과 z-index : frame영역 플리킹
구현1. pointer-events 속성
a.banner {
position: absolute;
top: 1em;
left: 3em;
}
<p>텍스트 영역 텍스트 영역 텍스트 영역 텍스트 영역 텍스트 영역</p>
<a href="http://naver.com" class="banner">
이것은 광고 배너입니다. 이것은 광고 배너입니다.
</a>
3-2. eg.js 사용과 z-index : frame영역 플리킹
a.banner {
position: absolute;
top: 1em;
left: 3em;
pointer-events: none;
}
<p>텍스트 영역 텍스트 영역 텍스트 영역 텍스트 영역 텍스트 영역</p>
<a href="http://naver.com" class="banner">
이것은 광고 배너입니다. 이것은 광고 배너입니다.
</a>
구현1. pointer-events 속성
3-2. eg.js 사용과 z-index : frame영역 플리킹
div.frame {
box-sizing: border-box;
position: absolute;
z-index: 2100;
top: 0;
right: 0;
bottom: 0;
left: 0;
height: 85%;
pointer-events: none;
...
}
구현1. pointer-events 속성
3-2. eg.js 사용과 z-index : frame영역 플리킹
구현1. pointer-events 속성 - 크로스브라우징
3-2. eg.js 사용과 z-index : frame영역 플리킹
구현1. pointer-events 속성 - 크로스브라우징
3-2. eg.js 사용과 z-index : frame영역 플리킹
구현2. 스크립트 처리
3-2. eg.js 사용과 z-index : frame영역 플리킹
구현2. 스크립트 처리
3-2. eg.js 사용과 z-index : frame영역 플리킹
구현2. 스크립트 처리
Div.controller_page
3-2. eg.js 사용과 z-index : frame영역 플리킹
구현2. 스크립트 처리
Div.controller_page
z-index: 2200
3-2. eg.js 사용과 z-index : frame영역 플리킹
구현2. 스크립트 처리
Div.controller_page
z-index: 2200
.controller_page {
position: fixed;
z-index: 2200;
top: 62px; // header 높이
right: 0;
bottom: 42px; // footer 높이
left: 0;
}
3-2. eg.js 사용과 z-index : frame영역 플리킹
구현2. 스크립트 처리
Div.controller_page
z-index: 2200
.controller_page {
position: fixed;
z-index: 2200;
top: 62px; // header 높이
right: 0;
bottom: 42px; // footer 높이
left: 0;
}
3-2. eg.js 사용과 z-index : frame영역 플리킹
구현2. 스크립트 처리
플리킹 이벤트 처리
Div.controller_page
3-2. eg.js 사용과 z-index : frame영역 플리킹
div.frame {
z-index: 2100;
}
구현2. 스크립트 처리
3-2. eg.js 사용과 z-index : frame영역 플리킹
div.controller_page {
z-index: 2200;
}
구현2. 스크립트 처리
3-2. eg.js 사용과 z-index : frame영역 플리킹
div.controller_page {
z-index: 2200;
}
구현2. 스크립트 처리
이벤트처리
3-2. eg.js 사용과 z-index : frame영역 플리킹
div.controller_page {
z-index: 2200;
}
구현2. 스크립트 처리
이벤트처리
3-2. eg.js 사용과 z-index : frame영역 플리킹
.banner, .button_link {
z-index: 2300;
}
구현2. 스크립트 처리
링크, 버튼요소들
3-2. eg.js 사용과 z-index : frame영역 플리킹
3-2. eg.js 사용과 z-index : 재선언
z-index 재선언 이슈
소개페이지에서는 z-index를 2000 위로 재선언 필요
z-index 재선언 이슈
3-2. eg.js 사용과 z-index : 재선언
3-2. eg.js 사용과 z-index : 재선언
z-index 재선언 이슈
전체적 숫자단위가 커짐
유지보수에 어려움
3-2. eg.js 사용과 z-index : 재선언
z-index 재선언 이슈
구현1. eg.js 컴포넌트 z-index 초기화
3-2. eg.js 사용과 z-index : 재선언
구현1. eg.js 컴포넌트 z-index 초기화
3-2. eg.js 사용과 z-index : 재선언
구현1. eg.js 컴포넌트 z-index 초기화
important 키워드 사용
조심스럽게...!
3-2. eg.js 사용과 z-index : 재선언
<div class="wrap">
...
<main class="container">
<div class="content">
...
<div class="group_section">
<div class="eg-flick-container" style="z-index:2000;">
...
구현2. eg.js 컴포넌트 부모 z-index: 0;
3-2. eg.js 사용과 z-index : 재선언
구현2. eg.js 컴포넌트 부모 z-index: 0;
<div class="wrap">
...
<main class="container">
<div class="content">
...
<div class="group_section">
<div class="eg-flick-container" style="z-index:2000;">
...
3-2. eg.js 사용과 z-index : 재선언
구현2. eg.js 컴포넌트 부모 z-index: 0;
<div class="wrap">
...
<main class="container">
<div class="content">
...
<div class="group_section">
<div class="eg-flick-container" style="z-index:2000;">
...
}
z-index: auto (default)
3-2. eg.js 사용과 z-index : 재선언
구현2. eg.js 컴포넌트 부모 z-index: 0;
<div class="wrap">
...
<main class="container">
<div class="content">
...
<div class="group_section">
<div class="eg-flick-container" style="z-index:2000;">
...
}
z-index: 0; ( < 2000 )
3-2. eg.js 사용과 z-index : 재선언
좁은 시야
반복되는 시행착오
기획
디자인
마크업
개발
기획
디자인
마크업
개발
기획
디자인
마크업
개발
정확한 spec 파악
개발 적용시 상태 고려
기획
디자인
마크업
개발
정확한 spec 파악
개발 적용시 상태 고려
계속해서 변화하는 웹표준
계속해서 변화하는 웹표준
대응 브라우저 상향
새로운 속성/기술 사용 시도
반복되는 시행착오
" 실력 "
새로운 속성/기술 사용 시도
반복되는 시행착오