반응형
각 컴포넌트 hover 시 짙어지며 원하는 텍스트가 나올 수 있도록 만들어보자.
전체 컴포넌트의 구조는 이렇다!
<ImgWrapper onClick={onClickToggleModal}>
<p className="likes_on">
<FavoriteIcon className="heartIcon" />
{post.likes}
</p>
<div className="post_thumbnail">
<PostImg src={post.thumbnail_url} alt="thumbnail" />
</div>
</ImgWrapper>
이제 CSS를 작성해보자.
먼저 각각의 게시글 컴포넌트의 Position을 relative로 만들어주자.
그 다음, 컴포넌트에 꽉 차게 썸네일 이미지를 띄워주기 위해 이미지 컴포넌트의 width, height를 모두 100%로 설정해준다.
const ImgWrapper = styled.div`
width: 130px;
height: 130px;
position: relative;
.post_thumbnail {
width: 100%;
height: 100%;
}
`;
그 다음 각 게시글의 썸네일 이미지 호버시 해당 글에 대한 '좋아요' 수를 표시하고 싶기 때문에 class를 하나 만들어준다.
썸네일 이미지가 호버 될 시에 'likes_on' class가 보이도록 할 것이기 때문에,
'likes_on' class의 기본 display 값을 none으로 하고, 게시글 컴포넌트 호버 시 이미지가 짙어지며 likes 수가 보일 수 있도록 display를 block으로 바꿔준다.
const ImgWrapper = styled.div`
width: 130px;
height: 130px;
position: relative;
.likes_on {
position: absolute;
top: 45%;
left: 25%;
z-index: 1;
font-size: 15px;
width: 60px;
text-align: center;
color: #ffffff;
font-weight: 700;
display: none;
user-select: none;
}
&:hover .likes_on {
display: block;
}
&:hover .post_thumbnail {
filter: brightness(0.5);
}
img {
width: 100%;
height: 100%;
object-fit: cover;
vertical-align: middle;
}
.post_thumbnail {
width: 100%;
height: 100%;
}
.heartIcon {
width: 16px;
height: 12px;
}
`;
마지막으로 게시글 컴포넌트 호버 시 해당 이미지가 짙어질 수 있도록 filter 프로퍼티의 값을 brightness(0.5)로 설정해주면 끝!
반응형
'코드스테이츠 SEB FE 41기 > Main-Project(MatP)' 카테고리의 다른 글
[react] props를 state로 설정하여 state 변경 실시간 업데이트해주기(feat. Typescript) (0) | 2023.01.22 |
---|---|
[react] useAxios 커스텀 훅 사용기1(feat. typescript) (0) | 2023.01.22 |
[react] star-rating 구현하기(feat. typescript) (0) | 2023.01.16 |
[react] 텍스트 에디터 react-quill 사용기 (feat. typescript) (0) | 2023.01.16 |
[react]Modal Portal(feat. typescript) (0) | 2023.01.16 |