(혼) (공) (web)
CSS 복습(9일차)
만석이
2024. 2. 22. 22:45
알림벨 만들기
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>CSS 예제</title> </head> <body> <style> .container { /* border: 1px dashed; */ display: inline-block; position: relative; } .icon { width: 2rem; fill: #333; } .badge { width: 0.75rem; height: 0.75rem; background-color: #f00; display: block; /* 계산하기 번거로울 때 큰 값을 적용한다 */ border-radius: 99px; /* position */ position: absolute; top: 0; right: -0.25rem; border: 2px solid #fff; } </style> <div class="container"> <span class="badge"></span> <svg class="icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512" > <path d="M224 0c-17.7 0-32 14.3-32 32V51.2C119 66 64 130.6 64 208v18.8c0 47-17.3 92.4-48.5 127.6l-7.4 8.3c-8.4 9.4-10.4 22.9-5.3 34.4S19.4 416 32 416H416c12.6 0 24-7.4 29.2-18.9s3.1-25-5.3-34.4l-7.4-8.3C401.3 319.2 384 273.9 384 226.8V208c0-77.4-55-142-128-156.8V32c0-17.7-14.3-32-32-32zm45.3 493.3c12-12 18.7-28.3 18.7-45.3H224 160c0 17 6.7 33.3 18.7 45.3s28.3 18.7 45.3 18.7s33.3-6.7 45.3-18.7z"/> </svg> </div> </body> </html> |
![]() 이번에 만들어 볼것은 알림벨이다. 순서를 보자 1.컨테이너안에 아이콘을 넣는다 2. 빨간동그라미를 오른쪽 상단에 넣는다. 코드를 보자 container 클래스를 보면 display를 inline-block 설정해주었다. 여기서 다시한번 기억할겸 정리해보자 =========================================== inline - 줄 바꿈없이 한줄에 다른 엘리먼트와 나란히 배치 block - 다른엘리먼트들을 밀어내고 혼자 한줄사용 inline-block - 줄바꿈이 이루어지지않는다. block 처럼 width와 height를 지정할수있다. 만약 widht 와 height를 지정하지않을 경우 inline과 같이 컨텐츠만큼 영역이 잡힌다. ============================================ 그리고 빨강색 동그라미에 border을 설정해주어 테두리를 흰색으로 덮어주었다. |
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>CSS 예제</title> </head> <body> <style> .container { border: 1px solid #ddd; border-radius: 0.5rem; padding: 0 1rem; position: relative; } .close-btn { position: absolute; right: 0; padding: 0.25rem 0.5rem; /* 엔티티의 크기 조절 */ font-size: 1.5rem; } </style> <div class="container"> <span class="close-btn">×</span> <h3>Message for you!</h3> <p> Lorem ipsum dolor sit amet consectetur, adipisicing elit. </p> </div> </body> </html> |
![]() 사진상으로는 잘 안보이지만 테두리를 둥글게만들었다. 일단 컨테이너 먼저 만들어주었다. position을 relative로 설정해주었다. 자 여기서 positon:reative 와 position:absolute를 정리하겠다. 먼저 absolute는 부모의 위치를 기준으로 움직인다. 그리고 그 부모의 역할을 부여해주는 표식이 reative라고 생각하면된다. 하지만 모든 클래스가 relative가 없는 상태에서 absoulte를 사용하게 되면 부모는 body가 된다. reative만 독립적으로 사용하면 위치를 자유롭게 이동할수있는 상태가 된다. (자신의 위치 기준으로) 자 다시 설명을 이어가면 컨테이너 만들어주고 reative 설정해서 자유로운 위치선언을 해주었다. 그리고 close-btn 클래스를 만들어서 x버튼을 설정해주었다. x버튼은 ×를 사용해서 만들어주었다. |
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>CSS 예제</title> </head> <body> <style> #checkbox { display: none; } .switch { display: inline-block; width: 40px; height: 20px; padding: 4px; background-color: #ddd; border-radius: 99px; /* 애니메이션 효과 - 배경색이 변하는 데 0.5초가 걸린다 */ transition: background-color 0.5s; } /* 엘리먼트 1 + 엘리먼트 2 엘리먼트 1 바로 다음의 엘리먼트 2를 선택한다 */ #checkbox:checked + .switch { background-color: #333; } .head { width: 20px; height: 20px; background-color: #fff; border-radius: 99px; /* 애니메이션 효과 - 20px 움직이는데 0.5초가 걸린다 */ transition: transform 0.5s; } /* 헤드 움직이기 */ #checkbox:checked + .switch .head { transform: translateX(20px); } </style> <input type="checkbox" name="" id="checkbox"> <label for="checkbox" class="switch"> <div class="head"></div> </label> </body> </html> |
토글 버튼을 만들어보았다. 정리. 1. 버튼 밖에 있는 동그라미 ( swith ) 2. 버튼 (head) 3. 애니매이션효과 switch클래스는 display:inline-block 효과를 주었다. 그래서 기본적으로 block 성질을 가지지만 높이나 넓이를 설정해줄수있다. 또한 transiton:background-color 0.5s 를 설정해주어서 배경이 0.5초에 걸쳐서 변하도록 애니메이션 효과를 주었다. 그리고 head를 보면 transition:transform 0.5s가 있다. 이것은 요소를 변형시키는데 0.5초를 걸쳐하겠다 라는 의미다. #checkbox:checked + .switch .head { transform: translateX(20px); } 이것은 checkbox가 사용자에 의해서 클릭되었을때 switch의 자식인 head가 x축으로 20px만큼 움직인다는뜻이다. |
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>CSS 예제</title> </head> <body> <style> .container { /* size */ width: 50px; height: 25px; /* layout */ display: flex; flex-direction: column; justify-content: space-between; } .item { /* size */ width: inherit; height: 5px; /* design */ background-color: #000; /* 애니메이션 효과 */ transition: transform 0.2s; } .container:hover .top { transform: translateY(10px) rotate(45deg); } .container:hover .bottom { transform: translateY(-10px) rotate(-45deg); } </style> <div class="container"> <div class="item top"></div> <div class="item bottom"></div> </div> <style> body { /* 의도적으로 스크롤 생성 calc(연산) 함수 - 계산된 값을 적용할 수 있다 */ height: calc(100vh + 100px); } .navbar { position: fixed; top: 0; left: 0; width: 100%; } .menu { /* 기본값 제거 */ list-style: none; margin: 0; padding: 0; /* layout */ display: flex; background-color: #333; } .link { display: block; padding: 0.75rem; color: #fff; /* 밑줄 제거 */ text-decoration: none; } .link:hover { background-color: #222; } main { margin-top: 4rem; } </style> <nav class="navbar"> <ul class="menu"> <li> <a href="#" class="link">Home</a> </li> <li> <a href="#" class="link">About</a> </li> <li> <a href="#" class="link">Blog</a> </li> <li> <a href="#" class="link">Contact</a> </li> </ul> </nav> <main> <h1>Navigation Bar</h1> <p>..</p> </main> </body> </html> |