Conversation
|
나윤님! 멋진 계산기 과제 제출해주셔서 감사합니다~ |
| * { | ||
| margin:0; | ||
| padding: 0; | ||
| box-sizing: border-box; |
There was a problem hiding this comment.
css의 박스 모델을 잘 이해하고 설정해주셨군요!
width와 height 계산이 border size를 기준으로 되도록 sizing을 border-box로 설정해두면 더 직관적으로 구현할 수 있어 장점이 있죠
| background-color: white; | ||
| display: flex; | ||
| justify-content:center; | ||
| align-content:center; |
There was a problem hiding this comment.
Flexbox 레이아웃을 잘 이해하고 설정해야하는 부분이었습니다
아이템들이 배치되는 기본 방향이 가로인 걸 고려해서 주축을 가로 정렬로, 교차축을 세로 정렬로 잘 이해하신 것 같습니다
멋집니다! 😊
| box-shadow:3px 3px 6px rgba(0, 0, 0, 0.15); | ||
|
|
||
| transition: all 0.1s ease; | ||
| outline:none; |
There was a problem hiding this comment.
브라우저 기본 스타일을 없애기 위해 border: none;과 outline: none;을 잘 적용해 주셨습니다 💯
한 가지 알아두면 좋은 점은, outline은 키보드 사용자에게 현재 위치를 알려주는 중요한 접근성 기능이라는 거예요. 이번 과제에서는 디자인을 위해 없앴지만, 실무에서 outline: none;을 할 때는 시각적으로 포커스 상태를 알 수 있게 배경색이나 그림자로 대체 효과를 넣어주어야 한답니다.
| display: flex; | ||
| justify-content:center; | ||
| align-content:center; | ||
| height: 60vh; |
There was a problem hiding this comment.
vh가 60으로 설정되어 있네요!
vh는 현재 웹 브라우저 창에서 보이는 화면의 높이를 기준으로 크기를 정하는 단위입니다. 60vh는 화면에서 보이는 화면 높이의 60%만 보이게 하는 것이죠
따라서 원래 과제 기본 설정인 100vh로 수정하시면 좋을 것 같습니다 👍
| .calculator form { | ||
| display: grid; | ||
| grid-template-columns:repeat(4,1fr); | ||
| height: 55px; |
There was a problem hiding this comment.
repeat을 사용해서 1fr이 4번 반복 작성되는 것을 훨씬 가독성 좋게 작성하셨네요! 👍
버튼 높이 설정은 height가 아닌 grid-auto-rows로 하신다면 주석대로 55px로 설정할 수 있습니다.
height은 전체 높이를 설정해줍니다. 따라서 행의 개수가 늘어남에 따라 높이도 증가해야 합니다.
반면 grid-auto-rows는 각 행의 고정된 높이를 설정해줍니다. 따라서 행이 추가되어도 55px로 일정하게 유지되는 확실한 이점이 있죠.
height가 아닌 grid-auto-rows를 활용해 재작성해 보시면 grid 개념 이해에 도움이 될 것 같습니다💥
| background-color: #d5deef; | ||
| box-shadow:3px 3px 6px rgba(0, 0, 0, 0.15); | ||
|
|
||
| transition: all 0.1s ease; |
There was a problem hiding this comment.
transition을 잘 사용해주셨어요! 👍
ease와 ease in out의 차이를 아시면 좋을 것 같아 정리해두겠습니다
이 두 속성은 가속과 감속에서 차이가 납니다! ease는 빠르게 빨라지고 도착지점에 가까워지면 느리게 느려집니다. ease in out도 마찬가지로 중간지점이 가장 빠르지만 ease와 달리 처음 빨라지는 속도와 마지막 느려지는 속도가 같습니다.
| @@ -0,0 +1,173 @@ | |||
| body { | |||
| height: 100vh; | |||
| background-image: url(images/background.jpeg); | |||
There was a problem hiding this comment.
이미지를 잘 넣어주셨습니다 👍 참고로 따옴표가 없이도 기능상 문제는 없지만 공백이나 특수문자가 들어가는 경우를 대비해 경로 작성시 따옴표를 같이 적는 습관을 들이면 좋을 것 같습니다
|
|
||
| display : flex; | ||
| flex-direction: row; | ||
| justify-content: center; |
There was a problem hiding this comment.
flex-wrap: wrap;을 보시고 display: flex;도 잘 추가해 적어주셨네요! 메인 축을 행(row)으로 둬 가로로 설정한 점도 정말 멋집니다 👍
게다가 justify-content를 center로 설정해 박스 내부의 요소도 가운데로 정렬하셨군요! CSS 속성을 잘 이해하고 레이아웃을 작성하셨네요 😃
여기에 더해 margin에 좌우 여백을 auto로 설정해 박스 자체를 가운데로 정렬시키면 더 좋을 것 같습니다!
|
|
||
| /* transform 속성을 적용해 주세요 */ | ||
| display: flex; | ||
| transform: skew(-10deg); /*기울이기*/ |
There was a problem hiding this comment.
transform 속성을 활용해 잘 기울여주셨네요 👍
앞서 .pokems에서도 사용하신 대로 정렬이 필요한 각 요소의 직계 부모마다 명시적으로 display: flex;를 달아줘야합니다. 다만 현재 .pokemon의 자식 요소에는 FlexBox인 필요가 없는 것 같습니다! 따로 이유가 없다면 지워주세요 😄
그리고 과제 제출 시 주석은 지워주세요!
| /* 그 밖에 필요한 속성 추가 */ | ||
| border-radius: 10px; | ||
| margin: 5px; | ||
| background-color: rgb(93, 90, 90); |
There was a problem hiding this comment.
배경 색상이 더 어두우면 좋을 것 같습니다 ⚫ rgb(57, 54, 54)를 추천드립니다
| transform: scale(1.1) skew(-10deg); /*크기 키우기*/ | ||
| background-position: center; | ||
| background-repeat: no-repeat; | ||
| background-size: 90px; |
There was a problem hiding this comment.
transform의 scale로 크기를 키우고 skew로 기울기를 잘 유지해 주셨네요! 수고하셨습니다 👏
확인해 보니 현재 hover 효과가 적용된 선택자는 .pokemon입니다. 따라서 background-position, background-size 같이 이미지에 해당하는 코드는 자식 요소인 .image에 적어주셔야 적용이 됩니다! 💡
참고로 마우스 오버 시 background-size를 바꾸는 건 브라우저가 화면을 매번 다시 그리는 방식이라 애니메이션 성능에 좋지 않습니다. 다행히 지금 코드는 이미 transform: scale(1.1)이 훌륭하게 적용되어 있기 때문에, 카드가 커지면 그 안의 .image도 알아서 예쁘게 같이 커집니다.
따라서 자잘한 배경 속성들은 전부 지우는 것이 깔끔합니다. 이대로 한번 수정해서 확인해 볼까요? 😊
| width: 80px; | ||
| height: 84px; | ||
| background-position: center; | ||
| background-size: 90px; |
There was a problem hiding this comment.
원래 과제에 제시되어 있던 필수 코드들이 누락되어 있네요! width: 80px; height: 84px;로 임의로 수정하신 특별한 이유가 없다면, 해당 크기 지정 부분은 지우고 원래 코드였던 아래 속성들로 다시 복구해 주시면 좋을 것 같아요! 😊 width: 140%; height: 100%; background-repeat: no-repeat;
참고로 width를 140%로 설정하는 이유를 설명드리겠습니다! 앞서 부모 카드를 skew(-10deg)로 기울였습니다. 이 때 카드가 평행사변형으로 기울어지면 좌우 모서리 쪽에 빈 공간이 생기기 쉽습니다. 따라서 안쪽의 이미지를 카드보다 살짝 더 넉넉하게 깔아 기울임 효과가 들어가거나 나중에 역보정을 하더라도 이미지가 잘리거나 빈틈이 보이지 않고 꽉 차 보이게 됩니다.
| background-size: 90px; | ||
| } | ||
|
|
||
| .container .pokemons .pokemon:nth-child(1) .image { |
There was a problem hiding this comment.
가상 클래스 nth-child를 잘 이해하고 작성해 주셨군요! 😄
선택자를 길게 작성해주셨는데 .pokemon:nth-child(1) .image만 적어도 정상적으로 작동합니다. 용이한 유지보수를 위해 특별한 이유없인 css 선택자를 길게 작성하지 않는 것을 권장하니 참고해주세요!
| } | ||
|
|
||
| .container .logo img { | ||
| width: 100%; |
There was a problem hiding this comment.
정말 수고하셨습니다! 마지막까지 잘 작성해주셨어요 🥇
반드시 수정해야할 부분은 아니지만 추가되면 좋을 것 같은 부분 마지막으로 알려드리겠습니다 😊
img 태그에 display: block;을 적용하는 것입니다.
img 태그는 기본적으로 inline 요소이기 때문에 텍스트의 베이스라인을 기준으로 정렬됩니다. 이로 인해 이미지 하단에 텍스트의 꼬리 부분을 위한 미세한 빈 공간이 생기는데, block으로 변경하면 이 여백이 깔끔하게 사라진답니다!
따라서 해당 방식이 실무에서 권장됩니다 ✏️
|
정말 정말 수고많으셨습니다! 코드 리뷰하는 내내 고심하신 게 느껴졌어요 🥹 앞으로의 성장이 정말 기대가 됩니다 마지막으로 노가다였던 32줄에 대해 3주차 BS가 끝나 발전된 팁을 하나 드리자면요! // 1. 문서 내의 모든 '.pokemon .image' 요소를 찾아 배열로 가져오기
const images = document.querySelectorAll('.pokemon .image');
// 2. for 반복문으로 반복
for (let i = 0; i < images.length; i++) {
// 이미지 파일명은 1부터 시작하는 것을 고려
const pokemonNumber = i + 1;
// 3. 백틱을 활용한 템플릿 리터럴로 문자열 안에 변수 넣기
images[i].style.backgroundImage = `url('images/pokemon${pokemonNumber}.png')`;
} |
✨ 과제 내용
📸 스크린샷(필수)
2.포켓몬 페이지
📚 새로 알게된 내용 혹은 궁금한 점
새로 알게된 내용
프로퍼티 값의 변화가 일정 시간에 걸쳐 일어나도록 하는 것
부드럽게 전환되는 효과
관련 프로퍼티
부모요소인 플렉스 컨테이너와 자식요소인 플렉스 아이템이 있다.
Flex의 속성들
Flex 컨테이너에 적용하는 속성들
Flex 아이템에 적용하는 속성들
궁금한 점
포켓몬 페이지에서 css에 이미지를 집어넣을 때 32개를 나열했는데 이를 반복문을 사용해서 할 수 있는지 궁금합니다! 제가 찾아봤을 땐 css에 반복문과 관련된 문법이 없는 것 같던데 이렇게 무언가 반복해야할 때 사용할 수 있는 문법이 있을까요? 또한, 여기서는 css에서 이미지를 넣었는데, html에서도 이미지를 넣을 수 있는지 궁금합니다.