CSS를 이용해 객체 가운데 위치하기!


객체를 가운데에 두는 방법에는 여러 개가 있다. 
calc를 기억해두려는 목적으로 글을 쓰기 시작했는데, 내가 작업하면서 써봤던 방법을 작성해두려고 한다. (flex-box는 논외)

조건은 부모 객체의 가운데에 위치시키기다.

HTML
<div class="wrapper">
  <div class="popup">   
  </div>
</div>

CSS
.wrapper{
  position:relative;
  width:400px;
  height:400px;
  background-color:#cacaca;
}
.popup{
  position:absolute;
  top:50%;
  left:50%;
  margin-top:-75px;
  margin-left:-75px;
  width:150px;
  height:150px;
  background-color:pink;
}

이런 식으로 영역의 50%를 top, left 내리고 그 객체 사이즈의 반 값을 빼주는 형식으로 작업했다.
(객체 시작 위치를 기준으로 50% 이동하기 때문에 객체의 값을 빼줘야 가운데 위치한다.)

위와 비슷하게 calc를 쓸 수 있다.
CSS
.wrapper{
  position:relative;
  width:400px;
  height:400px;
  background-color:#cacaca;
}
.popup{
  position:absolute;
  top: calc(50% - 75px);
  left: calc(50% - 75px);
  width:150px;
  height:150px;
  background-color:pink;
}

top: calc(50% - 75px);
left calc(50% - 75px);
(75px은 객체의 반 값)

[예제]

See the Pen study-alignment css3 by leeyoonseo (@okayoon) on CodePen.



IE9~ 지원하는데, 부분 지원이라고 나온다.

물론 값이 변수일 경우에는 js로 비슷하게 작업했다.

HTML
<div class="wrapper">
  <div class="popup">   
  </div>
</div>

CSS
.wrapper{
  position:relative;
  width:400px;
  height:400px;
  background-color:#cacaca;
}
.popup{
  position:absolute;
  top:50%;
  left:50%;
  width:150px;
  height:150px;
  background-color:pink;
}

JS
const popup = document.getElementsByClassName('popup')[0];
const _width = popup.offsetWidth;
const _height = popup.offsetHeight;
popup.style.marginTop = -(_width/2)+'px';
popup.style.marginLeft = -(_height/2)+'px';

가운데에 위치하기 위한 margin 값 들을 변수로 받아서 계산한 후에 적용시켜준다.
이렇게 하면 width, height 값이 변하더라도 깨지지 않는다.

[예제]

See the Pen study-alignment js by leeyoonseo (@okayoon) on CodePen.



'개념' 카테고리의 다른 글

로컬 스토리지(Local Storage)  (0) 2019.06.05
쿠키(Cookie)  (0) 2019.06.05
CND이란?  (0) 2019.05.16
MVC 패턴  (0) 2019.05.16
구글 API KEY생성하는 법  (0) 2018.10.26
void 0 이란?  (0) 2018.10.23
let 키워드, const 키워드  (0) 2018.10.23
ES6 매개변수 기본 정의  (0) 2018.10.16


구글 API KEY생성하는 법


*google api 사용은 하루에 2,500건, 초당 10건의 요청에 한해서만 무료라고 합니다.

그 이상 사용하려면 유료로 전환해야 한다고 합니다.


1. 구글 로그인을 합니다.


3.프로젝트 등록 ( 프로젝트 만들기 > 만들기 )
최초로 들어오면 프로젝트가 없습니다.
프로젝트가 있을 경우 Google APIs 옆 프로젝트 선택에서 프로젝트 선택하면 됩니다.




프로젝트 이름을 변경하면 아래 프로젝트ID값이 변경이 됩니다.

수정 버튼을 눌러 ID값을 수정할 수 있는 것 같지만 어떠한 규칙에 의해 변경하는 것 같습니다. 저는 하지 않았습니다.


만들기 클릭



4.API 및 서비스 사용 설정
방금 만든 프로젝트 (My project01) 선택된 모습이 보입니다.
API 및 서비스 사용 설정 클릭


이런 API 선택 창이 뜨는데, 왼쪽 사이드 바에서 사용하려는 API를 선택합니다.

저는 Maps를 사용하기 위해 클릭했습니다.



만약 옆에서 찾는 것이 어렵다면.

검색 창에서 내가 사용하려는 API를 검색하면 됩니다.

저는 Maps를 사용하기 위해 Javascript maps를 검색하였습니다.


검색 결과에 나온 API 타일을 클릭해줍니다.


이동한 Maps 페이지에서 사용 설정 클릭하여 Maps Javascript API 설정 페이지로 이동합니다.


Maps 설정 페이지 인지 확인 한 번하고..


사용자 인증 정보를 클릭합니다.


API KEY를 받기 위해, 사용자 인증 정보 인증키 클릭하면 선택 항목이 보입니다.

여기서 API 키를 선택해 줍니다.


API키 생성 완료!

간단하죠? 

API 키가 보입니다.


사용자 인증 정보 페이지에 가면 API키가 만들어 진 것이 확인 가능하고 옵션 수정도 가능합니다.

여기서 노란 경고창이 뜬 이유는 애플리케이션 제한 사항을 설정하라는 부분입니다.

무시하고 사용해도 되지만 제한사항 설정을 할 경우 내가 설정한 곳 이외에서 내 인증키를 사용하지 못합니다.


5. 리퍼러 설정

API 설정에서 애플리케이션 제한 사항을 선택해줍니다.

웹에서 사용할 것이기 때문에 HTTP 리퍼러(웹사이트)를 체크하면 도메인 입력칸이 나오는데

내가 key를 사용하는 곳의 도메인 주소를 입력해줍니다.

*리퍼러를 설정 할 경우 다른 애플리케이션에서 이 키를 사용할 수 없게 합니다.



끄읕~~








'개념' 카테고리의 다른 글

쿠키(Cookie)  (0) 2019.06.05
CND이란?  (0) 2019.05.16
MVC 패턴  (0) 2019.05.16
CSS를 이용해 객체 가운데 위치하기!  (0) 2018.10.29
void 0 이란?  (0) 2018.10.23
let 키워드, const 키워드  (0) 2018.10.23
ES6 매개변수 기본 정의  (0) 2018.10.16
javascript .map() 메서드를 알아보자  (0) 2018.09.17


void 0 이란?

라이브러리 코드를 학습하던 중에 이런 코드를 발견했다. 
if(params === void 0){ }

void 0이 뭐지? 
검색해 본 결과 void는 javascript의 연산자이고 항상 undefined를 반환한다고 한다.
void 0, void 'hello' 등 전부다 undefined를 한다.

그럼 왜? undefined를 안쓰고?
if(params === undefined){ }

첫번째로는 undefined는 항상 undefined가 아닐 수도 있다는 얘기다.
var undefined = 'hello';

console.log(undefined);
// hello

그리구 짧아서 브라우저로 전송되는 바이트 수를 줄일 수 있고 관용적이라고 한다.

MDN링크

'개념' 카테고리의 다른 글

CND이란?  (0) 2019.05.16
MVC 패턴  (0) 2019.05.16
CSS를 이용해 객체 가운데 위치하기!  (0) 2018.10.29
구글 API KEY생성하는 법  (0) 2018.10.26
let 키워드, const 키워드  (0) 2018.10.23
ES6 매개변수 기본 정의  (0) 2018.10.16
javascript .map() 메서드를 알아보자  (0) 2018.09.17
javascript .filter() 메서드를 알아보자.  (0) 2018.09.17


let, const 키워드

let 키워드, const 키워드를 알아보기 전에 var 키워드를 알아보자.

[var 키워드]

var 키워드는 변수를 선언할 때 사용하며 변수는 스코프(scope)로 구분한다.
크게 로컬 변수(Local variable), 글로벌 변수(Global variable)로 나뉜다.

로컬 변수(Local variable) - 함수, 오브젝트 
글로벌 변수(Global variable) - 프로그램 전체

ES5에서 vat 키워드를 사용하여 변수를 선언하도록 하기 위해 'use strict'를 도입했다.
'use strict'를 사용하면 var 없이 선언 시에 에러가 발생한다.

하지만 근본적으로 var의 문제를 해결하지 못한다.
그래서 var 키워드의 문제점을 해결하기 위해 나온 것이 let 키워드와 const 키워드이다.

[let 키워드]

1.함수 내에 작성하면 함수가 스코프다.
function () {
    let id = 'okayoon';
}

2.함수 내에 if문에 작성하면 if의 블록이 스코프다.
function (id) {
    if(id === 'okayoon'){
        let userId = id;
    }
}

3.블록 밖에 같은 이름의 변수가 있어도 스코프가 다르므로 각각 설정된 값이 유지된다.
let id = 'okayoon';

function (id) {
        let id = 'ok';
        console.log(id);
        // id의 값은 ok    
}
console.log(id);
// id의 값은 okayoon

4.블록 안에 블록을 계층적으로 작성하면 각각의 블록이 스코프다.
function (id) {
        let id = 'ok';

        function (){
            let id = 'okayoon';
            console.log(id);
            // id의 값은 okayoon
        }    

        console.log(id);
        // id의 값은 ok
}

5.같은 스코프에서 같은 이름으로 let 변수를 선언할 수 없다.
function (){
    let id = 'okayoon';
    ............
    ............
    let id = 'ok';
}    

6.호이스팅(Hoisting)

호이스팅(Hoisting)이란?
자바스크립트는 소스 코드 위에서 아래로 순차적으로 실행한다.
따라서 호출될 함수를 작성한 후 아래에서 함수를 호출해야 함수 호출이 정상적으로 된다.
하지만 함수 선언문은 호출하는 코드를 위에서 작성 후 호출 함수를 아래에서 작성해도 호출이 된다.
이를 호이스팅(Hoisting)이라고 한다.

let과 const 키워드는 호이스팅(Hoisting)되지 않는다고 알려져 있지만 실제로는 그렇지 않다고 한다.

예제의 경우 호이스팅(Hoisting)문제가 아니라 TDZ(Temporal Dead Zone)에 의해 ReferenceError를 발생한다.
let id = 'okayoon';

// 익명즉시실행함수
(function () {
    console.log(id);
    // undefined가 아니라 throws a ReferenceError 라고 한다.
}());
var 키워드 일 경우 function 함수가 먼저 선언된 것으로 인식되므로 console.log의 값은 undefined가 된다.
하지만 let과 const의 키워드는 호이스팅은 되나 TDZ에 의해 ReferenceError이 발생한다.

이해하려고 검색해서 찾아보았으나 정확히 모르겠다.
간단히 말해서 내부 로직 실행은 되는데, 그 안에서 문제가 생겨 바인딩 되지 못한다?
그래서 실행은 되니 호이스팅은 되는 것이고 과정에서 실패하여 언뜻 보았을때 호이스팅 자체가 안되는 것으로 보인다... 로 대충 이해하는 정도ㅠㅠ
자세한 것은 잘 정리해두신 블로거 글이 있어서 참고링크 로 걸어둔다.

7.this
var id = 'okayoon';
console.log(this.id);
// okayoon
var 키워드는 this로 글로벌 오브젝트의 id값을 출력한다.

let id = 'okayoon';
console.log(this.id);
// undefined
 let은 글로벌 오브젝트(window)에 설정되지 않는다.

[const 키워드]

1.변수에 할당된 값을 변경할 수 없다.
(할당된 값은 상수가 된다.)
const id = 'okayoon';

try{
    id = 'ok';
} catch(e){
    console.log('const 재할당 불가');
}
// 재할당 에러가 발생하고 try catch문에 의해 console.log의 문구가 실행된다.

2.값을 변경할 수 없다는 점을 제외하면 let 키워드와 기능 및 스코프가 같다.


+ Recent posts