c to HDMI 케이블에 4만원을 쓴 사람이 있다?
일정 너비 이상으로 넘어가게 되면 더보기로 말줄임 ...
가 나오고 옆에 있는 더보기를 클릭하면 내용 전체를 보여주는 기능을 구현해보았다.
곰곰히 생각을 해봤다. 필요한 준비물(css)이 뭐가 있는지...........
먼저 이 기능을 위해 따로 사용한 css는 아래와 같다.
이게 뭔데? 라고 할수도 있기 때문에 간략히 적어보자면 상단의 구현 사항에 쓰여진 ...
<- 이 말줄임 표를 사용하려고 썼다. 내가 설정한 너비 이상으로 텍스트가 넘어가게 되면 말줌임표로 자동으로 바뀌고 함께 사용해야 하는게 overflow
와 white-space
이다.
먼저 overflow는 말그대로 넘치면 어떤걸 할까? 라고 이해하면 쉽다.
그리고 white-space : nowrap
은 요소가 갖고 있는 텍스트를 무조건 한줄로 정렬을 해준다.
앞서 말한 3가지의 특징을 합쳐보면
이런 방식으로 생각하면 된다. 생각보다 쓰이는 곳이 많아서 이 3가지는 1세트로 봐도 무방할 정도이다.
일단 사용하는 방식은 알았으니 언제봐도 민망한 내 코드를 들여다보자.
<div class="feed-information">
<span class="feed-id">!backend_dev</span>
<span class="feed-content">
안에 어떤 내용을 넣지 안에 어떤 내용을 넣지 안에 어떤 내용을
넣지 안에 어떤 내용을 넣지 안에 어떤 내용을 넣지 안에 어떤
내용을 넣지 안에 어떤 내용을 넣지 안에 어떤 내용을 넣지 안에
어떤 내용을 넣지 안에 어떤 내용을 넣지 안에 어떤 내용을 넣지
안에 어떤 내용을 넣지 안에 어떤 내용을 넣지 안에 어떤 내용을
넣지 안에 어떤 내용을 넣지 안에 어떤 내용을 넣지
</span>
<a href="#" class="btn-more">더보기</a>
</div>
헷갈릴수도 있으니 클래스가 뜻하는걸 적어놓고 가겠다.
먼저 생각한건 feed-content
에 일정한 너비값을 주고 그 값을 넘어가면 말줄임표로 처리해야겠다 라고 생각하고 먼저 display : inline-block
을 줬다.
inline-block을 준 이유는 더보기 버튼 때문이다.
block을 사용하게되면 특정 너비값에서 더보기 버튼은 block이 갖고 있는 성질
때문에 밑에 떨어지게 된다. 그래서 inline-block을 사용했고, 너비값은 줬지만 굳이 높이값은 주지 않는다.
높이값을 주게 되면 더보기 버튼을 눌렀을 때 그 높이값에 auto
를 또 작성을 해줘야하는 번거로움이 생기기 때문에 굳이 주지 않았다.
이제 내가 원하는 특정 너비값을 넘어가면 말줄임표가 나온다. 하지만 또 준비해줘야 할게 있다. 더보기를 클릭했을때 클래스를 추가해주는 방식으로 작업을 할 것이기 때문에 more
이라는 클래스가 붙었을 때 나올 스타일도 지정을 해줘야한다.
.feed-information .feed-content {
display: inline-block;
width: 150px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
vertical-align: top;
}
.feed-information .feed-content.more {
display: inline;
white-space: normal;
}
어렵게 말고 간단히 생각해보자.
제한적인 너비값을 줬다 ? ===> 풀어준다.
글이 개행되지 않고 쭉 써진다 ? ===> 풀어준다.
그래서 more 클래스 코드를 보면 display
를 inline
으로 바꿔주고 white-space
를 normal
로 바꿔준다.
그럼 갖고 있는 텍스트의 길이만큼 펼쳐지게 된다.
const btnMore = document.getElementsByClassName("btn-more")[0];
btnMore.addEventListener("click", feedContentMore);
function feedContentMore() {
feedMore.classList.add("more");
}
더보기를 누르면 add()
로 more
을 추가해주는 기능이다.
assignment에서 따로 해야하는 건 아니었지만 왠지 이 기능은 해보고 싶었고, 나중에도 유용하게 사용 할 수 있을 것 같아서 도전해봤는데 내가 원하는대로 나와서 기분도 좋았지만 아직 해야할게 많다.
화이팅🔥