끈기의 힘 : 뉴비에서 풀스텍으로

[인프런/생활코딩] 섹션4. 레이아웃 기본 (3) position-fixed? 본문

프로그래밍 언어/CSS 공부

[인프런/생활코딩] 섹션4. 레이아웃 기본 (3) position-fixed?

쓰리별 2021. 2. 26. 19:51

5-3. 포지션(position) - fixed(고정된)

이 내용에선 ‘grand’까진 필요 없으니 다음과 같이 코드를 작성하겠다.

<!DOCTYPE html>

<html>

<head>

<style>

#parent, #other{

border:5px solid tomato;

}

#me{

background-color: black;

color:white;

position:absolute;

left:0;

top:0;

}

</style>

</head>

<body>

<div id="other">other</div>

<div id="parent">

parent

<div id="me">me</div>

</div>

</body>

</html>

 

이제 me엘리먼트의 포지션 속성 값을 absolute에서 fixed로 바꿔보자.

일단 결과로는 바꿔도 웹페이지에는 변화가 없다. 그럼 실제로도 그런지 알아보자.

 

'부모에 속하는 id 속성값이 아닌' parent 밑에 새로운 large라는 id 속성값을 갖는 태그를 생성해보자. 그리고 이 large에 다음과 같이 css를 적용하고자 한다.

 

#large{

height:10000px;

background-color: tomato;

}

 

<div id="other">other</div>

<div id="parent">

parent

<div id="me">me</div>

</div>

<div id="large">large</div> 이렇게! 그러면 다음과 같이 보일 것이다.

 

위의 CSS 적용 결과

large의 크기가 원체 크니, 웹페이지에 스크롤이 생기게 된다. 이 상태에서 스크롤을 내릴 때, me라는 엘리먼트가

어떻게 될까요~?? 다음과 같이 고정(fixed)되어 있게 된다.

이열~

, fixed 라는 포지션 값은 우리가 어떤 특정한 엘리먼트를 화면 특정 위치에 고정시켜서

스크롤로부터 완전히 독립되게 하는 것을 말한다.

만약, 우리가 위 그림처럼 왼쪽에 치우친 me라는 엘리먼트를 오른쪽 상단으로 이동시키고 싶다면,

top:0; 는 유지하고 left:0;right:0;로 바꿔주기만 하면 된다잉!!! ★ (right:0; 은 오른쪽에 0의 값만큼 여백을 두고 싶다는 거니까 오른쪽으로 착 달라붙는겨)

ex) Badge 같은 UI를 만드는 경우, 이런 fixed 포지션 값을 이용해 만들 수 있다.

 

만약, me 엘리먼트를 웹페이지 하단에 고정시켜두고 싶으면, topbottom:0;으로 바꾸고

right는 다시 left:0;로 바꾼 다음에 width:100%;text-align:center;를 추가해주면 다음과 같이 하단에 고정된 형태의 UI를 만들어 줄 수가 있다!!! (right보단 left가 우선되니까? 굳이 바꾸지 않아도 될거 같은데..? ++ 직접 해보니 차이 없음!)

★ width나 height 단위를 '픽셀'이 아니라 '%'로 하는 이유가 이거였구나! : 화면 전체로 만들어주고 싶으니 px을 사용하면 한도 끝도 없으니 아예 퍼센티지 단위를 사용하는 게 맞는거구나..

bottom:0; left:0; width:100%; text-align:center;

#me{

background-color: black;

color:white;

position: fixed;

left:0;

bottom:0;

width: 100%;

text-align: center;

} 위 그림의 코드.

 

반대로, me 엘리먼트를 맨 위에 고정시키고 싶으면 bottomtop으로만 바꿔주면 되지.

근데 이렇게 바꿔주면 me란 엘리먼트가 다른 엘리먼트들을 가릴 수 있기 때문에 이런 경우,

meCSS영역에 height 값을 예를 들어, 30px;로 설정해줬으면 컨텐츠와 내용물 간의 차이 즉, padding 속성을 활용해주면 된다. 어떻게??? me를 제외한 모든 엘리먼트의 top 공간을 빈 공간으로 만들어야겠지?? 그러니까 bodyCSS 영역에 쓰고 padding속성을 쓰겠다. 그런데 어느 공간을? top. 그래서 padding-top: 30px;처럼 이걸 코드로 하면 다음과 같다.

me 엘리먼트를 맨 위에          고정시키고 싶어!

그 결과는 이렇게 되지요~

 

멋지다~

이런 표현들을 가능케 해주는 포지션 값을 ‘fixed’라 한다잉!!!

 

중요한 점은 fixedabsolute와 비슷하다는 점! 뭐가?

1) 부모가 사라지기 때문에 딱 자기 컨텐츠 크기(width와 height를 직접 설정한 크기)가 된다는 것이다.

2) 포지션 속성값 fixed를 가진 엘리먼트의 부모 엘리먼트는 자식 엘리먼트와 인연이 끊겼기 때문에 부모 엘리먼트의 크기는 자식 엘리먼트의 크기를 포함하지 X.

 

결론적으로 포지션의 기본값(static)은 ‘static’

relative상대적인 크기

absolute절대적인 크기

fixed스크롤과는 상관없이 화면에 고정시키는 것

 

이 중에서 absolutefixed는 부모와 링크가 끊어지기 때문에 부피가 자기의 컨텐츠 크기만 해지고 늘리고 싶다면,

각자의 CSS영역에서 widthheight로 설정해야 한다는 점이며,

부모 엘리먼트들은 자식을 없는 셈치는, 그래서 자식 엘리먼트들은 작아진다는 특징.

 

★★★ 이 포지션에 대해 충분한 이해를 해야 자유자재로 디자인할 수가 있다! ★★★ Yes, i can

 

Comments