상속
- 상속이란 부모요소에 적용한 스타일이 후손요소들에게까지 영향을 주는 특성을 말합니다.
- 하지만 모든 속성들이 상속되는 것이 아닙니다.
- 상속이 적용되는 속성들
- font 관련 속성: font-size, font-weight, font-style, line-height, font-family, color
- text 관련 속성: text-align, text-indent, text-decoration, letter-spacing, opacity
** 텍스트 관련 속성들만 상속
우선순위
- 우선순위 규칙
- 명시도 점수
- !important: 무한대 점
- 인라인 스타일: 1000점
- 아이디 선택자: 100점
- 클래스 선택자: 10점
- 태그 선택자: 1점
- 전체 선택자: 0점
- :hover, :active, :first-child와 같은 가상 클래스는 클래스 선택자로 취급하여 10점
- ::before, ::after와 같은 가상요소는 태그선택자로 취급되어 1점
- :not()은 점수가 0점
- 명시도 점수가 높은 선언이 우선
- 점수가 같은 경우 가장 마지막에 해석되는 선언이 우선
- 명시도 점수는 상속보다 우선
- !important가 적용된 선언방식이 최우선
ex) a {} 1점
a:hover 11점
a::before 2 점
/* 100+1 = 101점 */
#aaa h1 {
color: gray;
}
/* 1점 */
h1 {
color: lightcoral;
}
/* 11점 */
.bbb h1 {
color: orangered;
}
/* 112점 tag2개라서 ----> 적용*/
#aaa div.bbb h1 {
color: greenyellow;
}
/* 111점 */
#aaa .bbb h1 {
color: tomato;
}
/* 12점 */
div.bbb > h1 {
color: violet;
}
/* 1+100+1+0+10 = 112점 */
ul#fruit > li:not(.orange) {}
<!-- #aaa>.bbb>h1{안녕하세요6} -->
<div id="aaa">
<div class="bbb">
<h1>안녕하세요6</h1> <!--만약에 인라인 스타일 쓰면 우선 적용-->
</div>
</div>
** 실무에서는 important 없이
조상을 많이 나열해서 우선순위를 높임 (인라인 스타일도 사용X)
/* 네이버, 조상을 최대한 많이 나열해서 우선순위 up */
#header .header_inner .shortcut_list .service_name {
overflow: hidden;
-o-text-overflow: ellipsis;
text-overflow: ellipsis;
white-space: nowrap;
display: block;
margin-top: 7px;
line-height: 20px;
text-align: center;
}
단위
px, %
- px 단위는 픽셀이라는 뜻이며 화면에 고정적인 길이, 절대값
- 1px은 디바이스마다 고정크기가 다를 수 있음
- % 단위는 부모요소 대비 비율적 영향을 받습니다.
* .root w50% → body 대비 50% (body > .root)
* .parent 50% → root 대비 50%
* margin 도 % 사용 가능
=> 와이어프레임 설계 시, 적응형 사이트를 만들 때 퍼센트로 쓰면 좀더 편함
em, rem
- em 단위는 요소 자기 자신의 font-size에 따라 결정됨
- rem단위는 html태그에서 지정한 font-size에 따라 결정됨
- html태그에는 기본값으로 16px이 정의
따라서 따로 font-size를 조절하지 않으면 2rem은 32px이됩니다.
* 16픽셀의 40em ⇒ 16*40 = 640 (개발자도구로 검사 시 테두리2px씩 더해서 644로 나오기도 함)
* 자기자신 폰트사이즈 10px → 40em ⇒ 400픽셀
* rem 사용 시 html로 10px하면 전부 상속되어 모든 글씨가 작으니까
계산하기 쉽게 html 10px로 두고, body에 font-size:18px; 이런 식으로 적용해서 폰트 크기 조절
vw, vh
- 뷰포트(디바이스 화면)를 기준으로 설정되는 길이 단위, 0~100사이의 값
- 뷰포트란 화면 전체 크기를 의미, 어떤 이미지의 높이값을 100vh로 지정하면
데스크탑 화면이든 태블릿, 모바일 화면과 관계없이 높이가 화면 전체를 꽉 채움
* 주의! 기본적으로 CSS는 div에 세로 길이가 없으면 화면에 안 보임 (가로는 보통 기본값 100%)
*** w25p w25e w25r => 에밋문법으로 p는 %, e는 em, r은 rem
박스 관련 속성
width, height
width: auto; 100%(기본값)
height: auto; 컨텐츠 크기대로(기본값 0px)
** container height 50% → 아무것도 안 보임 (body 높이가 0이라서)
.container {
background: orange;
/* padding: 20px 0; */
box-sizing: border-box;
width: 70%;
height: 300px;
}
.box {
background: greenyellow;
height: 50%; /* */
}
.item {
background: violet;
height: 50%;
}
max-width, min-width
* max 500
부모400 → 자식 400, 부모 600 → 자식 500
* min 200
부모 400 → 자식 400, 부모 100 → 자식 200
** max-height, min-height 동일
좌측 max-width: 500, 우측 min-width: 200
margin
개별 속성 : margin-top, margin-right, margin-bottom, margin-left
단축 속성 : margin: 10px 20px 5px 이렇게 한 줄로 사용
.box {
width: 25%;
height: 100px;
border: 4px solid gray;
background: #333;
}
.box:first-child {
margin-bottom: 20px;
}
.box:last-child {
margin-left: 5px;
/* 위의 margin bottom이랑 충돌하면 큰거에 먹힘 */
margin-top: 5px;
margin-right: 5px;
margin-bottom: 5px;
/* 4방향에 전부 5px 씩 마진 추가 */
margin: 7px;
/* [상하] [좌우] */
margin: 10px 20px;
/* [상] [좌우] [하] */
margin: 10px 20px 30px;
/* 12시부터 시계방향 t->r->b->l */
margin: 10px 20px 30px 40px;
}
// 중앙 배치
section {
width: 474px;
border: 4px solid greenyellow;
}
section h1 {
width: 237px; // 50%
border: 4px solid violet;
text-align: center;
margin-left: 118.5px; --> 일일이 고쳐주기 보다 % 사용 // 25% // auto
margin-right: 118.5px; // 25% // auto
}
** 만약 h1 width 50% → 70% 로 바꾸면?
직접 바꾸는 것 보다 margin-left, margin-right 모두 auto로 설정하면 중앙으로 정렬
*** 주의!
부모 요소가 width 100%라면 여유 마진이 없기 때문에 auto 적용할 마진도 없어서 적용 불가
- 마진 분배를 통해 박스 X축 정렬을 하려고 할 때
가로길이가 100%면 여유마진이 없어서 분배를 못하므로 정렬이 안 됨
- 상하 여백 역시 세로 길이를 제한해야 auto 가능
section h2 {
/* 여유마진이 없음 w100% 기본값 숨김상태*/
margin: 10px auto;
/* w50p 이렇게 가로를 줄여줘야 자동 정렬됨 */
width: fit-content; /* 또는 fit-content */
text-align: center;
}
padding
- 안쪽 여백
- 패딩을 쓰면 박스 크기가 변함 (본인 크기 + 패딩)
- 박스크기가 변하면 레이아웃이 깨지기 쉬움 ⇒ 가로세로 주의!
가로 400, 세로 430 해야 가로세로 변동없이 패딩 추가 가능
- 패딩 자동계산
box-sizing: border-box ***** → 전체 선택자로 box-sizing: border-box
** box-sizing: content-box (기본값)
.container {
width: 500px;
height: 500px;
background: orange;
margin: 100px;
padding-left: 50px;
padding-right: 50px;
padding-top: 40px;
padding-bottom: 30px;
}
// container 600 * 570
border
- 패딩처럼 보더로 인해 박스가 늘어남 → boxsizing borderbox 써야 함
- border-style이 없으면 테두리는 화면에 보이지 않음
- border-width : 선의 두께 (기본값 medium)
- border-style : 선의 종류 (기본값 none) solid / dashed / dotted / double / none / groove, ridge, inset, outset
- border-color : 선의 색상 (기본값 black)
display
- 요소가 화면에 보여지는 특성을 지정
- block : 블록 요소 지정
- inline : 인라인 요소 지정
- inline-block : 인라인 요소 + 너비, 높이 지정 가능
- none : 요소를 사라지게 함 (다음 요소가 자리 차지)
- flex, grid 등
인라인 상태에서 마진은 안 먹음 → block 상태에선 모두 적용됨
a태그 원래 인라인속성이라 해당 링크를 클릭해야 하는데
a 디스플레이 블록으로 바꾸니 가로세로 조정해서 클릭영역을 넓게 쓸 수 있음
overflow
- 박스 안의 내용이 박스보다 클 경우 넘치는 부분을 제어
- visible (기본값) : 전체를 보여줌
- hidden : 넘치는 컨텐츠를 숨김
- auto : 넘치는 컨텐츠가 존재할 경우에만 스크롤바 생성
- scroll : 스크롤바 생성
opacity
- 요소의 투명도 지정
- 0 : 투명, 1 : 불투명
- 0 ~ 1 사이의 소수점 숫자로 설정
- 0으로 투명해진 경우 화면에 보이지 않고 자리 유지
단, 투명해진 요소에 마우스 호버 시 입력 커서로 변하는 등 알 수 있음
- 요소를 숨기는 용도로 사용하기 보다는 자연스러운 애니메이션 효과를 위해 사용
cf. visiblity: hidden : 자리 유지 + 보이지 않음
Reset CSS
브라우저가 이미 태그 자체에 설정한 margin, font-size 등 존재 (ex. body, h1 ... )
한 번에 설정하기 위해 사용하는 것이 reset css
https://www.jsdelivr.com/package/npm/reset-css
jsDelivr - A free, fast, and reliable CDN for JS and Open Source
Optimized for JS and ESM delivery from npm and GitHub. Works with all web formats. Serving more than 150 billion requests per month.
www.jsdelivr.com
다양한 reset css가 있지만 위의 링크를 활용한다면 HTML 문서 중 head에 복붙해 사용
마지막에 해석, 즉 아래에 있는 코드일 수록 우선순위가 높으므로 다른 css 보다 위에 사용하는 것을 권장
<link rel="stylesheet"
href="https://cdn.jsdelivr.net/npm/reset-css@5.0.2/reset.min.css">
/* library css */
/* 내 커스텀 css */
화면을 보고 구조 잡기
일반적으로 아래의 순서대로 구조를 잡음
크기가 큰 구조 → 작은 요소
왼쪽 요소 → 오른쪽 요소
화면 위 → 화면 아래
+ 궁금한 점 개인 학습
transition은 배웠는데 좀더 실제 사용하는 애니메이션 효과를 추가하기 위해 transform 검색
크롬에서 호버 시 이미지가 확대되는 느낌을 주기 위해 transform: scale(1.2)를 사용하면 됨
transition: transform 0.3s; 은 호버 되기 전의 이미지에 설정해야 hover 설정, 해제 모두 부드러운 애니메이션이 적용됨
더보기
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
* {
box-sizing: border-box;
}
.container {
display: flex;
font-family: '나눔고딕';
color: rgb(43, 36, 36);
}
.card {
width: 250px;
height: 350px;
border: 2px solid rgb(201, 201, 201);
margin: 50px auto;
border-radius: 15px;
box-shadow: 2px 2px 5px 3px #c7c7c7;
padding: 10px;
}
.card .image {
border: 2px solid lightgray;
height: 250px;
border-radius: 15px;
background: whitesmoke;
overflow: hidden;
}
.card .content {
/* background: black; */
}
.card .image img {
width: 100%;
transition: transform 0.3s;
}
.imgs {
height: 100%;
}
img:hover {
transform: scale(1.2);
}
</style>
</head>
<body>
<div class="container">
<div class="card">
<div class="image">
<img src="data:image/jpeg;base64,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" alt="">
</div>
<p class="content">
2024.03.12 바다
</p>
</div>
<div class="card">
<div class="image">
</div>
<p class="content">
2024.03.12 하늘
</p>
</div>
<div class="card">
<div class="image">
</div>
<p class="content">
2024.03.12 산
</p>
</div>
</div>
</body>
</html>