데이터 엔지니어링 과정
[32일차] CSS
오리는짹짹
2023. 2. 7. 17:36
목차
1. CSS 선택자 다루기
2. CSS 필수 속성 다루기
1. CSS 선택자 다루기
1. 조합 선택자 사용하기
- 그룹 선택자
- 여러 선택자를 하나로 그룹 지을 때 사용
- 선택자와 선택자는 , 로 구분
p, #title, red{
color:red;
}
- 자식 선택자
- 부모 요소의 하위에 있는 자식 요소에 스타일을 적용할 때 사용
- 2개 이상의 선택자 사용
- 선택자와 선택자는 > 기호로 구분
- 하위 선택자
- 선택자의 범위를 특정 부모 요소의 하위 요소로 한정하는 방법
- 2개 이상의 선택자 사용
- 선택자와 선택자는 공백으로 구분
<style>
div p{
color:red;
}
</style>
<div>
<p>lorem 1</p>
<ul>
<li>
<p>lorem 2</p>
</li>
<li>
<p>lorem 3</p>
</li>
</ul>
</div>
<p>lorem 4</p>
- 인접 형제 선택자
- 앞에서 지정한 선택자 요소 바로 다음에 있는 형제 관계 요소를 선택자로 지정
- 2개 이상의 선택자 사용
- 선택자와 선택자는 + 기호로 구분
<style>
h1 + h2{
color:red;
}
</style>
<h1>lorem1</h1>
<h2>lorem2</h2>
<h3>lorem3</h3>
- 일반 형제 선택자
- 이전 선택자 뒤에 오는 형제 관계 요소를 모두 선택자로 지정
- 2개 이상의 선택자 사용
- 선택자와 선택자는 ~ 기호로 구분
<style>
h1 ~ h2{
color:red;
}
</style>
<h1>lorem1</h1>
<h2>lorem2</h2>
<h2>lorem3</h2>
2. 가상 요소 선택자 사용하기
- 가상 요소 선택자
- 존재하는 것처럼 취급해 선택하는 선택자 지정 방법
- :: 기호 를 붙여서 사용
- 기준 선택자와 함께 사용
- 기준 선택자 생략 시, 전체 선택자가 들어간 것으로 적용
- ::before
- 콘텐츠 앞의 공간 선택
- ::after
- 콘텐츠 뒤의 공간 선택
<style>
p::before{
content:'<before>';
}
p::after{
content:'<after>';
}
</style>
<p>Lerem, ipsum dolor.</p>
3. 가상 클래스 선택자 사용하기
- 가상 클래스 선택자
: 요소의 상태를 이용해 선택자를 지정하는 방법 - 링크 가상 클래스 선택자
: a 태그에서 발생할 수 있는 링크 상태를 이용해 선택하는 방법- :link
: 한 번도 방문하지 않은 링크일 때 선택 - : visited
: 한 번이라도 방문한 적이 있는 링크일 때 선택
- :link
<style>
a:link{/* 한 번도 방문한 적이 없는 링크 */
color:orange;
}
a:visited{ /* 한 번이라도 방문한 적이 있는 링크*/
color:green;
}
</style>
<a href="https://www.daum.net">다음</a>
<a href="https://www.google.com">구글</a>
- 동적 가상 클래스 선택자
: 사용자의 어떤 행동에 따라 동적으로 변하는 상태를 이용해 선택자를 지정하는 방법
- :hover
: 요소에 마우스를 올리면 해당 태그가 선택자로 지정 - :active
: 요소를 마우스를 클릭하고 있는 동안에 해당 태그가 선택자로 지정
- :hover
<style>
p:hover{
color:red;
}
button:active{
color:red;
}
</style>
<p>여기를 지나쳐보세요</p>
<button>active</button>
- 입력 요소 가상 클래스 선택자
: 입력 요소의 특정 상태를 이용해 선택자로 지정하는 방법- :focus
: 입력 요소에 커서가 활성화되면 선택자로 지정 - :ckecked
: 체크박스가 표시되어 있으면 스타일 적용 - :disaled
: 상호작용 요소가 비활성화되어 있으면 스타일 적용 - :enabled
: 상호작용 요소가 활성화되어 있으면 스타일 적용
- :focus
<!--focus 사용-->
<style>
input:focus{
color:royalblue;
}
</style>
<input type="number" id="userid">
<!--checked 사용-->
<style>
input:checked + label{
color:aquamarine;
}
</style>
<input type="checkbox" id="userid">
<label for="userid">아이디</label>
<!--disabled 사용-->
<style>
input:disabled,
button:disabled{
background-color: #CCC;
}
</style>
<input tyle="text" disabled>
<button disabled>버튼</button>
<!--enabled 사용-->
<style>
input:enabled,
button:enabled{
background-color: #CCC;
}
</style>
<input tyle="text">
<button disabled>버튼</button>
- 구조적 가상 클래스 선택자
: HTML 태그의 사용 위치, 다른 태그와의 관계에 따라 요소를 선택하는 방법- :first-child와 :last-child
부모의 요소의 첫 번째 혹은 마지막 자식 요소 선택 - :nth-child(n)과 :nth-last-child(n)
- :nth-child(n)
: E요소가 부모의 모든 자식 요소 중 n 번째 자식 요소가 맞으면 선택 - :nth-last-child(n)
: 선택자를 찾는 기준이 부모 요소의 끝에서부터
- :nth-child(n)
- :nth-of-type(n)과 :nth-last-of-type(n)
- :nth-of-type(n)
: 부모 요소의 자식 요소 중 n번째로 등장하는 E 요소 선택 - :nth-last-of-type(n)
: 선택자를 찾는 기준이 끝에서부터
- :nth-of-type(n)
- :first-child와 :last-child
<!-- :first-child와 :last-child 사용 -->
<style>
li:first-child{
color:red;
}
li:last-child{
color:red;
}
</style>
<ul>
<li>lorem 1</li>
<li>lorem 2</li>
<li>lorem 3</li>
<li>lorem 4</li>
</ul>
<!-- :nth-child(n) 사용 -->
<style>
p:nth-child(1){
color:red;
}
</style>
</head>
<body>
<p>lorem 0</p>
<div>
<p>lorem 1</p>
<p>lorem 2</p>
</div>
<div>
<p>lorem 3</p>
<p>lorem 4</p>
</div>
</body>
<!-- :nth-last-child(n) 사용 -->
<style>
p:nth-last-child(2){
color:rgb(103, 216, 154);
}
</style>
</head>
<body>
<p>lorem 0</p>
<div>
<p>lorem 1</p>
<p>lorem 2</p>
</div>
<div>
<p>lorem 3</p>
<p>lorem 4</p>
<p>lorem 5</p>
<p>lorem 6</p>
</div>
</body>
<!-- nth-of-type(n) 사용 -->
<style>
p:nth-of-type(2){
color:red;
}
</style>
</head>
<body>
<p>lorem 0</p>
<div>
<p>lorem 1</p>
<span>span 1</span>
<p>lorem 2</p>
</div>
<div>
<p>lorem 3</p>
<span>span 2</span>
<span>span 3</span>
<p>lorem 4</p>
</div>
</body>
<!-- p:nth-last-of-type(n) 사용 -->
<style>
p:nth-last-of-type(1){
color:Red;
}
</style>
</head>
<body>
<p>lorem 0</p>
<div>
<p>lorem 1</p>
<span>span 1</span>
<p>lorem 2</p>
</div>
<div>
<p>lorem 3</p>
<span>span 2</span>
<span>span 3</span>
<p>lorem 4</p>
</div>
</body>
2. CSS 필수 속성 다루기
1. CSS 특징 살펴보기
- 기본 스타일 시트에 정의된 스타일 속성보다 사용자가 정의한 스타일 속성이 우선 적용
<style>
h1{
font-size:16px;
font-weight:normal;
}
</style>
</head>
<body>
<h1>h1 tag</h1>
<h2>h2 tag</h2>
</body>
- 마지막에 작성된 값이 적용
<style>
p{color:red;}
p{color:blue;}
p{color:orange;}
</style>
</head>
<body>
<p>specificity</p>
<p>specificity2</p>
</body>
- !import 문법
점수가 낮더라도, 다른 선태자들을 모두 압도하고 이 스타일 우선 적용 - 상속
<style>
div{
color:red;
}
</style>
</head>
</head>
<body>
<div>
<p>inherit</p>
</div>
</body>
- 상대 단위
- %
해당 속성의 상위 요소 속성값에 상대적인 크기 가짐 - em
부모 요소의 텍스트 크기에 상대적인 크기 가짐 - rem
html 태그의 텍스트 크기에 상대적인 크기 가짐 - vw
뷰포트의 너비를 기준으로 상대적인 크기 가짐 - vh
뷰포트의 높이를 기준으로 상대적인 크기 가짐
- %
- 색상 표기법
- 키워드 표기법
- RGB 색상 표기법
- HEX 표기법 : # 앞에 붙임
2. 텍스트 속성으로 텍스트 꾸미기
- font-family 속성
- 속성값으로 글꼴명 작성
<style>
p{
font-family:BatangChe, "Times new Roman", serif;
}
</style>
</head>
<body>
<p>font-family</p>
</body>
- font-size 속성
- 텍스트 크기를 변경하고 싶을 때 사용하는 속성
<style>
p{
font-size:14px;
}
</style>
</head>
<body>
<p>Lorem ipsum dolor sit amet.</p>
</body>
- font-weight
:텍스트의 굵기를 지정- 숫자 표기법
: 숫자 100단위로 텍스트 굵기 표현
100~900 까지의 값 사용 - 키워드 표기법
: lighter, normal, bold, bolder
- 숫자 표기법
- font-style 속성
: 글꼴의 스타일 지정- normal : 기본 형태 표시
- italic : 이탤릭체료 표시
- oblique: 기울임꼴로 표시
- font-variant 속성
: 영문 텍스트를 크기가 작은 대문자로 변경할 때 사용- normal: 텍스트 변환 x
- small-caps: 텍스트를 크기가 작은 대문자로 변환
<style>
.variant{
font-variant: small-caps;
}
</style>
</head>
<body>
<p>Lorem ipsum dolor sit.</p>
<p class="variant">lorem ipsum dolor sit.</p>
</body>
- text-align 속성
: 텍스트 정렬 시 사용- left: 텍스트 왼쪽 정렬
- center: 텍스트 중앙 정렬
- right: 텍스트 오른쪽 정렬
- justify: 텍스트 양쪽 정렬
<style>
p{
text-align:right;
}
</style>
</head>
<body>
<p>울퉁불퉁 멋진 몸매에 빨간옷을입고<br>
새콤달콤 향기풍기는 멋쟁이 토마토 토마토<br>
나 는 야 쥬스될거야<br>
꿀꺽<br>
나 는 야 케첩될거야 찍<br>
나 는야 춤을출꺼야 헤이 뽐내는 토마토 토마토</p>
</body>
- text-decoration 속성
: 텍스트에 선을 그음
- none: 텍스트 장식을 모두 지음
- line-through: 텍스트 중간을 관통하는 선
- overline: 텍스트 위에 선 그음
- underline: 텍스트 아래에 선 그음
<style>
a{
text-decoration:none;
}
</style>
</head>
<body>
<a href="#">링크</a>
</body>
- letter-spacing 속성
: 자간 조절
<style>
p{
letter-spacing:15px;
}
</style>
</head>
<body>
<p>안녕하세요 지금은 12시 25분. 저는 지금 아주 많이 배가 고파요.
오늘 점심엔 쭈꾸미를 먹을거랍니다.</p>
</body>
- line-height 속성
: 텍스트 한 줄의 높이 지정- normal: 웹 브라우저에서 정한 기본값 적용
- 숫자: 현재 font-size 값에 입력한 숫자를 곱한 값 적용
- 퍼센트: 현재 font-size 값에 입력한 비율을 곱한 값을 적용
- 크기: 입력한 크기 적용
<style>
p{
line-height:15px;
}
</style>
</head>
<body>
<p>지금은 12시 29분. <br>
이번엔 한 줄의 높이를 볼거랍니다🧐<br>
모두 집중... 집중해주세요
</p>
</body>
🐰 line-height를 30으로 하면
3. 박스 모델을 구성하는 속성 다루기
- margin
- 박스 모델에서 가장 외부에 있는 영역
- 요소의 외부 여백 담당
<style>
.first{
margin-bottom:20px;
}
.second{
margin-top: 30px;
}
</style>
</head>
<body>
<p class="first">lorem1</p>
<p class="second">lorem2</p>
</body>
- border 영역
- 요소의 테두리(경계선)를 담당
<style>
h1{
border:1px solid #f00;
}
h2{
border-bottom: 2px dotted black;
}
</style>
</head>
<body>
<h1>h1</h1>
<h2>h2</h2>
- paddinig 영역
- 요소의 내부 여백 담당
<style>
p{
border:1px solid rgb(22, 212, 54);
padding:30px;
}
</style>
</head>
<body>
<p>캐치티니핑</p>
- content 영역
- width와 height 속성
- box-sizing 속성
- 박스 모델의 성격과 display 속성
- 블록 성격
- hn, p, div 태그를 사용했을 때 요소의 너비가 콘텐츠 유무와 상관없이 항상 가로 한 줄을 다차지
- 여러 번 사용시 무조건 줄바꿈
- 인라인 성격
- a, span, strong 태그를 사용했을 때 요소의 너비를 요소의 너비를 콘텐츠 크기만큼만 차지
- 웹 브라우저의 수평 공간이 남아 있으면 한 줄로 배치
- 인라인 블록 성격
- 인라인 성격처럼 요소의 너비가 콘텐츠의 크기만큼만 차지하지만, 그 외의 성격은 블록 성격
- img 태그를 사용할 때 웹 브라우저의 수평 공간이 남이 있으면 한 줄로 배치
- display 속성
- HTML 태그가 기본으로 가지고 있는 박스 모델의 성격을 display 속성을 사용하여 변경 가능
- 블록 성격
<!-- width & height ==>
<style>
div{
width:100px;
height:100px;
border:1px solid black;
}
</style>
</head>
<body>
<div></div>
</body>
<!-- box-sizing 사용-->
<style>
div{
width:100px;
height: 100px;
padding: 10px;
border: 1px solid black;
margin:10px;
box-sizing: border-box;
}
</style>
</head>
<body>
<div></div>
</body>
<!-- display 사용 -->
<style>
h1, h2{
display:inline;
}
</style>
</head>
<body>
<h1>h1 tag</h1>
<h2>h2 tag</h2>
</body>
4. 배경 속성으로 요소의 배경 설정하기
- backgroud-color 속성
: 요소의 배경에 색상 넣기
<style>
div{
width:100px;
height:100px;
background-color: red;
}
</style>
</head>
<body>
<div></div>
</body>
- background-image 속성
: 속성값은 삽입할 이미지의 경로를 url() 함수로 지정
<style>
div{
width: 160px;
height: 120px;
background-image:url('image/photo1.jpg');
}
</style>
</head>
<body>
<div></div>
</body>
👀 크기가 맞지 않군..width와 height의 px를 조절해가야 함! 이 때, no-repeat를 사용하면 한장만 보이게 할 수 있다
- background-repeat 속성
: 요소의 배경 크기가 삽입하려는 이미지보다 크면,
이미지를 자동으로 반복해서 채우는데 이 때 이미 반복설정을 바꾸는 속성
<style>
div{
width: 3000px;
height: 2000px;
background-image:url('image/photo1.jpg');
}
</style>
</head>
<body>
<div></div>
</body>
- background-position 속성
: 삽입하려는 이미지의 위치 결정
<style>
div{
width:2000px;
height:2000px;
border:1px solid balck;
background-image: url('image/photo1.jpg');
background-repeat: no-repeat;
background-position:100%;
}
</style>
</head>
<body>
<div></div>
</body>
- background-attachment 속성
: 요소에 삽입된 이미지를 스크롤할 때, 이미지의 작동 방식 결정
<style>
body{
height:100px;
}
.parent{
width: 2000px;
height: 2000px;
border: 1px solid black;
overflow:scroll;
}
.children{
height:2000px;
background-image:url('image/photo1.jpg');
background-attachment:scroll;
}
</style>
</head>
<body>
<div class="parent">
<div class="children"></div>
</div>
</body>
- background 속성으로 한 번에 지정하기
<style>
div{
width:160px;
height:120px
/*
background-color:red;
background-image:url('iamge/photo1.jpg');
background-position:center;
background-size:100% 100%;
background-attachment:fixed;
*/
background:red url('image/photo1.jpg') no-repeat center/100% 100% fixed;
}
</style>
</head>
<body>
<div></div>
</body>
5. 위치 속성으로 HTML 요소 배치하기
- relative
: 요소를 좌표 속성에 따라 배치 가능
<style>
.box{
width:100px;
height:100px;
}
.red-box{
background-color: red;
}
.green-box{
background-color: green;
position:relative;
left:100px;
}
.blue-box{
background-color: blue;;
}
</style>
</head>
<body>
<div class="box red-box"></div>
<div class="box green-box"></div>
<div class="box blue-box"></div>
</body>
<style>
.box{
width:100px;
height:100px;
}
.red-box{
background-color: red;
}
.green-box{
background-color: green;
position:relative;
left:100px;
top:100px;
}
.blue-box{
background-color: blue;;
}
</style>
</head>
<body>
<div class="box red-box"></div>
<div class="box green-box"></div>
<div class="box blue-box"></div>
</body>
- absolute
: relative일 때는 기준이 요소의 왼쪽 위 모서리였지만,
absolute일 때는 웹 브라우저의 왼쪽 위 모서리
<style>
body{
margin: 0;
}
.box{
width:100px;
height:100px;
}
.red-box{
background-color: red;
}
.green-box{
background-color: green;
position:absolute;
left:100px;
/*top:100px;*/
}
.blue-box{
background-color: blue;;
}
</style>
</head>
<body>
<div class="box red-box"></div>
<div class="box green-box"></div>
<div class="box blue-box"></div>
</body>
- fixed
: position 속성값을 fixed로 지정하면, 해당 요소는 지정된 위치에 고정
<style>
body{
margin: 0;
height: 4000px;
}
.box{
width:100px;
height:100px;
}
.red-box{
background-color: red;
}
.green-box{
background-color: green;
position:fixed;
left:100px;
top:100px;
}
.blue-box{
background-color: blue;
}
</style>
</head>
<body>
<div class="box red-box"></div>
<div class="box green-box"></div>
<div class="box blue-box"></div>
</body>
- sticky
: 스크롤 중에 일정 지점(임계점)이 되면 요소가 fixed 값처럼 작동
<style>
body{
margin: 0;
height: 4000px;
}
.box{
width:100px;
height:100px;
}
.red-box{
background-color: red;
}
.green-box{
background-color: green;
position:sticky;
top:0px;
}
.blue-box{
background-color: blue;;
}
</style>
</head>
<body>
<div class="box red-box"></div>
<div class="box green-box"></div>
<div class="box blue-box"></div>
</body>
- z-index 속성
: position 속성으로 배치한 요소의 z축 위치 결정
<style>
.box{
width:100px;
height:100px;
}
.red-box{
background-color: red;
position: relative;
/* z-index:10; */
}
.green-box{
background-color: green;
position:absolute;
left:0px;
top:0px;
}
</style>
</head>
<body>
<div class="box red-box"></div>
<div class="box green-box"></div>
</body>
👀 z-index를 실행하면,
- 이미지 요소와 텍스트 요소 배치하기
<style>
img{
float:left;
margin-right:1rem;
}
</style>
</head>
<body>
<img src="images/inside_out.jpeg" alt="슬픔이">
<p>라일리가 태어났을 때 기쁨이와 같이 태어났다. 그때 기쁨이가 생기고 33초만에 슬픔이가 생겼다.
</p>
</body>
- 블록 성격 요소를 인라인 성격 요소처럼 배치하기
<style>
div{
color:white;
}
.red-box{
background-color: red;
}
.blue-box{
background-color: blue;
}
</style>
</head>
<body>
<div class="red-box">red-box</div>
<div class="blue-box">blue-box</div>
</body>
👀빨간색 요소의 float 속성값을 left로 지정
- clear 속성
: float 속성을 해제할 때 사용하는 속성- left: float 속성의 left 값 해제
- right: float 속성의 right 값 해제
- both: float 속성의 left와 right 값 모두 해제
<style>
.box{
width:100px;
height: 100px;
}
.red-box{
background-color: red;
float: left;
}
.green-box{
background-color: green;
float: left;
}
.blue-box{
background-color: blue;
clear:left;
}
</style>
</head>
<body>
<div class="box red-box"></div>
<div class="box green-box"></div>
<div class="box blue-box"></div>
</body>