Bootstrap 5) Study

[웹코딩 가이드] 홈

이제 지~난한(ㅡㅡ;) Bootstrap 5 강좌의 긴 여정을 시작합니다.. diagram-arrow-down

Web 표준html로 웹사이트 틀을 만들고, Css로 꾸며주고, Javascript로 동작시키는데.. 이것들은 각각 분리하여 작성되어야 나중에라도, 누구라도,, 알아보기 쉽고 유지 관리에도 도움이 된다!


Bootstrap 5) 강좌는 html 5)Css 3)의 대략적인 기본은 갖추고, 직접 코딩하고 검색하면서 스스로 학습하고자 하는 분들(만!)을 대상으로 합니다 ㅡㅡ;


부트스트랩 색상

부트스트랩 v5.3)의 에서 Css 색상 변수들은 :root로 전역 설정되며, 다크 색상모드에서도 또한 (기존 테마 색상들은 변경되지 않은 상태에서)그에 맞추어 자동 조정된다!

부트스트랩의 색상 파레트
.text-body.bg-body 클래스는 <body> 기본 텍스트색과 배경색을 나타내며, .text-reset 클래스는 현재 요소의 텍스트 색상을 부모요소의 색상으로 되돌린다

.text-reset은 보통 <a> 요소에서의 기본 링크 텍스트 색상을 변경하고자 할 때 사용되는데, 이 경우 부모 요소에서 지정된 색상을 물려받게 된다: [기본 링크색] 대 [리셋한 링크색] 이 리셋한 링크는(아무런 설정도 안한 단순 <p> 문단이 부모요소이므로) 부트스트랩 기본 .text-body 색상으로 표시됩니다


이 강좌 사이트에서 보이는 색상들은 :root에서의 사용자정의 Css를 통해 조금 연한 Solid 색상으로 재정의한 것입니다 - 실제 부트스트랩의 기본 색상들은 좀 다르고, 더 진한 편입니다..

부트스트랩 v5.3)의 신규 색상 파레트에는 기존의 테마 색상들에다 -secondary(연한 색상 for color와 bg), -tertiary(더 연한 색상 for color와 bg), -emphasis(더 진한 텍스트 for color) 등이 추가되었다

.text-body-emphasis .text-body(텍스트색) .text-body-secondary .text-body-tertiary

.bg-body(배경색) .bg-body-secondary .bg-body-tertiary

부트스트랩 v5.3)의 신규 색상 파레트에서 배경색과 테두리 색상에는 -subtle(연한 색상 for bg와 border) 색상 변수가 추가되었다

.bg-success .bg-success-subtle

.border border-success .border border-success-subtle


* cf) 부트스트랩 v5.3)에서는 배경색만 설정하면(예컨대, .text-bg-색상); 텍스트는 그에 대비되는 색상으로 자동으로 맞추어진다!

.text-bg-primary .text-bg-secondary .text-bg-success

텍스트색 및 배경색, 요소의 불투명도
텍스트의 불투명도를 설정하는 .text-opacity-75/50/25, 배경색의 불투명도를 설정하는 .bg-opacity-75/50/25는 모두 색상 클래스와 함께 조합하여 사용해야 한다!

.text-primary & text-opacity-75 & text-opacity-50 & text-opacity-25

.bg-success & bg-opacity-75 & bg-opacity-50 & bg-opacity-25


* cf) 배경색을 완전히 없애고자할 때는 .bg-transparent 클래스(= Css의 transparent 키워드)를 쓸 수 있다 이 투명 배경 클래스는 카드의 헤더 및 푸터에 기본 설정되어 있던 배경색을 없애줄 때 주로 사용된다!

요소의 불투명도는 .opacity-0/25/50/75/100 클래스로 설정한다: .opacity-25 .opacity-50 .opacity-75

* cf) 부트스트랩에서 기본 제공하는 요소의 불투명도 값은 0/25/50/75/100 뿐이지만, 필요하다면; Css 사용자정의로 .opacity-0/10/20/30/40/50/60/70/80/90/100 식으로 세분화하여 만들어 사용할 수 있다: .opacity-60 { opacity: 0.6; }

➥ 사라진 텍스트 색상 되살리기

기존의 .text-muted(흐릿~한 텍스트)와 .text-black-50, .text-white-50은 부트스트랩 v5.3) 버전에서 제거되었고, 대신에 텍스트 색상에다 .text-opacity-# 클래스를 덧붙여서 사용하면 된다. 하지만, 편의상 필요하다면; css 사용자정의를 통해 .text-muted, .text-black-50, .text-white-50 등 Bootstrap 5)에 와서 사라진 기존의 텍스트 색상을 되살려 쓸 수도 있다!

.text-muted
.text-white-50 bg-dark
.text-black-50 bg-light
                                        
                                            .text-muted { color: #999999 !important; }
                                            .text-white-50 { color: rgb(255 255 255 / 0.5) !important; }
                                            .text-black-50 { color: rgb(0 0 0 / 0.5) !important; }
                                        
                                    
그라디언트 배경
배경색과 함께 다음과 같은 사용자정의 .bg-gradients 클래스를 만들어 추가해주면 배경에 자신만의 그라디언트를 더해줄 수 있다
.bg-secondary bg-gradients
                                    
                                        
                                    
                                
                                    
                                        .bg-gradients { background: linear-gradient(180deg, rgba(255, 255, 255, 0), rgba(255, 255, 255, 0.25)); }
                                    
                                

필요하다면; 위 코드에서 그라디언트 종류 및 색상이나 각도, 불투명도 등을 원하는 대로 적당히 바꾸어 다른 형태의 그라디언트 배경색으로 만들어 쓰면 됩니다..


부트스트랩 v5.3) 기본 배경 색상모드는 Light Mode인데, Dark Mode 또한 지원한다. Dark 모드data-bs-theme= "dark" 속성을 써서 html 요소나 특정 컴포넌트 등에 대하여 전역적으로 적용하거나 전환할 수 있다. 가령, <html> 요소에서 <html data-bs-theme= "dark">로 설정해주면; 현재 웹문서 전체를 대상으로 Dark 모드가 적용되고, 해당 웹문서에서 특정한 속성이 적용된 구성요소 이외의 모든컴포넌트와 요소에 Dark 모드가 적용된다

타이포그래피

여기서는 부트스트랩 v5.3)의 텍스트, 글꼴 관련 클래스들을 간략히 살펴봅니다..

텍스트 타이포그래피
아래 예제 코드를 보면서 .display-1/2/3/4/5/6.fs-1/2/3/4/5/6간 차이를 눈으로 새겨두시면 됩니다
.display-

1

2

3

4

5

6

.fs- 1 2 3 4 5 6
마찬가지로, <h#> 태그들과 .lead 클래스, <body> 기본 텍스트, <small> 태그간 글자의 크기 및 굵기 차이를 눈으로 새겨두시면 됩니다
h

1

2

3

4

5
6
.lead 클래스 body 기본 텍스트 small 태그
Title .text-body-secondary small
                                    
                                        
                                    
                                

위 코드는 <h5> 태그 내 제목 옆에 .text-body-secondary.small 클래스를 써서 작고 흐릿한 보조 제목을 달아준 것입니다

그밖에, 다음과 같은 글꼴 관련 클래스들이 있다

.fw-bold | .fw-normal(= body 기본) | .fw-light

(부모요소의 font-weight 대비) .fw-bolder | .fw-medium | .fw-lighter

.font-monospace (고정폭 글꼴)

.fst-italic | .fst-normal(= body 기본) | i 태그

➥ 사용자정의 .mark, .small 클래스

html 기본 태그인 <mark>, <small>과 같은 규격으로 정의한 사용자정의 클래스를 만들어쓸 수도 있다: mark 태그.mark 클래스, small 태그.small 클래스

                                        
                                            /* 사용자정의 small, mark 클래스 추가 */
                                            small, .small { font-size: 0.875em; }
                                            mark, .mark { padding: 0.2em; background-color: #fcf8e3; }
                                        
                                    

이 사용자정의 클래스는 html 태그의 글꼴 스타일과 일치시키되, 간결하게 <small class="mark">작은 형광문자</small>와 같은 방식으로 쓰고자할 때 매우 유용하다: 작은 형광문자

이렇게 사용자정의 클래스로 만들면; <div>, <p>와 같은 블록레벨 요소에서도 사용할 수 있게 된다!

                                        
                                            
                                        
                                    

점보트론 디자인

부트스트랩 v4) 버전에서 있었던 점보트론은 v5) 버전으로 올라가면서 공식적으로는 폐기되었다. 하지만, 여전히 Css 및 부트스트랩 유틸리티 클래스들을 이용하여 만들어 쓸 수 있는데, 점보트론 내부에는 다른 부트스트랩 요소 및 클래스를 포함하여 거의 모든 유효한 html을 넣을 수 있다:

점보트론 디자인
아래는, 사용자정의 .jumbotron 클래스를 작성하여 예전의 점보트론 디자인을 재현해본 것입니다:

Hello, world!

- 이것은 단순 Hero Unit으로서, 추천 콘텐츠나 정보에 대한 추가 주의를 환기시키기 위한 단순한 점보트론 스타일의 구성 요소입니다!


이는 부트스트랩의 타이포그래피와 간격 유틸리티 클래스를 사용하여 더 큰 컨테이너 내에서 컨텐츠 공간을 확보합니다

* Jumbotron 예제 살펴보기)


(* 이 예제는 에서 가져와 (약간 손질한)것인데, 나중에 한번 만들어보십시오 - 다른 샘플 예제들도 많으니 한번 찾아가서 살펴보십시오..)

패러그래프

여기서는 부트스트랩 v5.3)의 문단, 인용문 관련 클래스들을 간략히 살펴봅니다..

문단 정렬
아래는 기본적인 문단 수평 정렬인데(Css 3에서의 .text-left/center/right), 뷰포트에 따라 따라 반응하는 .text-*-start/center/end 클래스를 사용할 수도 있다 참고로, 부트스트랩 5) 버전에서는 left/right 속성명은 제거되었습니다 - 대신, start/end 속성명을 사용하십시오(여타, 同)

.text-start(기본값)

.text-center

.text-end

텍스트 수직 정렬을 설정하는 .align- 클래스(기본값: .align-baseline)는 인라인, 인라인블록, 인라인 테이블 및 테이블 셀 요소에만 영향을 미친다 인라인이 아닌 컨텐츠에는 플렉스박스를 사용해야 한다!
.align-baseline .align-top .align-middle .align-bottom
줄 높이
html 문서 기본, 또는 부트스트랩에서 재설정한 기본값인 .lh-base 클래스의 line-height 값은 대략 1.5 정도이다
.lh-sm: css 스타일로 값을 설정할 때는 font-size에 따라 line-height 값이 달라질 수 있도록 단위 없는 숫자 값을 사용하는 것이 좋다!

(기본값) .lh-base: css 스타일로 값을 설정할 때는 font-size에 따라 line-height 값이 달라질 수 있도록 단위 없는 숫자 값을 사용하는 것이 좋다!

.lh-lg: css 스타일로 값을 설정할 때는 font-size에 따라 line-height 값이 달라질 수 있도록 단위 없는 숫자 값을 사용하는 것이 좋다!

* cf) css 스타일로 값을 설정할 때는 font-size에 따라 line-height 값이 달라질 수 있도록 단위 없는 숫자 값을 사용하는 것이 좋다 예컨대, font: 1.5/1.5;로 주면 font-size1.5 배로 커질 때, line-height 값도 1.5 높이로 되어 수직 중앙에 자리잡게 된다!

텍스트 자르기, 래핑 및 오버플로
.text-truncate 클래스는 현재의 화면 너비를 벗어나는 영역서부터는 자르고, 나머지는 ...로 표시한다 이 클래스는 블록레벨 요소 및 인라인-블록 요소에서만 작동된다!

(* 여기는 블록 요소 p) .text-truncate 클래스는 (현재의 화면 너비를 벗어나는 영역서부터는) 자르고 나머지는 ...로 표시하는데, 블록 및 인라인-블록 요소에서만 작동된다!

(* 여기는 인라인-블록 요소 span) 블록 및 인라인-블록 요소에서만 .text-truncate 클래스가 작동됨!
                                    
                                        
                                    
                                
html에서는 기본적으로 텍스트가 길어지면 자동 줄바꿈하여 다음 줄로 내려간다(기본값인 .text-wrap). 하지만, 해당 요소에 .text-nowrap 클래스를 주면; (텍스트가 길어져서 다른 영역을 침범하더라도)자동 줄바꿈을 하지 않는다

* 참고로, .text-nowrap 시 부모요소에서 .overflow-auto로 설정해주면; 남의 영역을 침범하는 대신 (필요할 때만)스크롤바가 생겨난다

                                    
                                        
                                    
                                

.text-nowrap 시 부모요소에서 .overflow-auto로 설정해주면; 남의 영역을 침범하는 대신 (필요할 때만)스크롤바가 생겨난다 위 코드의 <div>에서 .overflow-auto 클래스를 제거해보십시오..

블록쿼터
Bootstrap 5)에서 <blockquote> 태그(및 .blockquote 클래스)는 마진이 margin: 0 0 1rem;(= 상/좌우/하)으로 재설정되었고, <address> 태그는 이탤릭체에서 브라우저 기본 스타일로 재정의되고 line-height 또한 상속되며, margin-bottom: 1rem;이 추가되었다

blockquote .blockquote

                                    
                                        
                                    
                                

리스트 스타일

여기서는 부트스트랩 v5.3)의 리스트 관련 클래스들을 간략히 살펴봅니다..

목록 리스트
Bootstrap 5)에서는 <ul> 및 <ol>, <dl>의 margin-top은 제거되고, margin-bottom: 1rem;으로 재설정되며(내부의 중첩된 목록에서는 margin-bottom도 제거된다), 앞쪽 패딩 또한 재설정된다. 한편, <ul> 및 <ol>에서 .list-unstyled 클래스를 주면; 앞에 붙는 불릿을 없애고 앞쪽 마진도 없애준다
  • 여기에는 리스트 스타일이 전혀 적용되어 있지 않지만, 그럼에도 이것은 구조적으로 여전히 리스트이다 - 단, 이는 직계 자식 요소에만 적용된다!
  • 그 내부에 중첩된 리스트에서는
    • .list-unstyled 효과가 미치지 않고..
    • 다시 앞에 불릿도 나타나고 적절한 왼쪽 마진을 갖는다
  • 이러한 성질은, 경우에 따라서는 오히려 유용할 때가 있다!
                                    
                                        
                                    
                                
<ul> 및 <ol>에서 .list-inline 클래스를 주고, 각 <li>에서 .list-inline-item 클래스를 주면; 가로로 펼쳐지는 인라인 리스트를 만들 수 있다 이러한 인라인 리스트는 주로 가로 메뉴바를 만들 때 활용된다!
  • html 5
  • css 3
  • Bootstrap 5
                                    
                                        
                                    
                                
사전목록 리스트
Bootstrap 5)에서는 <dl> 리스트에서 (html 5에서와는 좀 다르게)<dt>는 굵게 표시되고, <dd>는 margin-left: 0; margin-bottom: 0.5rem;으로 재설정된다. 한편, 가로 사전목록은 Bootstrap 5)의 그리드시스템을 써서 작성할 수 있다
제목

내용 설명

내용 설명

여긴 제목이 좀 길어서 잘라주겠습니다:
이 설명은 <dd> 공간이 좁아질 경우에 대비하여 .text-truncate 클래스를 붙였습니다!
                                    
                                        
                                    
                                

박스 스타일

부트스트랩 이전 버전들 속성명에서 방향을 의미하는 left/right는 Bootstrap 5) 버전에 와서 start/end로 바뀌었습니다. 이는, 최근의 Css 쓰기모드를 고려한 새로운 작명 방식인데, 부트스트랩 이전 버전들만 아니라 Css의 속성명과도 좀 상이해진 점이 있으니 기억해두십시오..

박스 테두리 스타일
박스 테두리.border 클래스로 그려주는데, .border-top/bottom/start/end 클래스로 원하는 방면만 따로 그려줄 수도 있다. 반대로, 4방향에서 특정 방면만 제외하고자 할 때는; .border에 덧붙여 .border border-top/bottom/start/end-0 식으로 사용해주면 된다:

.border-start border-top .border border-start-0


먼저 테두리를 그리고( .border ), 특정 방면을 제외하는( .border-start-0 ) 방식은 부트스트랩의 코딩 철학인 UI 타입스타일링의 분리 적용에 의한 결합을 잘 보여주고 있다!

둥근 테두리.border rounded.border rounded-1/2/3/4/5 클래스로 작성한다

.border rounded-1 & .rounded-3 & .rounded-5

테두리 두께.border border-lg (부트스트랩 기본 굵은 테두리) 및 .border border-1/2/3/4/5 클래스로 작성한다

.border border-1 & .border-3 & .border-5

테두리의 불투명도는 텍스트 및 배경 색상에서와 마찬가지로, border border-색상 에다 .border-opacity-100/75/50/25/10/0 불투명도 클래스를 덧붙여서 사용한다

.border border-success border-opacity-75 & .border-opacity-50 & .border-opacity-25

➥ 방향별 굵은 테두리 .border-*-lg

부트스트랩에서 기본 지원하는 굵은 테두리는 박스 4방면 모두 에 함께 적용되지만, 필요하다면; 사용자정의 각 방향별 굵은 테두리 를 만들어 쓸 수도 있다. 박스 모서리 모두를 같은 굵기로 그리고자 한다면; .border border-lg, 각 방향별 굵은 모서리를 원한다면; .border border-*-lg 방식으로 스타일 정의하여 사용하면 된다 *는 각 방향임

                                        
                                            
                                        
                                    
                                        
                                            /* Css 사용자정의 굵은 테두리 */
                                            .border-lg { border-width: 0.25rem; }
                                            .border-top-lg { border-top-width: 0.25rem; }
                                            .border-end-lg { border-right-width: 0.25rem; }
                                            .border-bottom-lg { border-bottom-width: 0.25rem; }
                                            .border-start-lg { border-left-width: 0.25rem; }
                                        
                                    

이 사용자정의 클래스를 가져다 (필요하면 굵기 값을 수정하여)쓰시면 됩니다

박스 모서리 스타일
박스 모서리: .rounded | .rounded-pill | .rounded-circle | .rounded-0

rounded rounded-pill rounded-circle rounded-0

각 방면 박스 모서리: .rounded-top/end/bottom/start

rounded-top rounded-end rounded-bottom rounded-start

크기별 박스 모서리: .rounded-0/1/2/3/4/5

rounded-0 rounded-1 rounded-2 rounded-3 rounded-4 rounded-5

etc..

rounded-top-3 rounded-start-3 rounded-start-circle rounded-start-pill rounded-5 rounded-top-0

                                    
                                        
                                    
                                
박스 그림자 스타일
박스 그림자: .shadow-sm | .shadow | .shadow-lg

.shadow-sm .shadow .shadow-lg

                                    
                                        
                                    
                                
포커스 링 스타일
.focus-ring은 포커스가 주어진 상태(:focus)의 기본 윤곽선을 제거하고 보다 광범위하게 사용자 정의할 수 있는 박스 모양으로 대체하는데, 모든 요소 및 컴포넌트에 대해 사용할 수 있다

포커스링: .focus-ring .focus-ring border-success

                                    
                                        
                                    
                                

포커스 링의 색상은 위와 같이 부트스트랩의 색상 유틸리티를 써서 변경해주면 된다!


* cf) :root 레벨에서 Css 변수를 써서 부트스트랩의 기본 포커스 링 스타일을 재정의해줄 수도 있다!

                                    
                                        :root {
                                            --bs-focus-ring-width: 0.25rem;
                                            --bs-focus-ring-opacity: 0.25;
                                            --bs-focus-ring-color: rgb(4 91 193 / 0.25);
                                            /* .. */
                                        }
                                      
                                        .focus-ring:focus {
                                            outline: 0;
                                            box-shadow: var(--bs-focus-ring-x, 0) var(--bs-focus-ring-y, 0) var(--bs-focus-ring-blur, 0) var(--bs-focus-ring-width) var(--bs-focus-ring-color);
                                        }
                                    
                                

이미지/미디어 다루기

부트스트랩에서 이미지는 기본적으로 반응형 으로 동작하며, max-width: 100%; height: auto;로 부모 요소를 꽉 채우게 된다!

이미지 삽입 및 배치
이미지 삽입.img-fluid는 기본값이며, .img-thumbnail로 주면; 둥근 모서리를 가진 1픽셀 테두리(= border rounded 1px)로 이미지를 둘러싸준다
Fluid image Thumbnail image
                                    
                                        
                                    
                                
가운데 정렬 이미지
                                    
                                        
                                    
                                
<picture> & <source> 태그와 함께 사용할 때는; 이미지 관련 클래스를 <img> 태그에 넣어주어야 한다
picture 이미지
                                    
                                        
                                    
                                
이미지에 설명글을 달아줄 때는, <figure>(& .figure) 요소 안에서 <img>(& .figure-img)의 위나 아래에 <figcaption>(& .figure-caption)으로 작성해주면 된다
위쪽에 단 설명글
figure 이미지
아래쪽에 단 설명글
                                    
                                        
                                    
                                
미디어 삽입하기
미디어 삽입 시는; .media 요소 내부에 넣어주면 된다

Media 영역

                                    
                                        
                                    
                                
유튜브 등의 동영상 삽입 시는; .ratio ratio-1x1/4x3/16x9/21x9(기본값: 1x1)로 넣어준다. 이는 <iframe>, <video>, <object> 등으로 삽입한 비디오나 슬라이드를 부모 요소의 너비에 따라 반응형으로 처리하는데, 스타일은 부모 요소의 .ratio 클래스로부터 자식 요소로 직접 적용된다
                                    
                                        
                                    
                                

이러한 비율 도우미는 <div>나 <img> 등 표준적인 html 태그에서도 사용할 수 있다!

Plyr 플레이어

는 html 5) 비디오, 등을 재생해주는 인라인 미디어 플레이어이다

Plyr 플레이어 사용하기
Plyr 플레이어를 사용하기 위해서는; 먼저 Css 및 스크립트 소스를 필요로 한다
[ Plyr Player 소스 및 스크립트 ]
                                        
                                            <!-- Css 링크 -->
                                            <link href="https://cdn.plyr.io/3.8.4/plyr.css" rel="stylesheet" />            
                                            
                                            <!-- 스크립트 불러오기: plyr에다 polyfilled도 포함함 -->
                                            <script src="https://cdn.plyr.io/3.8.4/plyr.polyfilled.js"></script>

                                            <!-- 스크립트 생성 -->
                                            <script>
                                                const player= new Plyr('.js-player')
                                            </script>
                                        
                                    

옵션도 함께 설정해줄 수 있다: const player= new Plyr('.js-player', { title: 'Example', });

html 5) Player
                                    
                                        
                                    
                                
유튜브와 비메오에서의 Plyr 플레이어
1. 유튜브와 비메오 플레이어의 경우, Plyr은 기본적으로 <iframe>을 사용하는데, plyr__video-embed 클래스 이름이 반응형 임베드로 만든다. autoplay, loop, playsinline (유튜브 전용) 등의 쿼리 매개변수를 URL에 추가할 수 있다
                                    
                                        
                                        <div class="plyr__video-embed" id="player">
                                            <iframe src="https://www.youtube.com/embed/bTqVqk7FSmY?origin=https://plyr.io&iv_load_policy=3&modestbranding=1&playsinline=1&showinfo=0&rel=0&enablejsapi=1" allowfullscreen allowtransparency allow="autoplay"></iframe>
                                        </div>
                                    
                                

plyr__video-embed 클래스는 (가장 일반적인)16:9 비율로 시작하는데, Plyr 자체가 작동하면 사용자가 지정한 비율 설정 옵션이 작동된다!

2. 또는 data-plyr-providerdata-plyr-embed-id 라는 두 가지 필수 데이터 속성을 가진 표준 div를 선택할 수도 있다

Vimeo Player
Youtube Player
                                    
                                        
                                    
                                

data-plyr-embed-id는 미디어 영상의 ID 혹은 URL일 수 있으며, WebVTT 자막 또한 지원한다


* cf) 한 페이지에 여러 영상을 임베드할 경우에는 각각 따로 생성해주어야 하는데, 아래와 같이 맵 배열을 이용하면 모두 순차적으로 생성된다 이 경우에는 당연히, 영상에서 ID 대신 클래스를 사용하여야 합니다!

                                    
                                        const players= Array.from(document.querySelectorAll('.js-player')).map((p) => new Plyr(p));
                                    
                                

위 유튜브 플레이어에서 보았을 터인데(?), 최근들어 유튜브에서는 영상의 ID를 넣든, URL을 넣든 작동하지 않습니다 - 현재로서는 <a> 요소로 직접 링크하는 것만이 유일한 방법입니다. 아마도, 광고도 안보면서 꽁짜로 가져다 본다고 임베드 방식은 정책적으로 막아놓은 것으로 보입니다 ㅡㅡ; 양반네

                                    
                                        
                                    
                                

Big Picture

는 이미지, iframe, 인라인 컨텐츠 및 비디오를 YouTube, Vimeo 및 자체 호스팅 비디오로 선택적으로 자동 재생해준다!

빅픽쳐 갤러리
빅 픽쳐 플러그인을 사용하기 위해서는; 먼저 Big Picture 플러그인을 위한 스크립트 소스 및 초기화를 필요로 한다
[ BicPicture 스크립트 소스 ]
                                        
                                            <script src="vendors/bigpicture/BigPicture.js"></script>

                                            또는, <script src="https://cdn.jsdelivr.net/npm/bigpicture@2.6.4/dist/BigPicture.min.js"></script>
                                        
                                    
1. Big Picture 플러그인은 썸네일을 표시할 수 있으며 클릭하면 원본 이미지가 팝업되는데, 라이트 박스 이미지는 무엇이든 래핑하여 작동된다 <img> 요소는 data-bigpicture= 속성을 지닌 <a> 요소 내부에 배치하여야 한다!
                                    
                                        
                                    
                                

버튼이 필요하지 않다면; 위 코드와 같은 그리드 배치도 필요없고, 그저 <a> 요소만으로 충분합니다!

2. data-bigpicture=data-bp= 속성을 쓰면 쉽게 라이트박스 이미지 갤러리를 만들 수 있다. 부모요소에서 갤러리 id 를 설정하고, <a> 요소에서 data-bigpicture= 속성을 써서 id 를, data-bp= 속성을 사용하여 이미지 원본을 전달해주면 된다
                                    
                                        
                                    
                                
3. YouTube 및 Vimeo 동영상은 data-bigpicture= 속성을 통해 동영상 id 를 제공하기만 하면 Big Picture 플러그인과 함께 사용할 수 있다
                                    
                                        
                                    
                                

참고로, 얼마전부터 유튜브는 이런 식으로 작동되지 않습니다 - 아마도 광고가 들어가지 않는 이 방식이 맘에 안들어 막아버린 듯합니다 ㅡㅡ;


그외, 순수 자바스크립트 라이트 박스인 또한 이미지, iframe, 인라인 컨텐츠 및 비디오를 YouTube, Vimeo 및 자체 호스팅 비디오에 대한 선택적 자동 재생으로 표시해주는, 많이 사용되는 유용한 라이브러리입니다

SVGs 아이콘

부트스트랩은 향상된 접근성벡터 지원 이라는 측면에서 을 선호한다!

부트스트랩의 Svg 아이콘
1-1. 부트스트랩의 Svg 아이콘을 사용하려면; 먼저, <header> 안에서 부트스트랩 아이콘을 사용하기 위한 CDN 링크를 넣어주어야 한다
[ 부트스트랩 아이콘 CDN 링크 ]
                                        
                                            
                                        
                                    
1-2. 이어서, html 문서 내에서 Svg 아이콘을 직접 작성해주거나(), 갖고 있는 Svg 아이콘을 일반적인 이미지처럼 <img> 요소로 참조하거나(Bootstrap logo) 할 수 있는데, widthheight 등의 속성도 함께 사용할 수 있다
                                    
                                        
                                    
                                

<img> 요소에서 Svg를 사용하는 경우 스크린 리더기가 Svg를 이미지로 알리지 않거나 완전히 건너뛸 수 있는데, 이 문제는 <img> 요소에 role= "img" 및 적절한 aria-label= ".." 속성을 추가해주면 된다!

2. 순전히 장식용인 아이콘에는 aria-hidden= "true" 속성을 추가해서 보조기술로부터 숨겨주어야 하며, role= "img"aria-label 속성으로 그 의미를 보조기술에 알려주어야 한다 그렇지 않은 경우에는; 적절한 방법으로 대체 텍스트를 제공해주어야 한다!
                                    
                                        
                                    
                                

Svg는 IE 및 Edge에서 기본적으로 포커스를 받는데, 이 문제는 Svg 요소에 focusable= "false" 속성을 추가해주면 된다!


* cf) 아이콘에 쓰이는 Svg 이미지는 다음과 같은 Css 스타일을 설정해주는 것이 일반적이다

                                    
                                        svg {
                                            fill: currentColor; /* 색상 기본값 */
                                        } a > svg, button > svg { pointer-events: none; /* 포인터 반응: No */ }
                                    
                                

currentColor 키워드는 color 속성의 계산된 동적 값이다 - 예컨대, currentColor 를 정의하는 요소에 정의된 색상값이 없는 경우; 대신 상위 부모요소의 색상을 물려받게 된다!

오픈소스 아이콘

부트스트랩에서 기본 제공하는 SVGs 아이콘 외에도 다양한 오픈소스 아이콘 제공 사이트들이 있는데, 이러한 오픈소스 아이콘들은 <body> 안에서 사용하려는 아이콘 이름을 <i>나 <span> 태그 등으로 (각 사이트에서 제공하는 방식에 맞추어)추가해주면; 외부 오픈소스 아이콘을 웹문서에 불러들여 사용할 수 있다

오픈소스 아이콘
은 스크립트 파일을 CDN으로 불러와서 초기화 설정을 해준 이후에 <i>나 <span> 태그를 써서 사용할 수 있는데, 에 표시된 이름으로 불러들여 쓰거나(), 또는 다운로드하여 <img> 태그로 삽입해줄(feather) 수도 있다:
[ 아이콘 CDN 링크 및 초기화]
                                        
                                            <body>
                                                <!-- 아이콘 이름으로 불러온다: -->
                                                <i data-feather="feather"></i>

                                                <!-- 아이콘을 다운로드하여 img 태그로 삽입해준다 ← Feather 아이콘의 기본 사이징은 24x24(px) 크기임! -->
                                                <img src="./_img/feather.svg" alt="feather" title="feather">

                                                <!-- 색상과 크기 설정: -->
                                                <i class="text-success" data-feather="activity" width="32px" height="32px"></i>

                                                ..

                                                <!-- Feather 아이콘 v4.29.0 CDN 링크 및 초기화 -->
                                                <script src="https://cdn.jsdelivr.net/npm/feather-icons/dist/feather.min.js"></script>
                                                <script>
                                                    feather.replace(); // feather 아이콘 초기화
                                                </script>
                                            </body>
                                        
                                    

다른 오픈소스 아이콘들도 마찬가지로.. (해당 사이트에서 제공하는 방식에 맞추어)필요한 Css 링크나 Script 정의를 넣어준 뒤 사용해야 합니다!

또한, Feather 아이콘과 같은 방식으로 사용한다. 먼저, CDN 링크와 스크립트 파일을 불러온 이후에 <i>나 <span> 태그를 써서 이용할 수 있다
[ 아이콘 CDN 링크 및 초기화 ]
                                        
                                            <head>
                                                <!-- Fontawesome 아이콘 CDN 링크 -->
                                                <link href="https://use.fontawesome.com/releases/v5.7.0/css/all.css" rel="stylesheet" integrity="sha384-lZN37f5QGtY3VHgisS14W3ExzMWZxybE1SJSEsQp9S+oqd12jhcu+A56Ebc1zFSJ" crossorigin="anonymous">
                                            </head>

                                            <body>
                                                <span class='fab fa-facebook'></span>

                                                ..

                                                <!-- Fontawesome 스크립트 정의 파일 -->
                                                <script src="./vendors/fontawesome/all.min.js"></script>
                                            </body>
                                        
                                    
.fill-색상.stroke-색상 클래스로 SVG 색을 채워줄 수 있다. 한편, 아이콘 크기 변경은 간단히 svg 요소의 widthheight 속성을 사용하면 된다
diagram-arrow-down diagram-arrow-down design-tool-pen-station design-tool-pen-station
                                    
                                        
                                    
                                

한번 사용한, 또는 나중에 써먹을 일이 있을듯한 아이콘은 한 곳에 담아서 보관해두면 나중에 찾아쓰기에 좀 편해집니다 - 자신의 아이콘 보관함 하나 만들어서 (코드를)담아두세요: 경주남산 로고

                                    
                                        
                                    
                                

물론, 위 data-feather= "activity" 아이콘의 색상이나 크기 값들은 실제 코딩 시 수정하여 쓰시면 됩니다

➥ 아이콘 버튼

이 사용자정의 .btn-icon btn-transdark 클래스는 아이콘을 버튼으로 쓰면서 배경을 투명하게 한 것인데, 포커스가 주어지면 그림자 배경을 나타낸다:

                                        
                                            
                                        
                                    

이 예제의 아이콘 버튼은 투명 버튼과 오픈소스 아이콘의 사용법을 예시하기 위한 것일 뿐입니다 관련 사용자정의 Css 설정은 너무 복잡하고 양도 많아 생략합니다 ㅡㅡ;


그 외에도, , 등 무료(또는, 유료)로 아이콘 및 일러스트, 이미지 등을 제공하는 다양한 사이트들이 많이 있으니 한번 살펴보십시오 참고로, 원하는 특정 아이콘(및 일러스터) 모양을 찾고자 한다면; 에 들러보십시오..

캐러셀 슬라이드

캐러셀은 Css 3d 트랜스폼과 약간의 스크립트로 구축된, 이어진 컨텐츠들(이미지나 텍스트 등) 사이를 순환하는 슬라이드 쇼 이다

캐러셀 기본
캐레셀에서 슬라이드 크기를 자동으로 정규화하지는 않으므로, 컨텐츠 크기를 적절하게 조정하려면 추가 유틸리티나 사용자정의 스타일을 사용해야 한다
캐러셀은 이전/다음 버튼과 표시자 도 지원하는데, 필요에 따라 추가하고 스타일링해주면 된다. 또한, 캐러셀은 기본적으로 터치스크린 기기에서의 좌/우 스와프를 지원하는데, 이 기능을 비활성화하려면; data-bs-touch= "false" 값을 추가해주면 된다
색상 설정은 루트 요소, 부모 래퍼 혹은 컴포넌트 자체에서 data-bs-theme= "dark" 속성을 사용해주면 된다 이는 Css의 filter 속성을 써서 기본값인 white 계열과 대비되는 색상으로 반전시킨다!
캐러셀 아이템간 자동 순환 시간 간격을 변경하려면; 개별 .carousel-item에서 data-bs-interval= "밀리초" 속성을 추가해주면 된다
자동 재생 슬라이드는 data-bs-ride= "carousel" 속성을 주면된다. 이 API를 지원하는 브라우저에서 웹페이지가 표시되지 않으면(예컨대, 브라우저 탭이 비활성화되거나 브라우저 창이 최소화된 경우) 캐러셀 순환이 중지된다 - 자동 재생은 마우스를 가져가면 일시 중지되는데, 이 동작은 pause 옵션으로 제어할 수 있다 ride 옵션을 data-bs-ride= "true"로 설정하면; 페이지 로드 시 자동으로 순환을 시작하지 않되, 첫번째 사용자 상호작용 후에 시작된다!

접근성을 위해서는 자동 재생 기능을 사용하지 않는 것이 좋지만, 꼭 필요하다면; 캐러셀을 멈추거나 일시 멈춤할 수 있는 추가 버튼을 명시적으로 제공하는 것이 좋다 일반적으로 캐러셀은 종종 사용성 및 접근성 문제를 일으킬 수 있으며, 중첩 캐러셀은 지원하지 않는다!


* cf) 성능상의 이유로 캐러셀은 캐러셀 생성자 메서드를 통해 수동으로 초기화해야 한다 - 스크립트에서 초기화하지 않으면; 일부 이벤트 리스너(특히, 터치나 스와프 등)는 사용자가 명시적으로 활성화하기 전에는 등록되지 않는다 유일한 예외는 페이지 로드시 자동으로 초기화되는 data-bs-ride= "carousel" 속성을 지닌 자동재생 캐러셀이다!

캐러셀 슬라이드쇼
캐러셀 슬라이드 중의 하나는 반드시 .active 클래스를 지정해주어야 한다. 또한, 특히 단일 페이지에서 다수의 캐러셀을 사용하는 경우에, 선택적 컨트롤을 위해 고유한 id를 설정해주어야 한다. 컨트럴 및 표시자 요소들에는 캐러셀 요소의 id에 일치하는 data-bs-target= "대상요소", 또는 링크용 href= "#대상요소" 속성이 주어져야 한다

(* 이 예제는 에서 가져와 (약간 손질한)것인데, 나중에 한번 만들어보십시오 - 다른 샘플 예제들도 많으니 한번 찾아가서 살펴보십시오..)

Swiper 캐러셀

은 하드웨어 가속 전환과 놀라운 기본 동작을 갖춘 가장 현대적인 모바일 터치 슬라이더로서, 모바일 웹 사이트, 모바일 웹 앱 등에서 유용하게 쓸 수 있는데, 일반 PC 환경에서도 또한 잘 작동된다!

스위퍼 캐러셀
스위퍼 캐러셀 플러그인을 사용하기 위해서는; 먼저, 다음과 같이 Swiper 관련 CDN 링크, Script 소스 및 초기화를 필요로 한다
[ Swiper 캐러셀 소스 및 스크립트 ]
                                        
                                            <!-- Swiper Css CDN 링크 -->
                                            <link href="https://cdn.jsdelivr.net/npm/swiper@12/swiper-bundle.min.css" rel="stylesheet" />

                                            <!-- Swiper 스크립트 소스 불러오기 -->
                                            <script src="https://cdn.jsdelivr.net/npm/swiper@12/swiper-bundle.min.js"></script>
                                            <script>
                                                /* 스위퍼 캐러셀 초기화 옵션들 */
                                                const swiper= new Swiper('.swiper', {
                                                    direction: 'vertical',
                                                    loop: true,

                                                    // 이전, 이후 화살표 버튼이 필요하다면;
                                                    navigation: { nextEl: '.swiper-button-next', prevEl: '.swiper-button-prev', },

                                                    // 페이지네이션이 필요하다면;
                                                    pagination: { el: '.swiper-pagination', },

                                                    // 스크롤바가 필요하다면;
                                                    scrollbar: { el: '.swiper-scrollbar', },
                                                });
                                            </script>
                                        
                                    

필요하다면; 스위퍼 컨테이너의 크기도 조정해줄 필요가 있다: .swiper { width: 600px; height: 300px; }

                                    
                                        
                                    
                                
                                                    
                                                        
                                                    
                                                

썸네일은 기본적으로 .swiper-container 요소 뒤에 배치되는데, thumb 옵션에 thumbOptions: '#parentID' 값을 제공하여 특정 부모요소에 썸네일을 배치할 수도 있다!

사용자 상호작용

필요하다면; 특정 요소에 role= "button" 속성을 추가함으로써 기본 커서를 (버튼 요소 없이도)포인터로 변경하여 대화형임을 강조할 수 있다: <span role= "button" tabindex= "0">대화형</span>

상호작용 방지하기
.text-decoration-none 클래스는 <a> 태그의 링크 밑줄을 제거하며(소소한 이야기), .pe-none 클래스는 포인터(마우스, 스타일러스펜, 터치 등)과의 상호작용도 방지한다(소소한 이야기)

링크는 부모 요소에 .pe-none 클래스가 주어져 있기에 클릭할 수 없다. 하지만, 이 링크에서 다시 .pe-auto 클래스를 넣어주었기에 클릭이 가능해진다!

                                    
                                        
                                    
                                

.pe-none 클래스를 주어도 키보드로는 여전히 초점을 맞출 수 있고 실행할 수 있다. 키보드 기능까지 완전히 방지하려면; (키보드 포커스를 받는 것을 방지하기 위해)tabindex= "-1" 속성과 (보조기술에 이 사실을 전달하기 위해)aria-disabled= "true" 속성도 추가해주어야 한다 좀 더 간단하게는, 폼에서는 disabled 속성을 추가함으로써 가능하고, 링크에서는 href 속성을 제거하여 비대화형 앵커로 만들면 된다!

숨겨진 대화형 컨텐츠
시각적으로는 숨기되, 스크린리더기 등에는 알려야 하는 컨텐츠에는 .visually-hidden 클래스를 사용할 수 있는데, 이는 추가적인 시각 정보나 단서를 (예컨대, 색상을 통해 무언가를 알리고자 하는데)볼 수 없는 사용자에게 그 의도를 전달해야할 때 유용하다

위험! .visually-hidden 클래스는 시각적으로는 숨기되, 스크린 리더기에서는 액세스할 수 있도록 해준다!

                                    
                                        
                                    
                                

곧, 위 코드의 위험! 부분은 화면상 보이지 않지만, 스크린리더기가 이 코드를 만나면; (시각이 없는)사용자에게 그 내용을 읽어주는 것이다!

시각적으로 숨겨진 대화형 컨텐츠의 경우, .visually-hidden-focusable 클래스를 사용할 수 있는데, 포커스가 주어지면 컨트롤이 표시된다

.visually-hidden-focusable 클래스는 다시 (시력이 있는 키보드 사용자의 경우)초점이 맞춰지면 시각적으로 표시해준다!

                                    
                                        
                                    
                                

곧, 키보드 사용자가 위 <a> 요소에 초점을 맞추면; href= "#content" 앵커에 연결된 목적지로 이동하여 내용을 보여주는 것이다!


* cf) .visually-hidden-focusable 클래스는 독립형 클래스로서 .visually-hidden 클래스와 조합하여 사용해서는 안된다! 한편, 이들 클래스는 컨테이너에도 적용할 수 있다 - 곧, 컨테이너 내부에 포함된 자식요소가 포커스를 받으면; 컨테이너가 표시되도록 하는 것이다!

텍스트 선택방식
.user-select-all/none 클래스는 사용자가 텍스트 단락에서 클릭할 때 컨텐츠가 선택되는 방식을 설정한다

이 단락을 클릭하면 전부가 선택된다: .user-select-all

이 단락은 클릭해도 아무 것도 선택되지 않는다: .user-select-none


기본값인 .user-select-auto는 클릭 시, 브라우저 기본 선택동작(대개는, 드래그 동작)이 있다

상태표시 바

플레이스 홀더스피너 보더는 컴포넌트 또는 페이지에서 무언가가 로딩 중임을 표시하며, 프로그레스 바는 프로젝트의 현재 진척 정도를 표시한다

플레이스 홀더
플레이스 홀더.placeholder 클래스와 (너비 설정을 위하여)그리드 컬럼으로 만든다. 플레이스 홀더의 높이는 기본적으로 부모 요소의 크기를 기반으로 하지만, .placeholder-lg/sm/xs 클래스로 변경해줄 수도 있다. 너비는 그리드 컬럼이나 .w- 유틸리티 클래스, 또는 인라인 스타일을 통해 변경해줄 수 있고, 색상은 기본적으로 currentColor를 사용하는데, .bg-색상 클래스로 변경해줄 수도 있다
                                    
                                        
                                    
                                
애니메이션에는 .placeholder-glow/wave 클래스를 사용할 수 있다

                                    
                                        
                                    
                                
스피너 보더
부트스트랩에서 스피너 보더는 스크립트 없이 단지 html과 Css로만 작성하는데, rem 단위 사이즈 및 display: inline-flex;로 빌드된다. 스피너 보더의 형태에는 .spinner-border.spinner-grow가 있고, .spinner-*-sm/lg 클래스를 써서 크기를 설정해줄 수도 있다
                                    
                                        
                                    
                                

접근성을 위해서 각각의 로더에는 role= "status" 코드를 넣어주는 것이 좋고, 더 필요하다면; <span class="visually-hidden">..</span> 코드까지 덧붙여줄 수 있다!

스피너 보더의 색상은 기본적으로 currentColor(부모요소의 색상)으로 빌드되는데, .text-색상.text-bg-색상 클래스를 써서 변경해줄 수도 있다
Loading..
Loading..
                                    
                                        
                                    
                                
프로그레스 바
프로그레스 바는 두 개의 html 요소와 너비 설정을 위한 Css, 약간의 추가적인 속성들로 구성된다. 프로그레스 바를 쌓고, 거기에 애니메이션을 적용하고, 그 위에 텍스트 레이블을 배치해줄 수 있다
프로그레스 바의 높이 및 값 범위를 나타내기 위해 .progress를 래퍼로 사용하는데, 이 래퍼는 role= "progressbar" 속성과 접근을 위한 label 및 접근 가능하게 만드는 aria 속성들(aria-label, aria-labelledby)을 필요로 한다. 그 내부에서 바와 레이블을 위해 .progress-bar를 배치하는데, 색상 및 너비는 인라인 스타일이나 유틸리티 클래스, 또는 사용자정의 Css를 사용하여 설정할 수 있다
height: 50px, width: 25%
                                    
                                        
                                    
                                
프로그레스바의 모양은 .progress-bar 클래스에 .progress-bar-striped.progress-bar-animated 등을 덧붙여서 설정해줄 수 있다
                                    
                                        
                                    
                                
다중/누적 프로그레스바를 위해서는 래퍼로 .progress-stacked 클래스를 사용하는데, 멀티 진행률 표시기에서의 너비는 .progress-bar가 아닌 .progress에서 설정해주어야 한다
                                    
                                        
                                    
                                

* cf) 부트스트랩 5.3)에서는 더 이상 html 5)의 <progress> 태그를 사용하지 않는다. 대신에, 너비를 조정하기 위한 Css와 약간의 속성들을 써서 프로그레스바를 나타낸다. 너비를 지정하기 위한 간편 유틸리티가 새로 도입되었고(.w-), 높이는 .progress에서만 설정하면 내부 프로그레스 바는 그에 맞춰 자동으로 변경된다!

프로그레스 바

플러그인을 사용하면 반응형의 스타일리시한 웹용 진행률 표시기를 쉽게 만들 수 있는데, 애니메이션은 모바일 장치에서도 잘 작동된다!

프로그레스 바
Progress Bar에서는 Line, CircleSemiCircle 등 몇 가지 모양을 기본 제공하는데, 먼저, 스크립트 소스를 불러들여야 한다
[ Progress Bar 스크립트 소스 ]
                                        
                                            <script src="vendors/progressbar/progressbar.js"></script>

                                            <script>
                                                var ProgressBar= require('progressbar.js');

                                                // html에 빈 <div id="container"></div>가 있다고 가정할 때
                                                var bar= new ProgressBar.Line('#container', {easing: 'easeInOut'})
                                                bar.animate(1)  // Value from 0.0 to 1.0
                                            </script>
                                        
                                    
                                    
                                        
                                    
                                

그외에도, 강력한 대화형 차트 작성 및 시각화 라이브러리인 , 의존성 없는 순수 자바스크립트 별표 평가 위젯인 등도 있습니다. 필요해지면; 찾아가보세요..

Focus & Tab

폼 컨트롤, 버튼, 링크과 같은 상호작용 요소는 포커스를 주거나 탭을 통해 이동하는 것이 가능한데, 탐색 포커스 순서는 기본적으로 소스 코드의 눈에 보이는 흐름과 동일하다 html의 tabindex 속성을 써서 실제 탭 순서를 변경하거나 Css의 order 속성 등을 써서 시각적 렌더링 순서를 변경하는 것은 사용자의 접근성에 악영향을 끼칠 수 있으므로 주의해서 사용해야 한다!

탭 인덱스
html 전역 속성인 속성은 어떤 요소에든 추가할 수 있고, 그 요소에 Tab 키를 써서 포커스를 맞출 수 있도록 해준다 - 곧, 기본값인 0 은 요소를 포커스 및 탭 가능하게 만들어 소스코드 순서에 따르는 순차탐색 순서에 추가한다
-1 같은 음수값은 요소에 포커스를 맞출 수는 있지만, 탭할 수는 없다 예컨데, 버튼이나 링크 같은 상호작용 요소에 tabindex 값으로 -1 을 주면; 더 이상 Tab 키는 사용할 수 없게된다!
1 이상 값을 주면; 요소에 포커스 가능하고 탭할 수 있게 되지만, 우선 순위가 지정된 탭 시퀀스에 추가되어 혼란을 줄 수 있으므로 가능하면 피하는 것이 좋다 다시 말해, tabindex를 써서 html 문서의 DOM 트리 순서를 변경하는 것은 좋지 않다!

* cf) 자바스크립트 탭 플러그인이 초기화될 때, 모든 비활성 탭은 tabindex= "-1";로 설정되고, 현재 활성화된 탭만 키보드 포커스를 받게된다. 현재 활성화된 탭에 포커스가 있으면 커서 키가 이전/다음 탭을 활성화하고, HomeEnd 키는 각각 첫 번째 탭과 마지막 탭을 활성화하게 된다. 그에 따라 탭 플러그인이 tabindex 순서를 변경하는데, 커서 키 상호작용과 관련하여 수평/수직 탭 목록을 구분하지는 않는다 탭 목록의 방향에 관계없이 위쪽 및 왼쪽 커서는 모두 이전 탭으로 이동하고, 아래쪽 및 오른쪽 커서는 다음 탭으로 이동한다!

웹 전근성을 위하여 항상 사용자가 포커스가 있는 요소를 알 수 있도록 하고, 모든 뷰포트 크기에서 컨텐츠의 탭 배치 순서가 논리적으로 유지되도록 해야한다 참고로, html DOM의 탭 탐색 순서는 키보드의 Tab(및 Shift+Tab) 키로 확인할 수 있다!

탐색 포커스
요소가 를 받을 때 기본 브라우저 동작은 포커스 링을 표시하는 것인데, 이 포커스 링은 브라우저와 운영체제에 따라 제각각이다. 따라서, 요점은 요소의 기본 스타일과 대비되는 포커스 스타일을 따로 설정해주어야 한다는 것인데, 이를 위해서는 요소에 윤곽선이나 그림자를 설정해주는 것이 일반적이다

여기 마우스를 올리세요.. 그리고 클릭해보세요..

                                    
                                        a:focus {
                                            outline: 3px dotted gray; /* 외곽선 */
                                            outline-offset: 5px; /* 요소로부터 5px만큼 오프셋 거리를 준다 */
                                        }
                                    
                                

이 동작은 css의 :focus, :focus-within, :focus-visible 등의 의사클래스를 써서 변경해줄 수 있다!

요소의 autofocus 속성 및 스크립트의 요소.focus(); 메서드는 페이지가 로드될 때 포커스 가능한 요소에 초점을 맞춰주며, 뷰는 그 위치로 스크롤하여 표시된다 단, 이것이 순차 포커스 탐색 순서를 변경하는 것은 아니다!
                                    
                                        
                                    
                                

이러한 자동 포커스 맞추기는, 일반적으로는 사용자를 혼란스럽게 할 수 있기에 권장되지 않지만, <dialog> 대화상자(예컨대, 모달 대화상자 등) 안에서는 유용하게 사용될 수 있다 - 곧, 대화상자가 열릴 때 곧장 특정 포커서블 요소로 바로 초점을 옮겨주고자할 때이다!


* cf) 폼 컨트롤 요소에 주어지는 속성인 disabled 키워드는 폼 컨트롤에서 포커스와 탭을 비활성화하며, 클릭 이벤트 또한 받지 않는다(더하여, 해당 폼 컨트롤에 강조 색상이 설정되어 있어도 그레이 색상으로 재설정된다!). 한편, 모든 요소에 적용할 수 있는 전역 속성인 inert 키워드는 해당 요소 및 모든 중첩된 컨텐츠에서 포커스를 비활성화하며, 접근성 트리에서도 삭제한다 - 주로 오프스크린 및 숨겨진 컨텐츠 섹션(예컨대, 오프캔버스 서랍 등)에서 사용된다!

브라우저는 로드될 때, 포커스가 맞춰진 요소를 뷰 안으로 스크롤한다. 따라서, 숨겨진 요소에 포커스를 주는 것은 좋지 않다. 포커스가 주어질 때 자동으로 표시되지 않는, 오프스크린에서 렌더링되는 모든 영역은 비활성으로 만들어야 한다!

Table 작성 기본

부트스트랩의 Table은 (타사 위젯을 사용하는)Opt-in으로서, <table> 태그 안에서 .table로 지정해준 다음, 선택적 수정자 클래스 및 사용자 지정 스타일로 확장하게 된다!

테이블 작성하기
테이블의 색상은 table 전체나 각 row마다, 또는 개별 셀마다 각각 설정해줄 수도 있다. 한편, 부트스트랩에서 모든 테이블 스타일은 상속되지 않는다 - 곧, 중첩된 테이블은 독자적으로 스타일을 지정해줄 수 있다
  • .table table-hover (tbody를 대상으로)마우스 hover 상태를 표시한다 반면, (tr이나 셀에서 설정하는).table-active는 활성 상태를 표시한다
  • .table table-striped 테이블 행에 얼룩말 줄무늬를 추가한다 반면, .table table-striped-columns 클래스는 테이블 열에 얼룩말 줄무늬를 추가한다
  • .table table-bordered 테이블에 테두리를 그려준다 반면, .table table-borderless는 테이블의 테두리를 없애준다
  • .table table-색상 색상 테이블 테이블 색상은 (<thead>, <tbody>, <tfoot>)각 그룹별, 행 및 셀별로 각각 설정해줄 수도 있다!
  • .table-group-divider 테이블 그룹들 사이에 두꺼운 테두리를 만든다 Bootstrap v5.3) 버전에서는 (예정되어 있지만)아직 구분선의 색상은 지원하지 않는다!
  • .table table-sm 작은 테이블
# First Last Handle
1 Mark Otto @mdo
2 Jacob Thornton @fat
3 Larry the Bird @twitter
                                    
                                        
                                    
                                
테이블 제목을 나타내는 <caption> .. </caption> 태그는 (어디에 놓여지든 간에)기본적으로 bottom에 배치되는데, .table caption-top 클래스로 상단에 배치해줄 수 있다:
* 테이블 캡션
# First Last Handle
1 Mark Otto @mdo
2 Jacob Thornton @fat
3 Larry the Bird @twitter
footer footer footer footer
                                                    
                                                        
                                                    
                                                

행 및 셀에서의 .table-active 클래스는 활성 상태를 표시한다!

반응형 테이블.table table-responsive로 래핑함으로써 모든 뷰포트에서 쉽게 가로 스크롤을 가능하게 한다. 곧, .table-responsive는 항시 반응형으로 동작하여 가로로 스크롤된다. 한편, .table-responsive-*로 특정 브레이크포인트를 설정해주면; 해당 지점서부터는 반응형 작동을 멈추게 된다!

html 5) Table

Tabel행/열 로 구성된 데이터 집합으로서 표 형식의 데이터인데, 열/행이라는 형식 면에서는 Microsoft Excel을 생각하시면 됩니다 - 모양 면에서는, Word나 Hwp에서 '표 작성'하는 것과 같군요..

표 작성의 기본
<table> 태그 안에서 <tr> 태그로 각 을 만들고, <th>(제목 셀: 셀 중앙에 굵게 표시된다) 및 <td> 태그(<tbody> 영역)로 을 만들어 그 안에 내용을 넣어준다. 나아가, <table> 태그 안에서 <thead>, <tbody>, <tfoot>로 테이블을 구성하면 화면 낭독기 등에 표의 구조를 알려줄 수 있으며, css를 써서 서로 다른 스타일을 적용시키거나 스크립트를 써서 본문 부분만 스크롤되도록 하는 등의 활용이 가능해진다!
1. <td>나 <th> 태그(가로 행) 안에서는 colspan="개수" 속성으로 열 방향으로, rowspan="개수" 속성으로 행 방향으로 열 및 행을 합쳐줄 수 있다 제목이 길어 축약이 필요하다면; 제목 행인 <th> 태그에서 abbr 속성을 사용하면 된다!
2. <colgroup>(과 <col>) 태그(세로 열)는 열 스타일을 정의하는데, <caption> 태그 뒤, <tr> 및 <td> 태그 전에 사용되어 <col> 태그를 넣은 순서대로 한 열에 있는 모든 셀에 같은 스타일을 적용하는데, 하나의 <col>만 넣으면 첫번째 열에만 적용되며, <col> 태그의 span 속성을 이용해 둘 이상의 열을 함께 묶어줄 수도 있다 단, <thead>와 <tfoot>는 제외한 <tbody>에만 적용된다!
3. 표에 제목을 달아주려면; <table> 태그 시작 부분에 작성해주면 되고, <figure> 태그로 <table> 태그를 둘러싼 뒤 <figcaption> 태그로 <table> 태그의 바깥쪽 바로 위나 밑에 표 설명을 배치해줄 수도 있다

* 부트스트랩의 Css를 사용하는 경우; html 기본 표 스타일과 그 모양 및 형태에서 많은 부분 다르니 참고하십시오 - 부트스트랩에서는 부트스트랩 자체 규격으로 표 스타일을 재정의해서 사용하는 때문입니다(여기도 또한 그렇습니다 ㅡㅡ;)

표 제목: <caption>은 table 태그 시작 부분에 넣어준다
thead: th 1 thead: th 2 thead: th 3 thead: th 4
tbody 1행 td 2->행 방향으로 합침: rowspan=2 td 3 td 4
tbody 2행 td 3->열 방향으로 합침: colspan=2
tbody 3행 td 2 td 3 td 4
tfoot: th 1 tfoot: th 2 tfoot: th 3 tfoot: th 4
* 표 설명: <figcaption>은 <figure> 태그 안에서 맨 위나 맨 밑에 붙여줄 수 있다
                                                    
                                                        
                                                    
                                                

위 코드에서 <thead>나 <tfoot> 내부 <th scope="row/col"> .. </th> 부분은 이 th가 행의 제목(row)인지, 열의 제목(col)인지를 스크린리더기 등에 알려주는 역할을 합니다

                                                    
                                                        table, th, td {
                                                            padding: 15px;
                                                            border: 1px solid #000000; border-collapse: collapse;
                                                        } th, td { width: 120px; }

                                                        thead, tfoot { background: #eeeeee; }
                                                    
                                                

테이블에서 셀의 너비나 높이는 표의 크기 및 셀 안의 내용에 맞추어 자동 설정된다. 하지만, css의 width, height, padding 속성을 써서 셀의 너비와 높이, 여백을 수동으로 지정해줄 수도 있다

  • caption-side: top/bottom; // 캡션의 배치위치 - 캡션은 <table> 바로 아래서 쓰여 표 위(top)나 아래(bottom) 중앙에 표 제목을 달아준다 캡션은 접근성을 위해 달아주는 것이 좋지만, 외관상 문제가 된다면; css를 써서 보이지않게 해줄 수도 있다!
  • border-collapse: separate/collapse; // css로 표의 테두리를 표시하는 경우 표 테두리와 셀 테두리를 각각 지정하게 되는데, 이 때 collapse 값을 넣어서 표와 셀의 테두리간 겹치는 부분을 하나로 합쳐줄 수 있다
  • border-spacing: 수평거리[ 수직거리]; // 테이블 테두리와 셀 테두리가 분리되어 있는 경우; 인접한 셀 테두리간 거리를 지정한다 수평/수직 같은 값으로 하나만 주거나 수평거리 수직거리 각각 줄 수도 있다
  • empty-cells: show/hide; // 빈 셀의 테두리를 그리지 않고 비워줄 때 사용한다
  • text-align: left/center/right; // 셀 안에서 내용물의 수평 정렬을 지정한다
  • vertical-align: top/middle/bottom/baseline; // 셀 안에서 내용물의 수직 정렬을 지정한다 baseline은 셀의 기준선에 내용의 기준선을 맞춘다
  • table-layout: fixed; // 셀의 너비를 고정한다

테이블과 셀의 크기가 주어진 상태에서 <table> 태그에 fixed 속성을 주면; 셀의 너비가 고정되는 반면, 셀 너비보다 긴 내용은 셀 바깥으로 밀려나게 된다 하지만, css를 써서 word-break: break-all;(셀 너비보다 긴 내용도 셀 안에 표시한다) 속성과 height: auto; 속성을 함께 지정해주어 셀 내용을 다 표시하도록 해줄 수도 있다!

wave