섹션을 만드는 레이아웃은 다음과 같다.
See the Pen Untitled by ehddud1006 (@ehddud1006-the-looper) on CodePen.
Video 태그
주로 사용하는 속성
autoplay
자동 재생 여부를 정할 수 있다.
controls
소리조절, 일시 정지 , 재시작을 할 수 있는 컨트롤러를 제공한다.
loop
루프를 true 설정하면 비디오가 반복재생된다.
muted
음소거를 설정할 것인지 여부를 정할 수 있다.
src
삽입할 동영상의 주소를 명시한다.
mask-image
비디오 태그의 영상을 사각형 형태로 출력이 된다.
하지만 아래 아이패드 레이아웃은 살짝 기울여져 있기 때문에 검은 영역이 튀어나오는 현상이 발생한다.
mask-image 를 사용하면 문제를 해결할 수 있다.
다음처럼 살짝 아이패드 영역에 맞게 기울여진 영역을 mask-image 로 사용하면 해당 영역에 비디오가 출력된다.
can I use 에서 살펴보면 크롬브라우저에서는 -webkit- 벤더프리픽스를 사용하면 해당 CSS 를 사용할 수 있다.
사파리에서는 별도의 벤더프리픽스 없이 표준기술로써 사용이 가능하다.
따라서 아래처럼 표준기술인 브라우저와 시범기술인 브라우저에 적용하기 위해 각각 CSS 를 명시해주면 된다!
.camera .stage video {
...
-webkit-mask-image: url('../images/camera_video_mask.png');
mask-image: url('../images/camera_video_mask.png');
}
자바스크립트로 video 태그 제어하기
play( ) , pause( ) 메서드를 사용하면 video 태그를 제어할 수 있다.
const video = document.querySelector('.stage video');
const playBtn = document.querySelector('.stage .controller--play');
const pauseBtn = document.querySelector('.stage .controller--pause');
playBtn.addEventListener('click', () => {
video.play();
playBtn.classList.add('hide');
pauseBtn.classList.remove('hide');
});
pauseBtn.addEventListener('click', () => {
video.pause();
playBtn.classList.remove('hide');
pauseBtn.classList.add('hide');
});
자바스크립트 모듈화
main.js 에서 import 예약어를 사용하기 위해서는 script 를 type="module" 로 명시해주어야한다.
<script defer type="module" src="./js/main.js"></script>
데이터 보간
데이터 보관 아닙니다. 데이터 보간입니다.
백틱을 사용하여 문자열에서 JS 변수의 값을 사용할 수 있습니다.
colorList += `<li style="background-color: ${color};"></li>`;
vscode 하이라이팅 extenstion
JS 로 innerHTML 을 사용하여 데이터를 삽입할 때 코드하이라이팅이 되지 않는다.
위 익스텐션을 설치하면 주석을 사용하여 코드 하이라이팅을 지원 받을 수 있다.
바닐라 자바스크립트로 HTML 요소 추가하기
아래 코드는 section.compare .items 요소에 itemEl 를 추가하는 코드이다.
const itemsEl = document.querySelector('section.compare .items');
ipads.forEach(ipad => {
const itemEl = document.createElement('div');
itemEl.classList.add('item');
let colorList = '';
ipad.colors.forEach(color => {
colorList += `<li style="background-color: ${color};"></li>`;
});
// VS Code 확장 프로그램 - Comment tagged templates
itemEl.innerHTML = /* html */ `
<div class="thumbnail">
<img src="${ipad.thumbnail}" alt="${ipad.name}" />
</div>
<ul class="colors">
${colorList}
</ul>
<h3 class="name">${ipad.name}</h3>
<p class="tagline">${ipad.tagline}</p>
<p class="price">₩${ipad.price.toLocaleString('en-US')}부터</p>
<button class="btn">구입하기</button>
<a href="${ipad.url}" class="link">더 알아보기</a>
`;
itemsEl.append(itemEl);
});
box-shadow 다르게 사용하는 방법
box-shadow 에 inset 을 사용하면 그림자가 외부가 아닌 내부에 그려진다.
box-shadow: inset 1px 1px 3px rgba(0, 0, 0, 0.1);
toLocaleString
toLocaleString 을 사용하면 숫자에 , 를 표기할 수 있다.
미쳤다. 푸터
푸터 부분의 다음과 같은 UI 를 만드는 방법을 보고 오 했다.
왜 flex-direction: column 으로 값을 주고 flex-wrap: wrap 을 사용할 생각을 안해봤을까?
See the Pen Untitled by ehddud1006 (@ehddud1006-the-looper) on CodePen.
특정 요소에 margin 또는 padding 값을 주어 다음 요소를 다음줄로 넘길 수 있다.
CopyRight
CopyRight 에 사용되는 년도는 JS Date 클래스를 사용하는 것이 갱신이 되기 때문에 편리하다.
<div class="copyright">
Copyright ©
<span class="this-year"></span>
Apple Inc. 모든 권리 보유.
</div>
const thisYearEl = document.querySelector('.this-year');
thisYearEl.textContent = new Date().getFullYear();
main 태그
이미지가 큰 경우 다음처럼 레이아웃을 초과하는 경우가 발생한다.
이러한 경우 main 태그를 사용하여 튀어나가는 요소들을 overflow-x: hidden 으로 잘라줘야한다.
main {
overflow-x: hidden;
}
'카카오 테크 캠퍼스 > HTML CSS JS Advanced' 카테고리의 다른 글
[카테캠 선택강의] 기타 Web APIs (1) | 2023.05.26 |
---|---|
[카테캠 선택강의] 반응형 적용 (0) | 2023.05.17 |
[카테캠 선택강의] IntersectionObserver (2) | 2023.05.15 |
[카테캠 선택강의] 콘텐츠 구성 (0) | 2023.05.13 |
[카테캠 선택 강의] 내비게이션 사용기술 정리 (2) | 2023.05.12 |