
모든 내용 X
새로 알게된 내용, 헷갈리는 부분, 중요한 부분만 기재함
1. box model - display
인라인 요소는 줄바꿈이 되지 않기 때문에 수평정렬이 된다
하지만 width, height, margin 상하값 들이 적용되지 않는다
인라인 요소인 span에게 width, height, margin를 줬다
margin 좌우값만 적용되는 걸 볼 수 있다

인라인 블록은 인라인과 블록의 성질을 다 가지고 있기 때문에 수평 정렬도 되고
width, height, margin도 전부 적용된다

하지만 margin을 빼보면 요소들 사이의 빈 공간이 있다

html에서 span을 줄바꿈해서 적었기 때문이다
<span>인라인블록</span>
<span>인라인블록</span>
<span>인라인블록</span>
컴퓨터는 html의 스페이스 한 칸까지 인식하기 때문에 줄바꿈을 하면 한 칸 띄어져 있다고 본다
해결법
<span>인라인블록</span><span>인라인블록</span><span>인라인블록</span>

font-size: 0span 사이의 빈공간이 0이 되서 사라진다
폰트 사이즈가 0이니까 다른 글자들도 안보이게 되는데 필요한 애들만 폰트 사이즈를 다시 주면 된다
하지만 이런 방법은 번거롭고 귀찮기 때문에 인라인 블록을 수평정렬할 때 쓰지 않는다
2. position

normal flow

position 주기
두번째 블랙 박스에 position: absolute 을 지정했다
위치값을 지정하지 않아서 static일 때의 위치에 있다
변화는 세번째 박스에게 생겼다
normal flow에서 벗어난 두번째 박스를 인식하지 못하고 그 자리에 아무것도 없다고 생각해서 내가 자리 채울게~ 하고 위로 올라간 것이다
올라갔더니 두번째 박스에 가려서 안보인다

absolute 예시 살펴보기
네이버 뉴스에서 더보기 버튼의 위치는 왜 position: absolute로 설정했을까?

html 구조는 언론사별 가장 많이 본 뉴스 - 뉴스 컨텐츠 - 더보기 버튼 순이다
더보기 버튼이 제일 아래에 마크업됐는데 위치는 우상단에 둬야 하니까 position: absolute으로 위치를 조정해준 것이다
근데 왜 더보기 버튼을 가장 마지막에 마크업했을까?
스크린 리더기는 html 구조대로 읽기 때문이다
타이틀을 얘기하고 뉴스 컨텐츠를 얘기해주고 나서 더 보겠냐는 물음이 나와야 흐름상 논리적이다
이런 목적으로도 position 속성이 사용된다

3. float
float된 요소는 normal flow와 다른 차원에 있어서 형제들과 부모가 float된 요소를 알아보지 못한다
그럼 어떻게 알아보게 할까 (어떻게 float를 해제할까)
아래는 normal flow 상태

두번째 검정 박스에게 float: left를 줌
검정 박스가 사라짐

float을 주면 넓이가 사라져서 값을 다시 줘야한다
width: 100%을 넣으니까 다시 나타났다

근데 마지막 핑크 박스는 float된 검정 박스를 인식하지 못하고 있다
검정 박스 자리에 아무것도 없다고 생각해서 자기가 올라갔고 검정 박스에 의해 가려져서 안보이는 상태다
이렇게 자기 형제가 float 됐는지 아닌지도 모르고 엄한 자리로 가는 애들의 기강을 잡는 방법이 clear이다
clear을 줌으로써 같은 형제 내에서 float 요소를 알아보게 한다
이 예시에서는 검정 박스가 float: left로 있으니까 니 형제 left에 있다~하고 clear: left를 준다

앞에 있는 형제가 float: left OR right 인 가변적인 상황이라면 both를 쓰면 된다
overflow: hidden을 쓰는 경우float:left 일 때ul이 자식의 높이를 인식하지 못하고 있다
ul에게 overflow: hidden을 주면 자식의 높이를 인식한다
그런데 overflow: hidden을 쓰면 부모의 영역만큼만 보여줘서 자식의 컨텐츠를 잘라버릴 수도 있다
그런 경우에는 display: inline-block을 줘도 해결 되지만 block처럼 라인을 다 차지하지 않기 때문에 넓이값을 다시 줘야 한다
2. clearfix
html에는 존재하지 않고 css에만 존재하는 가상의 요소를 형제로 만든다
after 가상 요소를 부모에게 부여해서 막내 자식을 만든다 (before는 첫 번째 자식)
<ul class=clearfix>
<li></li>
<li></li>
<li></li>
</li>
.clearfix::after { ✅ .clearfix 와 같은 요소를 유틸리티 클래스라고 부름
content:''; ✅ 꼭 있어야 요소가 생성됨
display: block ✅ 가상 요소는 inline 속성을 가지고 있어서 block으로 변경해준다
clear: both ✅ 가상요소가 다른 형제들을 인식함
}
<가상 요소를 왜 사용할까>
가상 요소를 사용하지 않으면 html에 불필요한 요소들이 생길 수 밖에 없다
필요없는 html을 자제하기 위해 가상 요소를 사용한다
pc화면에서 flex를 지원하지 않는 경우가 있어서 float이 실무에서 쓰인다
4. 실습
수평정렬 이용해서 아래와 같은 로그인 ui 만들기
원본

실습

실습을 통해 알게 된 내용
button, a 태그 사용한다button은 button을 누름으로써 특정 기능이 발생할 때나 form에서 사용한다a 태그는 다른 페이지로 이동할 때 사용한다 → 네이버의 로그인, 아이디·비밀찾기, 회원가입은 다른 페이지로 이동해서 진행되니까 a 태그로 만들어준다 button안에 들어가는 컨텐츠 요소는 기본적으로 수직수평 정렬이 된다button의 type이 없으면 디폴트는 submitdiv 요소는 의미가 없기 때문에 사용을 자제하자 background로 처리한다 → naver 로고는 중요하니까 img로 할 수도 있다img 태그에 vertical-align, margin을 통해 위치를 조정할 수 있다img 태그에 ling-hight도 적용된다img 태그도 인라인 요소지만 예외적으로 너비, 높이값을 지정할 수 있다alt와 접근성
로그인 버튼의 네이버 로고는 접근성 측면에서 alt="naver" 하면 의미있는 이미지가 된다
하지만 그 아래 아이콘들은 바로 옆 문구들과 정보값이 중복되기 때문에 alt속성이 필요없다
그렇다고 alt속성을 삭제하면 스크린리더기가 img의 경로를 읽어버린다
alt속성이 필요하지 않는 경우에는 삭제하지말고 alt=""와 같이 비어두자

5. flex
flex는 자신의 넓이를 display: block처럼 차지한다

inline-flex는 자식 요소만큼만 차지한다

flex-direction은 축의 방향을 바꾼다
flex-direction: row;가 기본값이다

flex-direction: row-reverse;

flex-direction: column;

flex-direction: column-reverse;

flex는 축(Axis)을 기준으로 정렬된다
row 기준으로 justify-content 설정하기
justify-content: flex-start;

justify-content: flex-end;

justify-content: center;

justify-content: space-between;

justify-content: space-around;

justify-content: space-evenly;

column 기준으로 justify-content
justify-content: flex-start;

justify-content: flex-end;

justify-content: center;

justify-content: space-between;

justify-content: space-around;

justify-content: space-evenly;

실습
아래 그림을 flex로 정리하기

결과물

article{
background:black;
width:350px;
height:300px;
/* 실습 */
display: flex;
justify-content: space-between;
}
.right_side, .center, .left_side{
height:300px;
/* 실습 */
display: flex;
flex-direction: column;
justify-content: space-between;
}
/* 실습 */
.right_side {
flex-direction: column-reverse;
}
1. css
nth-child은 사용하기 편하지만 자식 요소가 추가되면 차례가 변경되서 곤란하다class를 사용한다 div같은 블록요소는 자기가 위치한 곳에서 전체 너비를 가지기 때문에 화면을 꽉 채우겠다고 굳이 width: 100% 안해줘도 된다 2. 이호준 강사님의 추천 학습법
3. 참고 링크
speedcoder - 타자연습
github - 무엇이 제일 나은 float 해제법일까
tommyzip - css 레이아웃
tistory - float 해제
flexboxfroggy - flex 연습 사이트