2주 배웠는데 중급 중반까지 배웠다고 한다... 이제 고급을 배운다고 한다... 난 아직 왕초보인데........!!!!!!!
가상요소 설명 추가 :-) 가상요소는 해당 태그 안에꺼다. <h2>title</h2> ::before일 때 , <h2> ::before title </h2>라고 생각하면 된다. 가상요소들은 전부 다 인라인 속성이라 display: block; 써줘야되고, content:" " 컨텐트 속성이 반드시 써있어야한다! 아이콘 폰트를 쓸 때 컨텐트 속성에 유니코드를 넣으면 종모양, 로그인 아이콘 등등이 나온다. 예시 사이트 : fontawesome.com 에서 태그를 갖다 붙인다. 그 이전에 코드들을 내 html에 연결해놔야 쓸 수 있다. 코딩할 때 아이콘은 피그마에서 svg로 다운받아서 쓰는게 안전하다.
#코딩숙제 Beyond Space 레이아웃 만들기
<! DOCTYPE html >
< html lang = "en" >
< head >
< meta charset = "UTF-8" />
< meta name = "viewport" content = "width=device-width, initial-scale=1.0" />
< title > 레이아웃 실습 </ title >
<!-- css -->
<link rel="stylesheet" href="./css/layout.css" />
</ head >
< body >
< div class = "container" >
< div class = "left_text" >
< h4 > Overview </ h4 >
< h2 > Beyond Space </ h2 >
< p >
1985년 창사 이래 쌓아온 탄탄한 기술력과 고객만족을 통한 신뢰는
인테리어의 미래를 < br />
열어갈 대혜건축의 또 다른 도전이자 가능성입니다. 최적의 설계와
완벽한시공으로 < br />
실내건축의 미래가치를 실현하기 위해 끊임없이 혁신하는 대혜건축이 될
것입니다.
</ p >
<!-- more view버튼 -->
< div >
< a href = "#" > view more </ a >
</ div >
</ div >
<!-- 오른쪽 이미지 -->
< div class = "right_img" >
< div >
< img src = "./img/sec1_img1.jpg" alt = "벽" />
</ div >
< div >
< img src = "./img/sec1_img2.jpg" alt = "나무" />
</ div >
</ div >
</ div >
</ body >
</ html >
css↓
@charset "utf-8" ;
* {
margin : 0 ;
padding : 0 ;
}
a {
text-decoration : none ;
color : #111 ;
}
ul ,
li {
list-style : none ;
}
img {
border : none ;
display : block ;
}
body {
font-family: 'Noto Sans KR', 'Cormorant Garamond';
font-size: 17px;
line-height: 1.7em;
color: #111;
}
p {
color : #666 ;
}
/* 레이아웃 */
.container {
width : 1600px ;
overflow : hidden ;
margin : 100px auto ;
display : flex ;
justify-content : space-between ;
}
.left_text {
width : 50% ;
}
.left_text > h4 {
font-family : 'Cormorant Garamond' , serif ;
font-size : 30px ;
font-weight : 600 ;
}
.left_text > h2 {
font-family : 'Cormorant Garamond' , serif ;
font-size : 100px ;
/* 상하여백 30, 양옆여백 0, 아래여백만 다시 50px */
margin : 30px 0 50px ;
line-height : 1.4 ;
font-weight : 400 ;
}
.left_text > p {
margin-bottom : 50px ;
}
.left_text > div {
/* 넓이 높이는 자식요소에 맞춰 설정 */
width: fit-content;
height: fit-content;
}
.left_text a {
font-family : 'Cormorant Garamond' , serif ;
font-size : 18px ;
font-weight : 600 ;
display : flex ;
gap : 20px ;
align-items : center ;
}
.left_text a::after {
content: "→";
display: block;
width : 46px ;
height : 46px ;
background-color : #111 ;
color : #fff ;
line-height : 46px ;
text-align : center ;
border-radius : 100% ;
font-weight : 400 ;
}
/* 오른쪽 이미지 */
.right_img {
width : 50% ;
display : flex ;
justify-content : flex-end ;
gap : 10px ;
}
is 선택자
같은 스타일을 여러 태그에 한번에 적용하고 싶을 때 사용한다. 복잡한 선택자를 조금 더 간단하게 바꿔준다.
[기본형] 그냥 바로 :is써준다.
:is(선택자1, 선택자2, 선택자3...){속성 : 값;}
< title > is선택자 </ title >
< style >
/* is선택자를 안 쓰고 각각 태그마다 hover효과를 줌. */
h1:hover ,
h2:hover ,
h3:hover {
color : blue;
}
/* is선택자를 사용하여 공통스타일 한꺼번에 적용하기. 한꺼번에 hover효과같은 걸 줄 때 굉장히 편리하다. */
:is ( h1 , h2 , h3 ) {
font-size : 24px ;
color : seagreen;
}
***제목1,2,3한테 동일한 hover 스타일을 적용하고 싶을 때
:is ( h1 , h2 , h3 ) :hover {
color : palevioletred;
}
</ style >
</ head >
< body >
< h1 > 제목1 </ h1 >
< h2 > 제목2 </ h2 >
< h3 > 제목3 </ h3 >
has 선택자
부모태그가 특정 자식태그를 가지고 있는지 체크하는 선택자
[기본형]
선택자:has(B)
B라는 자식태그를 가지고 있는지 판단할 때 사용하는 선택자이다.
<! DOCTYPE html >
< html lang = "en" >
< head >
< meta charset = "UTF-8" />
< meta name = "viewport" content = "width=device-width, initial-scale=1.0" />
< title > has선택자 </ title >
< style >
* {
margin : 0 ;
padding : 0 ;
}
:is ( ul , li ) {
list-style : none;
}
ul {
width : 500px ;
height : 50px ;
background-color : rgb( 40 , 87 , 65 );
margin : 50px auto;
display : flex;
align-items : center;
justify-content : space-evenly;
}
li {
color : white;
text-transform : uppercase;
}
/* li에 마우스를 올리면 해당 태그에 글자색을 바꾼다. */
li:hover {
color : pink;
}
/* ul에 li:hover선택자가 있다면 :hover선택자가 적용되지 않은 li를 불러오기 */
ul:has(li:hover) li:not(:hover) { 메뉴 클릭했을 때 다른 메뉴들을 흐리게 만드는 효과를 줄 수 있다.
color : #777;
}
</ style >
</ head >
< body >
< ul >
< li > home </ li >
< li > about </ li >
< li > product </ li >
< li > notice </ li >
< li > contact </ li >
</ ul >
</ body >
</ html >
ul:has(li:hover) li:not(:hover) {}결과
배경속성
웹 문서를 꾸미기 위해 특정 영역이나 글자 등 여러 요소에 배경을 넣을 수 있다.
배경에는 단순한 이미지나 색상을 넣을 수 있고, gradient와 같은 배경 색상으로 효과를 만들 수 있다.
[속성]
1. background-image : url(이미지경로); 배경 이미지를 불러와서 해당 영역에 채운다.
여러 개 이미지를 한꺼번에 가져올 수 있다. 동일한 속성의 배경이미지를 여러 개 불러올 때 ,(콤마)로 구분한다.
먼저 불러온게 맨 앞에 나온다.
2. background-repeat : no-repeat / repeat-x / repeat-y; 배경의 반복여부. 배경속성은 기본적으로 불러온 이미지를 바둑판 배열로 꽉 채운다.
★no-repeat 배경 이미지를 반복하지 않고 1번만 출력한다.
repeat-x 배경이미지를 가로로 반복한다.
repeat-y 배경 이미지를 세로로 반복한다.
3. background-attachment : fixed / scroll; 배경 고정 여부.
fixed : 스크롤이 움직이더라도 배경 이미지는 해당 위치에 고정된다.
scroll : 기본값으로 스크롤이 아래로 내려가면 이미지는 위로 올라간다. 즉, 스크롤 따라 이동한다.
4. background-position : px / left, right, center, top, bottom / % 배경 위치
5. background-size : px / % / cover / contain ... 배경의 크기
cover : 영역의 가로에 맞춰 이미지를 정비율로 채운다.
contain : 영역의 세로에 맞춰 이미지를 정비율로 채운다.
6. background-origin : content-box / border-box / padding-box; 배경이 차지하는 영역을 지정
content-box : padding, border영역을 제외한 순수한 컨텐츠 영역만큼만 채운다.
padding-box : 기본값으로 padding영역까지 배경을 채운다.
border-box : border영역까지 배경을 채운다.
+백그라운드컬러까지~
< title > 배경속성 </ title >
< style >
body {
background-image : url ( ./img/bg.jpg ); /* 배경이미지 불러오기 , 작은 사진을 받아오면 바둑판 배열로 채워진다. */
background-image : url ( ./img/dog.svg ), url ( ./img/bg.jpg ); /* 여러 개의 배경을 한 번에 불러온다. */
background-repeat : no-repeat ;
}
div {
width : 200px ;
height : 200px ;
background-color : seashell ;
border : 5px solid #000 ;
}
</ style >
< head >
< meta charset = "UTF-8" />
< meta name = "viewport" content = "width=device-width, initial-scale=1.0" />
< title > 배경속성 </ title >
< style >
body {
/* 스크롤을 만들기 위한 물리적인 높이 */
height : 5000px ;
}
div:first-child {
width : 50% ;
height : 300px ;
border : 5px solid darkblue ;
/* 배경속성 한 번에 적용 */
background : url ( ./img/bg.jpg ) no-repeat ;
/* width에 맞춰 정비율로 100%를 채움 */
background-size : 100% ;
/*
넓이에 맞춰 여백이 남지 않도록 정비율로 채움.
만약 공간이 부족하면 이미지를 일부 잘라서라도
정비율로 채운다.
*/
background-size : cover ;
/*
높이에 맞춰 영역에 배경이미지를 채운다.
이때 정비율을 항상 유지하며, 박스의 크기에 따라
빈공간이 생긴다.
*/
background-size : contain ;
}
div:nth-child ( 2 ) {
width : 500px ;
height : 300px ;
margin-top : 40px ;
border : 5px solid sandybrown ;
background : url ( ./img/bg.jpg ) no-repeat ;
background-size : 200px ;
/* 배경위치 */
background-position : 50px 10px ; /* 가로위치 세로위치 */
background-position : left ; /* 왼쪽 중앙(세로 기본값은 middle) */
background-position : center ; /* 가로세로 중앙으로 감 */
background-position : right top ;
}
div:nth-child ( 3 ) {
width : 500px ;
height : 500px ;
margin-top : 40px ;
border : 5px solid #f46074 ;
background : url ( ./img/bg.jpg ) no-repeat ;
background-size : cover ;
/* 스크롤에 따른 고정여부 */
background-attachment : scroll ; /*기본값. 고정안함*/
background-attachment : fixed ; /*배경만 고정함*/
}
h2 {
text-align : center ;
text-transform : uppercase ;
color : #fff ;
margin-top : 200px ;
}
p {
text-align : center ;
color : #fff ;
}
div:last-of-type {
margin-top : 50px ;
width : 300px ;
height : 300px ;
padding : 40px ;
border : 30px solid hsla ( 197 , 71% , 73% , 0.451 );
background : url ( ./img/bg.jpg ) no-repeat ;
background-size : cover ;
/* 배경 영역 지정 여부 */
background-origin : padding-box ; /*기본값. 패딩영역까지 배경을 채움*/
background-origin : content-box ; /* width,height만큼만 채움*/
background-origin : border-box ; /* border영역까지 채움*/
}
</ style >
</ head >
< body >
< div ></ div >
< div ></ div >
< div >
< h2 > awsome title </ h2 >
< p > Lorem, ipsum dolor sit amet consectetur adipisicing elit. </ p >
</ div >
< div ></ div >
</ body >
</ html >
다양한 색상 단위
===========================
CSS에서는 색상을 표현할 때 다양한 단위로 표현할 수 있다.
1. hex👍 : 앞에 #을 붙인 16진수로 색상을 표현한다. 색상을 다루는 모든 분야 전반에서 사용한다.
2. 색상명 : red, blue, orange 등 색상명을 단어로 표현하는 단위.
3. rgb(red, green, blue)
: rgb색상단위. 각 색상 자리에 0~255까지의 숫자를 입력하여 빛으로 색을
표현한다. 디바이스와 관련된 기기를 이용할때 가장 많이 쓰임.
4. rgba(red, green, blue, alpha)👍
: rgba단위. 투명도(alpha)가 포함된 색상단위. alpha값은 0 ~ 1 사이의 값을 쓸 수 있다.
0이 완전 투명하고 1이 완전 불투명한 상태를 말하며, 0.5라고 쓰면 50% 투명한 상태를 말한다.
5. hsl(hue, saturation, lightness)
: hue는 색상을, saturation는 채도를, lightness는 밝기를 말한다. 잘 쓰이진 않음.
각 값을 %로 표현한다.
6. hsla(hue, saturation, lightness, alpha)
: hsl색상 단위에 alpha값이 포함된 단위. 잘 쓰이진 않음.
< title > 다양한 색상 단위 </ title >
< style >
* {
margin : 0 ;
padding : 0 ;
}
div {
width : 100% ;
height : 100px ;
margin-bottom : 20px ;
font-size : 24px ;
}
#word {
background-color : red;
}
#hex {
background-color : #ff0000;
}
#rgb {
background-color : rgb( 255 , 0 , 0 );
}
#hsl {
background-color : hsl( 0 , 100% , 50% );
}
#rgba {
background-color : rgb( 255 , 0 , 0 , 0.5 );
}
#hsla {
background-color : hsla( 0 , 100% , 50% , 0.3 );
}
</ style >
</ head >
< body >
< div id = "word" > word </ div >
< div id = "hex" > hex </ div >
< div id = "rgb" > rgb </ div >
< div id = "hsl" > hsl </ div >
< div id = "rgba" > rgba </ div >
< div id = "hsla" > hsla </ div >
</ body >
</ html >
투명도 속성
컨텐츠에 투명도를 적용하고 싶을 때 경우에 따라 alpha값을 사용하거나 opacity속성을 이용할 수 있다.
opacity속성도 alpha값과 마찬가지로 값을 0~1까지만 입력할 수 있다.
[기본형]
선택자{
opacity : 0~1 사이의 값;
opactiy는 '속성명'!! alpha값은 '속성값'!! 구분해서 사용해야 한다.
색상을 나타나는 속성에 쓴다. 실제 컨텐츠에는 영향을 줄 수 없다.
opacity속성은 컨텐츠 자체를 투명하게 만들 때 사용하고
alpha는 배경색이나 테두리색, 글자색 등을 투명하게 만들 때 사용한다.
opacity속성과 alpha값의 차이
전체적으로 투명하게 만드는게 opacity, 실제 컨텐츠는 건들 수 없으나 배경이나 border의 색상을 투명하게 만드는게 alpha.