인프런 커뮤니티 질문&답변

홍승진님의 프로필 이미지
홍승진

작성한 질문수

HTML+CSS+JS 포트폴리오 실전 퍼블리싱(시즌1)

가상클래스 before after 가상클래스 활용한 실전 퍼블리싱 03(SNS 아이콘 애니메이션)

before, after의 차이

작성

·

307

1

안녕하세요 강의 따라하다가 궁금한 부분이 생겨 질문남깁니다. 강의에서 backgrond 효과 적용하신 것을 저는 before 말고 after 클래스로 해보았는데요. after에는position:relative를 주어도 <i>태그의 아이콘이 앞으로 나와 보이지 않네요. before로 바꾸니까 강의에 나온대로 잘 적용은 됩니다.

before, after 가상 클래스의 기본 z-index 값이 다른건가요?

그리고 다른 수강생분이 i.fa에 position:relative 속성을 주는 이유에 대한 답으로 relative가 absolute보다 우선하기 때문이라고 답변 주신 것을 봤는데요. 해당 내용에 대해서 좀 더 자세한 설명을 알 순 없을까요? 구글링을 해봐도 찾기가 어려워서요.

내용이 조금 지엽적일지 모르겠으나 나중에 해당 속성들을 활용할 때 작동 원리를 확실하게 알고 싶어서 질문 드립니다!

답변 1

0

:before :after를 포지션과 함게 사용하는 경우는 무엇을 사용하셔도 상관없습니다.

:before는 되고 :after는 안되는 일은 없습니다.

:before :after에 대한 자세한 이해는 코딩웍스 유튜브 채널에 영상이 있으니 참고해보세요.

https://www.youtube.com/watch?v=ekkN60XBs7k

그리고 absolute 보다 relative가 우선한다는건 z-index가 같다는 기준입니다.

z-index를 따로 넣어주지 않으면 z-index 기본값은 0 입니다. 

홍승진님의 프로필 이미지
홍승진
질문자

before와 after 차이가 없다고 하셨는데 .. 왜 다르게 나올까요..

아래 첨부한 코드는 해당 강의대로 before 태그를 사용하여 작성했고 잘 구현됩니다.

before로 작성된 부분 after로 변경해보시면 이펙트 결과가 다르게 나옵니다.

애초에 저도 선생님 말씀처럼 차이가 없는 줄 알고 after로 작성했다가

아이콘이 보이지 않아 before로 바꾸니까 잘 나오던걸요.

설마 제 컴퓨터에서만 그렇게 나올리는 없겠죠.

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
@import url('http://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css');
body{
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
}
a{
text-decoration: none;
color: inherit;
}
.sns{
background: #ccc;
padding: 40px;
border-radius: 10px;
}
.sns a{
position: relative;
display: inline-block;
margin: 0 10px;
width: 80px;
height: 80px;
background: #fff;
border: 5px solid #fff;
border-radius: 50%;
font-size: 40px;
line-height: 80px;
text-align: center;
overflow: hidden;
}
.sns a::before{
content: '';
position: absolute;
/* before를 after로 바꿨을 때 차이가 나는 이유? */
bottom: 0;
left: 0;
width: 100%;
height: 0;
transition: .4s;
background-color: coral;
}
.sns a:hover::before{
/* before를 after로 바꿨을 때 차이가 나는 이유? */
height: 100%;
}
.sns a .fa{
position: relative;
/* position relative가 absolute보다 우선으로 보인다? */
transition: .4s;
}
.sns a:hover .fa{
transform: rotateX(360deg);
color: #fff;
}
</style>
</head>
<body>
<div class="sns">
<a href=""><i class="fa fa-facebook"></i></a>
<a href=""><i class="fa fa-twitter"></i></a>
<a href=""><i class="fa fa-instagram"></i></a>
</div>
</body>
</html>

 

저는 지금까지 포지션을 사용하는 경우 before after의 차이를 다르게 경험한 적이 없었는데 코드를 넣고 브라우저에서 보니까 차이가 있네요. after에서 .fa 아이콘이 뒤로 숨네요. 물론 해결방법은 아래처럼 .fa에 z-index를 높여주면 됩니다.

하지만 지금처럼 포지션을 사용한 경우인데 after의 경우 .fa 뒤로 숨는걸 이론적으로 딱 떠오르지는 않네요. 당장은 아니지만 뭔가 이유가 생각나면 알려드릴게요.

홍승진님의 프로필 이미지
홍승진

작성한 질문수

질문하기