셀렉트박스 커스텀(select box custom) 실습을 해보았다.
코드 리뷰하면서 분석해본다음에
스스로 다시 한번 써볼 예정이다.
완성본은 일단 아래와 같이 생겼다.
See the Pen Untitled by 듀 (@jgvoseid-the-styleful) on CodePen.
h2 {
margin: 30px;
}
.cont-select {
width: 200px;
}
피그마 수치대로, article 전부에
width: 200px 값을 주었다.
버튼 넓이 자체는 반응형으로 늘어나지 않아도 되니까
고정값인 px을 준다.
셀렉트박스 커스텀(select box custom)할 때,
디자이너 분이 피그마 수치를
준다는 가정 하에 진행했다.
.btn-select {
width: 100%;
/* 위에 부여한 200px의 100%부여 */
/* 콘텐츠가 늘어나도, 100%보다 더 안 늘어난다. */
padding: 12px; 14px;
/* 일단 피그마수치대로 적용, 말줄임 옵션 때문에 조정할 예정 */
font-size: 12px;
line-height: 14px;
/* height값은 주지말고 대신 라인하이트 */
/* 반응형 구현할때는 height 되도록 주지 않는다 ★ */
background-color: #fff;
border: 1px solid #C4C4C4;
box-sizing: border-box;
border-radius: 10px;
/* 피그마 수치대로 적용 */
cursor: pointer;
text-align: left;
/* width 100%주는 순간, 자동정렬되어버림 */
* text-align으로 left로 붙도록 재배치 */
background: url("images/icon-Triangle-down.png") center right 14px no-repeat;
* select box 화살표 부분 배치 */
/* 말줄임 */
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
}
.btn-select 클래스 부분의
기본 버튼 디자인을 만들어주었다.
수치는 임의로 정하지 않았고,
figma 링크가 있어서 적혀진 그대로 썼다.
말줄임은 js나 다른 프로그램 쓰지 않고
css로만 구현했다.
※ 아래 글 참고
2021.11.27 - [IT 공부/프론트엔드(Front-end)] - css에서 말줄임('...') text-overflow: ellipsis; 로 처리하기
말줄임표 효과때문에,
화살표 img와 거리가 겹칠 수 있다.
padding: 12px; 14px; 값을
padding: 13px 30px 13px 14px; 값으로 수정해준다.
(포스팅 맨 위의 셀렉트박스 커스텀(select box custom)
html+css 전체코드를 참고해보자.)
.btn-select:hover,
.btn-select:focus {
border: 1px solid #9B51E0;
outline: 3px solid #F8E4FF;
}
hover: 마우스 갖다 댄 순간만 작동
focus: 텍스트를 클릭하고, 마우스를 움직여도
또 다른 click 전까지 효과 유지!
→ 둘 다 설정하면, hover할 때도
클릭했을 때도 발동한다.
outline: border 바깥의 효과
.cont-select {
position: relative;
width: 200px;
*/ 위쪽에 relative 선언 추가해주기 */
}
.list-member {
display: none;
position: absolute;
width: 100%;
top: 49px;
left: 0;
border: 1px solid #C4C4C4;
box-sizing: border-box;
box-shadow: 4px 4px 14px rgba(0, 0, 0, 0.15);
border-radius: 10px;
}
display: none;
(이걸 줘야 list 부분이 안 보이게 되면서
위로 접힌다.)
- 피그마 수치대로, top으로 49px만큼 올리고,
left: 0;으로 딱 붙인다. (display: none;)
- '최애 프로그래밍 부분' (cont-select class)을 기준으로
absolute를 잡아준다.
→ 접히는 이유:
'프로그래밍' 버튼 기준으로 위치가 잡힌다(absolute)
거기에서 top: 49px, left: 0;만큼 위치가 잡히고
display: none;으로 가려주는 것!
.btn-select.on+.list-member {
display: block;
}
block 처리를 해줘야 클릭했을 때
아래로 떨어져 내려온다.
.list-member li {
height: 40px;
padding: 5px 8px;
box-sizing: border-box;
}
list들 사이의 간격을 조정해준다.
.list-member li button {
width: 100%;
padding: 7px 10px;
border: none;
background-color: #fff;
border-radius: 8px;
cursor: pointer;
text-align: left;
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
}
.list-member li button:hover,
.list-member li button:focus {
background-color: #F8E4FF;
}
list 내의 "button" class들 커스텀하기
background에 흰색을 주지 않으면,
이런 식으로 변한다.
개발자도구에서 하나씩 끄고 켜보면서
어떤 역할을 하는지 찾아봤다.
마지막에 white-space: ellipsis부터
overflow:hidden은 말줄임 속성을 위함!
.list-member li button {
position: relative;
width: 184px;
height: 30px;
left: 8px;
top: 5px;
background-color: #fff;
border-radius: 8px;
border: none;
text-align: left;
}
(작성 시 주의해야할 것들 )
위와 같은 코드는 지양하기.
li button에 relatvie를 줘서,
안에서 버튼의 위치를 position으로 이동시켰다. (금지)
※ 포지션은 한번 정해지면 거기서 고정이 된다.
안에 있는 콘텐츠가 바뀌었을 때
유연하게 대처하기 위해서 다음과 같은 방법을 쓴다.
※ 해결 방법:
안에서 position 값으로 잡기 (x)
container의 padding 값으로 위치 잡기.
→ 위치 설정할 때 padding 쓰기
※ padding 쓸 때, 왜 box-sizing: border box를 쓸까?
2021.11.29 - [IT 공부/프론트엔드(Front-end)] - padding 부모 벗어남, 사이즈 변경 문제를 해결하는 box-sizing
해결방법
.list-member li {
height: 40px;
padding: 5px 8px;
box-sizing: border-box;
}
.list-member li button {
width: 100%;
padding: 7px 10px;
border: none;
background-color: #fff;
border-radius: 8px;
cursor: pointer;
text-align: left;
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
}
height를 빼줘야, 콘텐츠 길이가 바뀌어도
li가 알아서 늘어난다.
(아래 코드 참조)
.btn-select {
width: 100%;
padding: 13px 30px 13px 14px;
font-size: 12px;
line-height: 14px;
background-color: #fff;
border: 1px solid #C4C4C4;
box-sizing: border-box;
border-radius: 10px;
cursor: pointer;
text-align: left;
background: url("img/triangle_down.png") center right 14px no-repeat;
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
}
※ 아무것도 없는 ul, li 부분을
버튼처럼 꾸며보았다.
셀렉트박스 커스텀(select box custom) 실습 복습 끝!
로또 번호 생성 알고리즘 javascript로 작성하기 (0) | 2022.01.24 |
---|---|
[Node.js] 블로그 웹사이트 만들기-1 (기본세팅,router,요구사항 명세서 get까지) (0) | 2022.01.07 |
자판기 만들기 (vending machine project): 마크업 작업(html)_1 (0) | 2021.11.22 |
1-2. 홈페이지 제작: css 입히기 (값 초기화, css.reset) (0) | 2021.10.05 |
1-1. 홈페이지 만들기: html로 구조짜기 (header 부분) (0) | 2021.08.26 |
댓글 영역