Position
01 static
기본값으로 element가 원래 있어야할 위치
02 relative
부모 element와의 관계가 포인트
부모와의 관계를 기준으로 static 위치가 정해지면,
left | right | top | bottom을 지정할 때 이동
03 absolute
부모 element와의 관계성이 부분 단절
width를 지정하지 않으면 자신의 content 크기만큼 크기 지정됨
offset을 지정하지 않으면 부모 아래 위치
why? 기본값으로 left, top값이 부모 offset만큼 설정되어 있기 때문
부모 element들 | 자식 element의 position:absolute |
position: static |
부모와 완전 무관, HTML의 시작점(0,0)을 기준으로 시작 top, left 지정하면 이동, 지정하지 않으면 static위치(부모의 위치 속에서 결정된 위치) |
position: relative |
부모가 기준 부모의 위치를 기준으로 시작 | top, left 지정하면 이동 |
<div class = "thumbnail_img" style="background-image:url('blahblah')"> <a class="hover_place" href="main.html"><ul class="hover_place_ul"><li class="hover_place_li">성수동</li><li class="hover_place_li">음식점</li></ul></a></div> |
![]() 두 요소(묶음,div)가 나란히 오지 않을 때 문제와 해결 정확히 이해가 안되는데, 왼쪽 아래 그림은 좌측 코드와 같은 구조를 가지고 있고, 오른쪽에선 a~text까지의 코드가 빠져있었다. 각 div를 또다른 div가 감싸고 있었는데, 해당 display:inline-block이었기 때문에 두 묶음이 나란히 와야하는데 계속해서 첫번째 묶음이 아래로 탈락함 ① 요소 크기 점검, padding, margin ② 각 요소의 display와 width, height값 1,2 모두 해봤지만 해결 못함 뭐가 문제일까 봤더니 ul을 안넣으면 작동한다. 그럼 ul의 위치가 문제는 아닐까? 혹시나 싶어 ul의 position:absolute으로 주었더니 의도대로 작동한다. 아니 왜 자식 요소가 부모요소(div wrapper)의 위치까지도 영향을 주는지 이해를 못하겠다. 일단은 졸려서 여기까지만 (나중에 공부해야지) |
04 fixed
스크롤과 독립되게 고정
absolute과 비슷하게 부모와의 관계가 단절되기 때문에
width, height값을 지정하지 않으면 자신 content의 크기만큼 크기 지정
또한 부모 element의 크기는 자식 element의 크기를 가지지 않게 됨
#fixed를 이용하여 헤더를 가운데 맨 위에 고정하는 법
header{
position: fixed;
height, width: 100px; [지정하지 않으면 content크기만큼]
text-align:center;
left, top : 헤더 뿐만 아니라 버튼이라면 버튼의 크기 고정
}
body{ padding-top:height(header의 높이) }
box-sizing
transition
float
float을 사용하여 레이아웃을 만들 때 div(class="wrapper")로 감싸줘야한다
float의 방향이 정 반대인 nav와 content사이 간격을 조절하기 위해서이다
또한, 하단에 footer가 nav나 content 중 높이가 작은 영역의 밑에 오지 않게 하기위해 clear:both;를 선언한다
wrapper{ width:800px; }
nav{ float:left; width:200px; height:400px; }
content{ float:right; width:600px; height:700px; }
footer{ width:100% height:50px; clear:both; }
# 요소에 적당히 자연스러운 그림자 주는 법 (외 2가지 방법 서치)
box-shadow: 0px 4px 3px rgb(178, 178, 178);
# 웹에서 살짝 깨지는 폰트를 부드럽게 만드는 법 (PT에서 텍스트 윤곽선+투명도100%와 유사)
-webkit-text-stroke: 0.5px rgba(0, 0, 0, 0.3)
-transform: rotate(-0.03deg);
# 체크박스와 라벨 수직정렬하기
.label{ vertical-align: 2px; }
# 버튼 테두리 없애기
button{ border:0 none;}
① margin:auto
② text-align:center
③ 박스 position:absolute; left:50%; | 요소 margin-left:-50%;
# 접기, 펼치기 버튼
① html+css만으로 구현하기 : input type="checkbox"
② onclick 속성을 이용 (스크립트)
onclick 속성을 이용2
a:link : 방문 전 링크 상태
a:visited : 방문 후 링크 상태
a:hover : 마우스 오버 했을 때 링크 상태
a:active : 클릭 했을 때 링크 상태
밑줄 속성을 제거하고 싶다면 a { text-decoration: none; }
# 상단 메뉴바
① ul li a span 구조만들기
② ul display:block;
li width:%로 계산해서 지정, float:left; border-top,bottom으로 선만들기
a postion:relative; display:block; line-height지정
③ 수직선 긋기(:before 가상요소 이용)
top:50%; height:2n; margin-top:n; width:1px; left:1px;
.detail_tab{
padding:0 0 60px;
overflow:hidden;
top:0;
transition: top .5s ease-in-out;
}
.detail_tab ul{ padding:0;}
.detail_tab ul li{
float:left;
width:25%;
text-align:center;
border-top:1px solid #e6e6e6;
border-bottom:1px solid #e6e6e6;
}
.detail_tab ul li a{
position:relative;
display:block;
line-height:60px;
font-size:16px;
letter-spacing:-1px;
}
.detail_tab ul li a:before{
content:'';
display:inline-block;
width:1px;
height:16px;
background:#ccc;
position:absolute;
left:-1px;
top:50%;
margin-top:-8px;
}
# fixed를 줬는데 헤더가 상단 고정되지 않을 때
기존에는 잘만 작동하다가 어느순간 헤더가 스크롤을 내렸을 때 같이 사라져버린 걸 발견했다.
뭘까 하나하나 돌려서 수정해보니, 웹폰트를 부드럽게 출력하기 위해 body{transform: rotate(-0.03} transform 속성을 퉁쳐서 준 것이 문제였다. 텍스트가 있는 요소들을 대충 쭉 뽑아서 선택하는 걸로 수정하니 해결
# 컨텐트의 양이 적어도 푸터를 하단에 고정하기
position만으로 푸터를 고정하기엔 여러가지 한계가 존재했다. 특히, 화면에 비해 컨텐트 양이 작아 body끝에 푸터가 오다보니 중간쯤에서 끝나버릴 때
이를 해결하기 위해 구글링해보니 여러가지 방법이 존재했는데, 그중 난 제일 간단해보이는 걸로 적용했다.
① html, body{height:100%; padding:0; margin:0;}
② <div class="wrapper">을 body 바로 아래 요소로 적용해 요소들 감싸기
③ .wrapper{ display:flex; flex-direction:column; height:100%}
④ main { flex:1;} //사진에서 top을 준 이유는 헤더 아래 위치하도록 하기 위해서임
'FRONT-END > CSS' 카테고리의 다른 글
선택자 총정리 (0) | 2021.05.04 |
---|---|
CSS 스타일 기초 (0) | 2021.04.12 |