Chrom 크롬은 자동 업데이트가 되기 때문에 문제가 되지 않지만,

window 윈도우 사용자는 수동으로 업데이트를 해줘야 하기 때문에

아직 window 윈도우 IE 7~9 버전을 쓰는 분들이 있습니다.

 

문제는 CSS의 기능 중 window 윈도우 11 이하의에선 css가 적용이 안될 때가 있습니다.

예를 들어 display:flex 기능이 있다.

 

이럴 때 어떻게 해야하는지 알아보자.

 

<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <link rel="stylesheet" href="css/main.css">
    <!--[if lt IE 10]>
    link href="css.ie.css" type="text/css" rel="stylesheet"/>
    <!-[endif]-->
</head>
<body>
    
</body>
</html>

 

head 태크 안에 조건부 if 로 CSS 파일을 첨부하면 된다.

 

 

 

반응형

깃허브

터미널(terminal) - new terminal

0. 최초의 경우 ※맨 처음 
git init

1. git add .  - 전부 가져와
2. git status  - 뭐를 전부 가져왔더니 뭐가 추가했는지 찾았어(필수 아님)
3. git commit -m "first commit" - 히스토리를 만드는 것(수정사항 이름 달기)

이제 깃허브와 연결고리 작업하기

git remote add origin git@github.com:-----

수정할 때는 
1~3번 하고나서
git push origin master

반응형

div 요소들인 box는 기본적으로 세로 정렬이 된다.

가로 정렬을 하고 싶을 때는 display:flex를 사용하면 됩니다.

 

반응형에 필수로 사용된다 (예시로 PC 가로 버전이고 MO 세로 버전으로 할 때 사용한다)

<div class="flex-container">
  <div class="box"></div>
  <div class="box"></div>
  <div class="box"></div>
</div>
.flex-container {
  display : flex;
}
.box {
  width : 400px;
  height : 200px;
  background : #ddd;
  margin : 5px;
}

 

Flexbox 세부 속성

.flex-container {
  display : flex;
  justify-content : center;  /* 좌우정렬 */
  align-items : center;  /* 상하정렬 */
  flex-direction : column; /* 세로정렬 */
  flex-wrap : wrap;  /* 폭이 넘치는 요소 wrap 처리 */
}
.box {
  flex-grow : 2;  /* 폭이 상대적으로 몇배인지 결정 */
}

 

box 좌측 & 우측 정렬 동시에 하는 방법

<div class="flex-container">
  <div class="box"></div>
  <div class="box" style="flex-grow : 1"></div>
  <div class="box"></div>
</div>

 

align-content 상하배치를 조절하는 속성 (justify-content의 세로버전)

flex-start /* 시작 부분에 플렉스 아이템 정렬 */
flex-end /* 끝 부분에 플렉스 아이템 정렬 */
center /* 가운데에 플렉스 아이템 정렬 */
stretch /* 플렉스 아이템을 컨테이너에 맞춰 늘림 */
space-between /* 간격을 동일하게 조절하여 아이템 정렬 */
space-around /* 아이템과 컨테이너 양 끝에도 간격을 두어 정렬 */

 

 

반응형

1. float 는 margin 사라진다.

아래 해결방법

(범람을 막고 싶은 요소)::after{

content : " ";

display : block;

clear : both;

}

 

2. 웹폰트 넣는 법

구글폰트 - HTML파일의 <head>태그 안에 <link>또는 @import, CSS파일에 font-family 속성 적기.

 

아래 예시 Noto Sans Korean 폰트

<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Noto+Sans+KR:wght@100..900&display=swap" rel="stylesheet">
// <uniquifier>: Use a unique and descriptive class name
// <weight>: Use a value from 100 to 900

.noto-sans kr-<uniquifier> {
  font-family: "Noto Sans KR", sans-serif;
  font-optical-sizing: auto;
  font-weight: <weight>;
  font-style: normal;
}

 

※ 한글폰트는 파일로 직접 가져온다면 1~2개만 넣기..

한글폰트는 한자까지 해서 너무 무거워서 트래픽을 많이 잡아먹기 때문에.

그리고 용량을 줄이려서 ttf 보단 woff 파일로 쓰자. (ttf의 약 1/3 사이즈)

 

3. 폰트 안티앨리어싱 폰트 부드럽게 처리

맥북은 원래 폰트를 부드럽게 처리되어 보여줘서 비슷하지만, 윈도우에선 이 효과가 큰 차이를 보인다.

 

아래 해결방법

transform:rotate(0.03deg)
반응형

DOM (문서 객체 모델)(Document Object Model)

 

웹페이지는 어떻게 만들어지는 걸까요?

웹 브라우저가 원본 HTML 문서를 읽은 후, 스타일 입히고 페이지를 뷰 포트에 표시하여 만듭니다.

그 과정의 모델이 필요한데 그 이름이 DOM 입니다. (다른 모델도 있음)

 

DOM은 HTML 코드를 해석 후 요소들을 트리 형태로 구조화해 표현하는 형식

그리고 DOM은 자바스크립트를 사용해 웹 화면의 콘텐츠 추가, 수정, 삭제 등

이벤트 처리를 할 수 있도록 프로그래밍 인터페이스를 제공한다.

 

+ 추가 내용

 

DOM은 HTML이 아닙니다.

DOM은 브라우저에서 보이는 거시 아닙니다.

DOM은 가상 요소를 포함하지 않습니다. (ex: ::after)

DOM은 보이지 않는 요소를 포함합니다. (ex: display:none;)

자바스크립트에 의해 DOM을 수정하여 새로운 노드를 추가, 삭제 등 할 수 있습니다.

 

반응형

먼저 이미지 4개를 준비합니다. 사이즈는 비슷한게 좋아요.

저는 1280x485px로 작업하였어요.

 

슬라이드 구현되는 방법을 서술하자면,

prev, next 버튼을 누르면 4개의 이미지가 하나씩 X좌표 이동하는 거예요.

그리고 첫 이미지 때는 이전 이미지가 없기 때문에 prev 버튼이 비활성화 되고

마지막 이미지 때는 이후 이미지가 없기 때문에 next 버튼이 비활성화 됩니다.

 

추가로 css images 태그에 transition: transform 0.5s; 추가하여

좌우 이미지 슬라이드에 자연스러운 애니메이션 효과를 주었습니다.

 

 

HTML

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <link rel="stylesheet" href="style.css">
  <title>slider</title>
</head>
<body>
  <div class="container">
    <h1>SLIDER</h1>
    <div class="album">
      <div class="images">
        <img src="images/img-1.jpg" alt="">
        <img src="images/img-2.jpg" alt="">
        <img src="images/img-3.jpg" alt="">
        <img src="images/img-4.jpg" alt="">
      </div>
    </div>
    <button class="prev">prev</button>
    <button class="next">next</button>
  </div>  
  <script src="script.js"></script>
</body>
</html>

 

CSS

.container{width:1280px;margin: 0 auto;}

h1{text-align: center;}

.album{width: 1280px;height: 485px;overflow: hidden;}

.images{position: relative;display: flex;height: 485px; transition: transform 0.5s;}

img{width: 1280px;height: 485px;}

button, button:active, button:focus{width: 100px; height: 30px; border: none;color: white; background-color: teal; outline: none;}

button:hover{background-color: turquoise;}

button:disabled{background-color: gray;}

.prev{float: left;}

.next{float: right;}

 

JS

 

let curPos = 0; // 현재 보여주는 이미지의 인덱스 번호
let positionValue = 0; // 이미지 태그의 위치 값 지정할 변수
const IMAGE_WIDTH = 1280;

const prevBtn = document.querySelector(".prev");
const nextBtn = document.querySelector(".next");
const images = document.querySelector(".images");

// 다음 이미지로 이동하는 함수
function next(){
  // 현재 이미지가 마지막 이미지가 아닌 경우에만 이동 가능
  if(curPos < 3){
    prevBtn.removeAttribute('disabled'); // 이전 버튼 활성화
    positionValue -= IMAGE_WIDTH; // 다음 이미지 위치로 이동
    images.style.transform = `translateX(${positionValue}px)`; // 이미지 이동 애니메이션
    curPos += 1; // 현재 이미지 인덱스 증가
  }
  if(curPos === 3){
    nextBtn.setAttribute('disabled','true');
  }
}

// 이전 이미지로 이동하는 함수
function prev(){
  if(curPos > 0){
    nextBtn.removeAttribute('disabled'); // 다음 버튼 활성화
    positionValue += IMAGE_WIDTH; // 이전 이미지 위치로 이동
    images.style.transform = `translateX(${positionValue}px)`; // 이미지 이동 애니메이션
    curPos -= 1; // 현재 이미지 인덱스 감소
  }
  if(curPos === 0){
    prevBtn.setAttribute('disabled','true');
  }
}


function init(){
  prevBtn.setAttribute('disabled','true'); // 페이지 로드 시 이전 버튼 비활성화
  prevBtn.addEventListener("click", prev); // 이전 버튼에 클릭 이벤트 추가
  nextBtn.addEventListener("click", next); // 다음 버튼에 클릭 이벤트 추가
}

init(); // 초기화 함수 호출

 

반응형

+ Recent posts