반응형

ES5에서는 변수를 표현할 방법이 var 밖에 없었다.

var로 표현된 변수는 편리한만큼 제대로 쓰지 않으면 위험요소가 너무 많았다.

 

var 변수의 특징

1. 함수레벨 스코프

- 전역함수 외부에서 생성된 변수는 모두 전역변수의 취급을 받는다. 따라서 전역변수를 남발하게 될 가능성이 높다.

 

2. 변수 중복 선언 허용

var test = 'javascript';
console.log(test); // javascript

var test = 'typescript';
console.log(typescript); // typescript

test 라는 변수를 한번 더 선언했음에도, 그대로 test 변수에 담긴 값이 console.log의 위치에 따라 다르게 출력된다.

이는 '변수 - 여러가지 값으로 변할 수 있는 수' 라는 개념에는 맞을 수 있으나,

코드량이 많아지고 무분별하게 사용된다면 하나의 변수값으로 어디에서 사용되고 변화하는지 예측하기 힘들다.

 

코드의 수정이 있을때 역으로 한참을 올라가야 할 지도 모를 경우가 생길 수 있다.

 

이 외에도 여러가지 단점을 보완하기 위해 ES6에서 나온 변수 선언 방식이 letconst 이다.

 

let 변수의 특징

1. 블록레벨 스코프

- 코드블록(function, if, for, while, try/catch 등) 내에서 선언된 변수는 해당 블록 내에서만 유효하며, 선언된 변수는 지역변수이다.

 

2. 변수 중복 선언 불가

let test = 'javascript';
{
  let test2 = 'jquery';
}
let test = 'typescript';

console.log(test); // Uncaught SyntaxError: Identifier 'test' has already been declared
console.log(test2); // pen.js:24 Uncaught ReferenceError: test2 is not defined

console.log(test) - 이미 코드 최상위에 test라는 let 변수의 값으로 'javascript' 라는 값을 넣었고,

다시 test 변수에 'typescript' 라는 값으로 바꾸려니 이미 선언되었다는 에러를 뱉어낸다.

test2의 경우 let변수는 블록레벨 스코프이자 지역변수 이기 때문에, { } 범위를 벗어나서 console 을 찍게되면

선언되지 않았다는 에러를 뱉어내게 된다.

 

값을 바꾸고 싶다면, let test = 'typescript' 가 아닌 test = 'typescript' 로 해야한다.

let을 선언하는 순간 새로운 변수를 선언하는거와 같은 의미로 판단해, 이미 test라는 let변수가 존재한다고 하는 것이다.

let test = 'javascript';

test = 'typescript';

console.log(test); // typescript

 

const 의 특징

const는 상수값(변하지 않는 값)을 위해 사용된다. 기본적인 특징은 let과 동일하다.

다른점은 다음과 같다.

 

1. 재할당이 되지 않는다.

const test = 'javascript';

test = 'typescript';

console.log(test); //Uncaught TypeError: Assignment to constant variable.

2. 값이 무조건 바뀌지 않는 것이 아니다.

- 재할당이 불가능하다는 것은 const 변수 타입이 '객체' 인 경우, 참조값을 변경하지 못한다는 것을 의미한다.

- 하지만, 객체의 프로퍼티는 보호되지 않는다. 이는 할당된 객체의 내용(property의 추가, 삭제, 변경)은 변경이 가능하다는 것을 의미한다.

const user = {name: 'HwiDoorumi'};

// 1. user 객체의 참조값을 변경하려는 경우 
// user = {} //Uncaught TypeError: Assignment to constant variable.

user.name = 'Hwi';
console.log(user); // {name: 'Hwi'}

const로 선언된 user 객체는 name 이라는 key로 'HwiDoorumi' 라는 value 를 가진다.

따라서 user객체는 {name: 'HwiDoorumi'} 라는 참조값을 가지고 있으므로,

user = {} 라고 참조값을 변경하려고 했을때 에러를 뱉어내지만

name이라는 key를 가지는 property value인 'HwiDoorumi' 를 변경하는것은 가능하다는 것을 의미한다.

 

3. const 객체는 반드시 선언과 동시에 할당이 이루어져야 한다.

const test;

test = 'HwiDoorumi';

console.log(test); // Uncaught SyntaxError: Missing initializer in const declaration

var나 let의 경우, 위의 코드에서 에러를 뱉어내지 않는다.

하지만 const의 경우 위 코드를 해석하면

 

1. const 타입의 test 객체를 선언

2. test 객체를 'HwiDoorumi' 라는 값으로 변경 // 변수의 재할당 시도, 에러발생

 

const 객체의 특징에서 재할당이 불가능하다는 것에 위반된다. 따라서 const객체는 반드시 선언, 할당이 동시에 이루어져야 한다.

 

 

[참고] 변수의 선언, 초기화, 할당

[선언단계] - Declaration phase
변수를 실행 컨텍스트의 변수객체(Variable Object)에 등록한다.
이 변수 객체는 스코프가 참조하는 대상이 된다.

'variable Object' is not defined 라는 에러를 뱉어낸다면, 선언이 되지 않은 것을 의미한다.
[초기화 단계] - Initialization phase
변수 객체에 등록된 변수를 위한 공간을 메모리에 확보한다.
이 단계에서 변수는 undefined로 초기화 된다.

에러문구에서 'variable Object' is not defined 라는 에러를 뱉어낸다면
선언자체가 되지 않았다는 것이고, undefined 라는 에러를 뱉어낸다면
선언과 초기화는 되었지만, 값이 할당되지 않았다는 것을 의미한다.
[할당단계] - Assignment phase
undefiedn로 초기화된 변수에 실제 값을 할당하는 단계

 

반응형
반응형

디자이너에게 시안을 받다보면, 생긴건 table인데 tbody 영역만 스크롤이 되게끔 시안이 올 때가 있다.

 

자체 소스가 잘 짜여져 있는 회사라면, 프레임워크나 내부 grid시스템, 기타 js 등으로 해결이 원만하지만,

 

그렇지 않은 경우에 어떻게 해야 할 지 막막할 때가 있다.

 

thead 영역까지 스크롤이라면, div로 테이블을 감싸고 높이값을 줘서 overflow-y:scroll 등으로 손쉽게 해결하지만

 

thead는 고정이고 tbody만 스크롤 될 때 어떻게 짤 지 고민을 한번쯤은 해보았을 것 같다.

 

서두에 말한 방법이 없다면, 편법을 활용해 이렇게 짤 수도 있다.

 

1. HTML

<table>
  <thead>
    <tr>
      <th scope="row">분류1</th><th scope="row">분류2</th><th scope="row">분류3</th>
      <th scope="row">분류4</th><th scope="row">분류5</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>내용1</td><td>내용2</td><td>내용3</td><td>내용4</td><td>내용5</td>
    </tr>
    ...
    ...
    ...
    <tr>
      <td>내용1</td><td>내용2</td><td>내용3</td><td>내용4</td><td>내용5</td>
    </tr>
  </tbody>
  <tfoot>
    <tr>
      <td>토탈1</td><td>토탈2</td><td>토탈3</td><td>토탈4</td><td>토탈5</td>
    </tr>
  </tfoot>
</table>

2. CSS

table{border-collapse:collapse;width:1080px; margin:0 auto;overflow:hidden;border:1px solid #ccc;}
table thead{float:left;width:1080px;border-bottom:1px solid #ccc;}
table thead tr{display:table;width:1080px;}

table tbody{float:left;width:1080px;height:100px;overflow-y:auto;overflow-x:hidden;}
table tbody tr{display:table;width:1080px;border-bottom:1px solid #ccc;}
table tbody tr:last-child{border-bottom:none;}

table tbody td{text-align:center;}

float로 thead와 tbody를 밀어버리고, tbody영역을 높이값을 고정값으로 줘서 스크롤 시켜버리는 방법이다.

스타일은 가장 기본스타일을 썻으니, 필요한부분만 수정해서 사용하면 용이할 것 같다.

 

※ 웹표준, 접근성등을 무시한 단순 표현입니다. 실제 코드를 작성할때에는 table caption, th scope 등을 고려해주세요

반응형
반응형
function userSearch(){
    var keyword = 'c';
    var searchResult = [];

    var testArray = [
        {id: 'html', name: '에이치티엠엘'},
        {id: 'css', name: '스타일시트'},
        {id: 'jquery', name: '제이쿼리'},
        {id: 'javascript', name: '자바스크립트'},
    ]
    for(i=0;i<testArray.length;i++){
        if(testArray[i].id.includes(keyword)){
            searchResult.push(testArray[i].name);
        }
    }
    console.log("검색키워드 : ", keyword);
    console.log("검색후 새로 배열: ", searchResult);
}

위 코드는 키워드 'c'로 검색했을 때,

key:value 로 저장된 testArray 에서 'c'가 포함된 아이들을 재배열해서

보여주는 function 이다.

 

searchResult 라는 비어있는 배열을 생성하고,

for문으로 testArray의 length 만큼 돌리면서

i번째 id가 'c' 를 포함하고 있을 때 searchResult 배열에 push 하는 방식이다.

반응형
반응형

Sublime에서 html 입력 후 tab 키나 ctrl + space 를 누르면

html 기본 틀이 자동으로 만들어지는 편리한 기능이 있다.

 

Sublime에 익숙한 개발자라면, vscode를 접했을때 html + tab 을 했을 때

<html></html>

이렇게만 뜨는것에 적잖이 당황했을 수 있다.

vscode의 경우 html5 이전의 버전과, html5의 버전을 구분한다.

우리가 원하는 건 위와 같은 화면이 나오는 것인데, 여러가지 방법이 있다.

 

1. html 입력 후 미리보기에서 선택

2. html:5 입력 후 tab 혹은 ctrl+space

3. ! 입력 후 tab 혹은 ctrl+space

위와같은 방식들을 사용하면, 1번사진과 같은 html 템플릿을 자동완성 할 수 있다.

반응형

'Editor > vscode' 카테고리의 다른 글

[vscode] vscode에서 scss 사용하기  (0) 2019.11.24
반응형
@charset "UTF-8";

/* Mobile Device (가로폭 767px 이하) */
@media all and (max-width:767px) {

}

/* Tablet (가로폭 768px 이상, 1023px 이하) */
@media all and (min-width:768px) and (max-width:1023px) {

/* 브라우저 가로폭이 768~1023px일때 적용될 css (태블릿) */

}

/* PC Desktop (가로폭 1024 이상) */
@media all and (min-width:1024px) {

}

기본적인 미디어쿼리 분기점이다.

반응형 페이지의 경우 좀더 세분화되어 나눠지긴 하지만, 기본적으로 Mobile/Tablet/PC 기준으로

위와같이 나뉜다.

반응형
반응형

box-sizing 속성은 해당 컨텐츠의 크기의 기준을 어떤것으로 잡을것인지

정하는 속성이다.

 

[box-sizing의 값]

 

1. box-sizing: content-box (default, 콘텐트 영역을 기준으로 크기를 정한다.)

box-sizing: content-box

width:500px, height:100px를 주고 padding:20px를 주었을 때, padding값을 포함하여

width:540px, height:140px이 된다.

 

2. box-sizing: border-box (테두리를 기준으로 크기를 정한다.)

box-sizing: border-box

테두리를 포함한 크기를 지정하는 border-box는, 여백을 포함하여 크기를 정하게 된다.

border:1px solid #colorCode 와 같은 border나, padding값을 포함하여 크기를 정할 때 유용하게 쓰인다.

 

3. box-sizing: initial (기본값으로 설정한다.)

 

4. box-sizing: inherit (부모의 속성값을 따라간다.)

 

[브라우저 지원]

  • Chrome : 10.0+ (4.0 -webkit-)
  • Firefox : 29.0+ (2.0 -moz-)
  • Internet Explorer : 8.0+
  • Opera : 9.5+
  • Safari : 5.1+ (3.2 -webkit-)
반응형

'CSS > CSS 이론 및 기본' 카테고리의 다른 글

[css] reset.css  (0) 2019.11.24
[CSS] CSS 선택자(selector)  (0) 2018.04.24
[CSS] CSS란 무엇인가?  (0) 2018.04.06
반응형

흔히들 말하는 offscreen class 혹은 hidden 클래스, caption 숨김처리 등을 실무에서 많이 사용하고 있다.

숨기게 만드는 거야 어렵지 않지만, 접근성을 고려한다면 이게 맞는건지, 제대로 쓰고있는지 모르고 사용하는

경우도 많다.

 

IR기법을 사용하여 숨김처리를 할 때에, 보통 이런 방식을 많이 사용한다.

 

.offscreen{
    position:absolute;
    top:-9999px;
    left:-9999px;
    text-indent:-9999px;
    width:1px;
    height:1px;
}

하지만 위와같은 방법은 접근성에서 문제를 일으킨다.

text-indent의 경우, 앵커태그(<a href="~">)나 html5에서의 대화형 요소들 에서 초점을

document 바깥에서 잡아버리는 문제점이 있다.

 

보이지 않는곳에 초점이 가는것은 접근성에 위반이 되는 문제이기에, 숨김텍스트를 사용하고자 할 때에, 부적합하다.

 

때문에 아래와 같은 방법을 사용한다.

.offscreen{
    position:absolute;
    overflow:hidden;
    border:0;
    width:1px;
    height:1px;
    clip: rect(1px, 1px, 1px, 1px);
    clip-path:inset(50%);
}

스크린리더가 읽어줄 수 있게 최소한의 너비와 높이를 가진다.(0은 읽어주지 않아요..)

clip 속성은 position 값이 absolute나 fixed 일 때만 사용 가능하다.

또한 css2에서 사용되던 속성이기 때문에, 최신버전인 clip-path 도 같이 넣어주었다.

 

하지만 이 또한 컨텐츠의 '부분숨김' 을 할 때에 문제가 있다.

position:absolute는 해당 컨텐츠를 block 속성으로 바꿔버리는 특성이 있다.

 

예를들어

<span>
   테스트입니다<span class="offscreen">숨김처리부분</span>
</span>

위와 같은 코드를 작성 할 때, 스크린리더는 offscreen 된 부분을 block element로 인식하여 읽게 될 것이다.

때문에 inline 요소를 숨김처리 할 때에는 position 값을 걷어내고 display 속성을 조절해 주어야 한다.

.hidden{
    display:inline-block;
    overflow:hidden;
    border:0;
    width:1px;
    height:1px;
    clip: rect(1px, 1px, 1px, 1px);
    clip-path:inset(50%);
}
반응형
반응형

[meta 태그란?]

 

메타태그는 html문서의 정보를 담고 있는 element다.

meta태그 속성에는 http-equiv, name, content 3가지 속성이 있다.

 

- http-equiv="항목명"

웹 브라우저가 서버에 명령을 내리는 속성.

 

- content="정보값"

meta 정보의 내용을 지정

 

- name="정보 이름"

몇 개의 meta 정보의 이름을 정할 수 있으며, 지정하지 않으면 http-equiv와 같은 기능을 가짐

 

[기본적인 meta태그의 설정]

 

<!DOCTYPE html>
<html lang="ko">
<head>
    <!-- 문서모드를 utf-8 로 인코딩 -->
    <meta charset="utf-8">
    
    <!-- 브라우저 문서의 호환성 지정, 최신 엔진으로 렌더링 할 수 있도록 설정 -->
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    
    <!-- 모바일 접속시 디바이스 크기에 맞춘 화면 렌더링 -->
    <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
    
    <!-- 홈페이지 주제 지정 -->
	<meta name="subject" content="휘두루미 블로그">
    
    <!-- SEO(검색엔진 최적화) 설정 -->
    <meta name="description" content="휘두루미 티스토리 블로그 입니다.">
    <meta name="keywords" content="www,web,world wide web,html,css,javascript">

    <!-- 검색로봇 제어 -->
    <meta name="robots" content="All">
    
    <title>title</title>
</head>
<body>
</body>
</html>

 

반응형

+ Recent posts