계단식 및 상속
계단식
- Cascading Style Sheet : 계단식
- 동일한 우선순위의 두 규칙 -> 마지막 규칙 적용
우선순위
- 선택자의 선택이 얼마나 중요한가
- 요소 선택자는 덜 구체적 -> 중요도↓
- class 선택자는 구체적 -> 중요도↑
상속
- 부모 요소에 적용된 CSS 속성은 자식요소에게 상속
- width와 같은 일부 속성은 상속X
작동방식
- 상속
- 색상 : 직접 자식 + 간접 자식에 적용
- special class 추가
- 상식적으로 상속됨
- 상속 제어
- inherit : 상속에 영향O
- initial : 속성값이 상속 대신 기본 스타일시트 속성값 inherit
- unset : natural 값으로 재설정 (상속되면 inherit, 상속안되면 initial)
- 모든 속성 값 재설정
- all : 상속 값을 모든 속성에 한번에 적용하는 속성
body {
color: green;
}
.my-class-1 a {
color: inherit;
}
.my-class-2 a {
color: initial;
}
.my-class-3 a {
all: unset;
}
계단식 이해하기
- 소스 순서 : 마지막 규칙이 우선 (속성 덮어쓰기)
- 우선순위
- 구체적인 선택자일수록 우선시 (자릿수로 가산점)
- style 속성 (인라인 스타일)
- ID 선택자
- class 선택자, 속성 선택자, pseudo-class 선택자
- 요소 선택자, pseudo-elemnet 선택자
- 덮어쓰기가 이루어지는 것은 규칙이 아닌 속성
- 모든 요소에 공통 스타일 적용 -> class로 일부 요소만 스타일 변경
- 구체적인 선택자일수록 우선시 (자릿수로 가산점)
<div id="outer" class="container">
<div id="inner" class="container">
<ul>
<li class="nav"><a href="#">One</a></li>
<li class="nav"><a href="#">Two</a></li>
</ul>
</div>
</div>
/* 1. specificity: 1-0-1 */
#outer a {
background-color: red;
}
/* 2. specificity: 2-0-1 */
#outer #inner a {
background-color: blue;
}
/* 3. specificity: 1-0-4 */
#outer div ul li a {
color: yellow;
}
/* 4. specificity: 1-1-3 */
#outer div ul .nav a {
color: white;
}
/* 5. specificity: 0-2-4 */
div div li:nth-child(2) a:hover {
border: 10px solid black;
}
/* 6. specificity: 0-2-3 */
div li:nth-child(2) a:hover {
border: 10px dashed black;
}
/* 7. specificity: 0-3-3 */
div div .nav:nth-child(2) a:hover {
border: 10px double black;
}
a {
display: inline-block;
line-height: 40px;
font-size: 20px;
text-decoration: none;
text-align: center;
width: 200px;
margin-bottom: 10px;
}
ul {
padding: 0;
}
li {
list-style-type: none;
}
- 1 < 2 : id(1) vs id(2)
- 3 < 4 : id(1) class(0) vs id(1) class(1)
- 7 > 5 > 6
3. !important
- 일반적인 계단식 규칙 무시
- 선언에 !important 덧붙이면 모든 규칙보다 우선함
- 사용 권장 X
border: none !important;
총정리
- 작성자 스타일 시트 선언
- 사용자 스타일 시트 선언
- 브라우저 기본 스타일
선택자
기본 선택자
- 전체 선택자 (*): 문서 내의 모든 요소
- 스타일 제거시
- 더 쉽게 읽을 수 있도록
- 유형 선택자 (elementname) : 주어진 이름을 가진 모든 요소
- 클래스 선택자(.classname) : class 가진 모든 요소
- .highlight
- h1.highlight
- 하나의 요소에 여러개 지정 가능 (<p class="notebox danger">)
- ID 선택자(#idname) : id를 가진 모든 요소
- 클래스 선택자와 같은 방식
- 하나의 요소에는 하나의 id만 적용 가능
- 속성 선택자 ([attr])
- [attr] : 속성 존재하면 선택
- [attr=value] : 속성값 정확히 일치하면 선택
- [ ~= ] : 속성값이 일치하거나 값 목록에 있으면 선택
- [ |=] : 속성값이 일치하거나 value로 시작하는 속성이 있으면 선택
- 하위 문자열 일치 선택자
- [ ^= ] : value로 시작하는 속성이 있으면 선택
- [ $= ] : value로 끝나는 속성이 있으면 선택
- [ *= ] : value를 포함하는 속성이 있으면 선택
- 닫는 괄호 앞에 i를 붙이면 대소문자구분X
그룹 선택자
- 선택자 목록 (,) : 하나의 선택자라도 유효하지 않으면 전체 규칙 무시
결합자
- 자손 결합자 (A B) : 첫번째 요소의 모든 자손 노드 선택
- 자식 결합자 (A > B) : 첫번째 요소의 바로 아래 자식 노드 선택
- 일반 형제 결합자 (A ~ B) : 첫번째 요소를 뒤따르는 부모가 같은 요소 모두 선택
- 인접 형제 결합자 (A + B) : 첫번째 요소를 뒤따르는 부모가 같은 바로 뒤의 요소만선택
의사 클래스/요소
- 의사 클래스 (:) : 상태 정보에 기반하여 요소 선택
- a:visited/hover/focus
- p:first-child/last-child/only-child/invalid
- :nth-child/
- 의사 요소 (::) : HTML이 포함하지 않는 개체 선택
- p::first-line : 모든 p의 첫 줄
- ::before/after { content: "▶" } : 콘텐츠 생성 가능
상자 모델
외부 디스플레이 유형
- 블록 박스
- 줄바꿈
- width와 height 적용
- padding, margin, border이 다른 요소들 밀어냄
- 사용 가능한 공간 채움
- <h1>, <p>
- 인라인 박스
- 줄바꿈X
- width, height 적용X
- padding, margin, border이 다른 요소 밀어내지 않음
- <a>, <span>, <em>, <strong>
내부 디스플레이 유형
- 상자의 내부 요소가 배치되는 방식 표시
- flow : 플로우 레이아웃을 사용해 배치
- table : HTML <table> 처럼 동작
- flex : 플렉스박스 모델에 따라 배치
- grid : 그리드 모델에 따라 배치
기본 Box Model
- content
- padding
- border
- margin : 박스의 크기에 포함X
- 너비/높이 = content + padding * 2 + border * 2
대체 Box Model
- box-sizing: border-box
- 너비/높이 = content 크기
- 모든 요소에 대체 박스모델 사용
html {
box-sizing: border-box;
}
여백
- 박스 주변에 보이지 않는 공간
- 음수값 : 공백 겹칠 수 있음
- 여백 축소 : 맞닿은 여백은 하나의 여백이 되고, 가장 큰 크기로 결정
- margin-top/right/bottom/left
테두리
- 표준 박스모델의 경우 테두리 추가 -> 크기 증가
- 대체 박스모델의 경우 테두리 추가 -> 크기 감소
- border-top/right/bottom/left
- border-width/style/color : solid/dotted/double
패딩
- 음수를 가질 수 없음
- 테두리에서 콘텐츠를 밀어내는 용도
- padding-top/right/bottom/left
박스 모델과 인라인 박스
- 일부 적용
- width, height 무시
- margin, padding, border 적용되지만, 밀어내지 않아 겹쳐짐
inline-block : 중립적인 외부 디스플레이 유형
- 줄바꿈X
- width, height 적용
- padding, margin, border 적용, 다른 요소 밀어냄
배경 및 테두리
배경 스타일링
배경 색상
- background-color
- content & padding에 적용
배경 이미지
- background-image: url( )
- 이미지가 로드되지 않을 상황을 고려하여 적절한 배경색 지정 필요
- 이미지 반복 배열 제어
- 기본값 : 바둑판 반복
- background-repeat: 바둑판 배열 제어
- no-repeat/repeat
- repeat-x/y : 수평/수직 반복
- 이미지 크기 조정
- 기본값 : 잘림
- background-size: 길이, 백분율 사용
- cover : 박스를 덮으면서 비율 유지, 일부 잘릴 수 있음
- contain : 박스 안으로 비율 유지, 간격 생길 수 있음
- 이미지 배치
- 기본값 : (0,0)
- background-position: 좌표계, 길이, 백분율, 키워드 (혼용가능)
- top / right / center
- 그라데이션 배경
- background-image: linear/radial-gradient(각도(deg), 색상 %, 색상%)
- 여러개의 이미지
- 콤마로 구분
- 코드가 앞서면 앞에 배치
- 배경 속성도 콤마로 구분 가능 (순환 적용)
background-image: url(image1.png), url(image2.png), url(image3.png), url(image1.png);
background-repeat: no-repeat, repeat-x, repeat;
background-position: 10px 20px, top right;
배경 고정
- 스크롤 방법 지정
- scroll : 페이지가 스크롤되면 요소의 배경도 스크롤, 요소의 콘텐츠에서는 고정
- fixed : viewport에 고정시켜 배경이 항상 화면에서 동일한 위치에 유지
- local : 페이지가 스크롤되면 요소의 배경도 스크롤, 요소의 콘텐츠에서도 함께 스크롤
- https://mdn.github.io/learning-area/css/styling-boxes/backgrounds/background-attachment.html
Background attachment example
background-attachment: local, new to CSS3, causes an element's background to be fixed to the actual element itself. So When the page is scrolled, the element's background will move along with it only if the element does so (so not in the case of elements w
mdn.github.io
배경 shorthand 사용
- background-color는 마지막 쉼표 뒤에만 지정
- backgrount-position / background-size
테두리
- border
- top/right/bottom/left
- width/style/color : dashed, dotted, solid, double
- 둥근 테두리
- border-radius
- 길이, 백분율
- top/bottom-right/left-radius
텍스트 표시 방향
쓰기 모드
- writing-mode
- vertical-rl : 수직, 오->왼
- vertical-lr : 수직, 왼->오
- horizontal-tb : 수평, 위->아래
논리적 속성
- 쓰기모드 변경으로 인한 콘텐츠 오버플로우 발생
- width -> inline-size
- height -> block-size
- top/bottom -> block-start/end
- left/right -> inline-start/end
콘텐츠 overflow
CSS 기본 동작
- 데이터 손실을 피한다
- 콘텐츠 손실은 손실되었음을 알 수 없음
- 눈에 띄게 overflow
overflow 속성
- overflow
- 기본값: visible
- hidden
- scroll
- 한 축만 스크롤바를 표시하려면 overflow-x/y: scroll
- auto : 넘칠 경우에만 스크롤 막대 표시
- 긴 단어 처리 : word-break; overflow-wrap;
BFC (Block Formatting Context)
- overflow 값을 사용할 때 BFC 생성함
- overflow 값을 변경한 박스의 내용이 미니 레이아웃이 됨
- 일관된 스크롤 환경을 만들기 위해
CSS 값
CSS 값
- 데이터 유형
- 특정 속성에 유효한 값
- color(속성): <color>(데이터형식);
숫자, 길이, 백분율
- <integer> : 정수
- <number> : 10진수, 소수점 가능
- opacity(투명도): 0-1
- <dimension> : 단위가 있는 <number>
- <length>, <angle>, <time>, <resolution>(해상도)
- 절대 길이 단위 : px
- 상대 길이 단위
- em : 부모 요소의 글꼴 크기 -> 중첩
- rem : 루트 요소의 글꼴 크기 -> 중첩X
- lh : 요소의 라인 높이
- 1 vw : viewport 너비의 1%
- 1 vh : viewport 높이의 1%
- <percentage> : 다른 값의 일부
- 부모 요소의 길이 기준
- 허용된 값에 <length>만 포함된 경우 사용불가
색상
- 색상 키워드
- 16진수 RGB 값 (#000000)
- 10진수 RGB값 (rgb(0, 0, 0))
- rgba(0, 0, 0, 0) : 불투명도까지 조절
- HSL (hsl(360, 100%, 100%))
- 색조(Hue) : 색상 0~360
- 채도(Saturation) : 0~100%
- 명도(Lightness) : 0~100% (검은색 -> 흰색)
- hsla(360, 100% 100% / 0) : 불투명도까지 조절
이미지
- 실제 이미지 파일
- url( )
- gradient( )
위치
- 2D좌표
- 위치 키워드
- 가로 위치 값
- 세로 위치 값
문자열과 식별자
- 식별자 : 문자열로 취급X
- 문자열 : content: " "
CSS 항목 크기 조정
고유 크기
- HTML이 CSS의 영향을 받기 전에 설정한 자연스러운 크기
- 빈 div는 크기가 없음
크기 설정
- 외적인 크기 : 디자인 요소에 크기를 지정
- overflow 발생 위험
- 백분율 : 부모 container 너비의 백분율
- 여백을 백분율로 설정하면 인라인(수평) 크기에서 계산
최대/최소 크기
- min-height : 박스는 항상 이 높이 이상
- overflow 피함
- 가변적인 양의 콘텐츠에 적합
- max-height : 이미지 공간 충분하지 않을 때 사용
Viewport 단위
- viewport : 페이지의 가시영역
- vw : 너비(%)
- vh : 높이(%)
이미지, 미디어
대체요소
- <iframe>, <video>, <embed>, <img>
- CSS로 해당 요소의 내부 레이아웃 변경 불가
- 크기 조정
- max-width : 박스 크기에 맞게 축소
- object-fit: cover/contain/fit
- cover : 잘라서 채움
- contain : 비율 유지하고 채우지 않음
- fit : 비율 유지하지 않고 채움
- 레이아웃 사용 : 대체 요소들은 확장되지 않고 시작부분에 정렬
- flex/grid에서 기본 요소들은 채우면서 확장
양식 요소
- <input> : 텍스트 입력 등과 같은 간단한 양식 컨트롤
- <textarea> : 여러줄 텍스트 입력하는 추가 요소
- <fieldset>
- <legend>
텍스트 입력 요소 스타일링
- <input type="text/email">, <textarea> : 다른 박스처럼 동작
input[type="text"],
input[type="email"],
textarea {
border: 2px dotted #000;
margin: 0 0 1em 0;
padding: 10px;
width: 100%;
background-color: orange;
}
input[type="submit"] {
border: 3px solid #333;
background-color: #999;
border-radius: 5px;
padding: 10px 2em;
font-weight: bold;
color: #fff;
}
input[type="submit"]:hover, input[type="submit"]:focus {
background-color: #333;
}
<form>
<div><label for="name">Name</label>
<input type="text" id="name"></div>
<div><label for="email">Email</label>
<input type="email" id="email"></div>
<div><label for="textarea">Textarea</label>
<textarea></div>
<div class="buttons"><input type="submit" value="Submit"></div>
</form>
양식요소의 상속
- 기적으로 글꼴 스타일 상속하지 않음
- 상위 요소에 정의된 글꼴을 사용하려면 CSS에 명시적으로 작성 필요
- font-family: inherit;
양식요소 크기 조정
- 마진과 패딩을 0으로 설정하여 일관성 유지
- 특정 컨트롤만 마진 추가
다른 설정
- <textarea> overflow: auto : 스크롤막대 자동숨김
재설정
- 일관된 작업기반 제공
button,
input,
select,
textarea {
font-family: inherit;
font-size: 100%;
box-sizing: border-box;
padding: 0; margin: 0;
}
textarea {
overflow: auto;
}
표 스타일링
간격 및 레이아웃
table {
table-layout: fixed;
width: 100%;
border-collapse: collapse;
border: 3px solid purple;
}
thead th:nth-child(1) {
width: 30%;
}
thead th:nth-child(2) {
width: 20%;
}
thead th:nth-child(3) {
width: 15%;
}
thead th:nth-child(4) {
width: 35%;
}
th, td {
padding: 20px;
}
- table-layout: fixed;
- 표가 예측 가능하게 작동
- 내용의 양에 따라 크기 조정되어 이상한 결과가 발생하는 걸 막음
- 제목의 너비에 따라 열의 크기 지정
- thead th: nth-child(n); : 요소로 제목 너비 지정
- border-collapse: collapse;
- 표 스타일 작업의 표준 모범 사례
- 테두리 사이 간격을 하나로 축소
간단한 typography
- font-family : 글꼴 설정
- letter-spacing : 주로 가로 여백 설정
줄무늬 행
- tr: nth-child(odd/even)
- 2n, 2n-1
caption
- caption-side : 배치 위치 설정
표 스타일링 빠르게
- table-layout : fixed 사용하여 열 너비 쉽게 설정
- border-collapse: collapse 사용하여 테두리 서로 겹치게 만들어 깔끔하게
- <thead>, <tbody>, <tfoot> 으로 논리적 덩어리 나누기
CSS 디버깅
DOM
- 렌더링된 DOM에서 잘못 작성된 HTML 수정
- HTML 표준화
- JavaScript로 변경된 내용도 표시
소스보기
- 서버에 저장된 HTML 소스 코드
- 특정 시점에 브라우저가 렌더링하는 내용을 정확하게 보여줌
- 진행상황 확인
DevTools
- 적용된 CSS 검사
- 값 편집
- 새 속성 추가
CSS 구성
CSS 깔끔하게 유지하는 팁
- 일관성 유지
- class에 동일한 이름 지정 규칙
- 색상 설명하는 규칙
- 읽기 쉬운 CSS 서식
- 한줄 or 줄구분
- 주석 추가
- 논리 섹션 만들기
- 모든 공통 스타일 만들어두기 (body, p, h1, ul, table)
- 지나치게 구체적인 선택자 피하기
- 여러개의 작은 스타일시트로 나누기
기타 도구
- CSS방법론 : CSS 코딩 가이드
- OOCSS : 객체지향에 기반한 CSS, 재사용 가능
- BEM : Block Element Modifier
- 블록 : 버튼, 메뉴, 로고와 같은 독립적인 것
- 요소 : 리스트, 제목과 같은 블록이 연결되는 것
- Modifier : 스타일이나 동작을 변경하는 플래그
- 그외 SMACSS, ITCSS, Atomic CSS
- 전처리기 : 실행 -> 스타일시트로 변환
- 후처리기 : 완성된 스타일시트 불러옴 -> 최적화, 더 빠른 로드
Sass
- 가장 유명한 전처리기
- 변수 사용
- 모든 색상과 글꼴을 설정으로 정의
- 프로젝트 전체에 해당 변수 사용
$base-color: #c6538c;
.alert {
border: 1px solid $base-color;
}
/* 최종 스타일 시트에서 */
.alert {
border: 1px solid #c6538c;
}
'코딩 > HTML\CSS\JS' 카테고리의 다른 글
[CSS] MDN 과제: 이쁜 레터 모양 종이 만들기 (Assessment wanted for Creating fancy letterheaded paper) (0) | 2023.02.03 |
---|---|
[CSS] MDN 과제: 기본적인 CSS이해 (0) | 2023.02.03 |
[CSS] MDN 정리1 (1) | 2023.01.04 |
[html] MDN 정리3 (1) | 2023.01.04 |
[html] MDN 정리2 (0) | 2023.01.03 |