툴팁
애니메이션용 CSS3 및 로컬 타이틀 저장용 data-bs-attributes를 사용하여 CSS 및 JavaScript로 사용자 정의 부트스트랩 툴팁을 추가하기 위한 문서 및 예제입니다.
개요
툴팁 플러그인을 사용할 때 알아야 할 사항:
- 툴팁은 위치 지정을 위해 타사 라이브러리 Popper 에 의존합니다 . 전에 popper.min.js 를 포함
bootstrap.js
하거나bootstrap.bundle.min.js
Popper가 포함된 것을 사용해야 합니다. - 툴팁은 성능상의 이유로 선택되어 있으므로 직접 초기화해야 합니다 .
- 길이가 0인 제목이 있는 도구 설명은 표시되지 않습니다.
container: 'body'
더 복잡한 구성 요소(예: 입력 그룹, 버튼 그룹 등)에서 렌더링 문제를 방지하려면 지정 합니다.- 숨겨진 요소에 대한 툴팁 트리거는 작동하지 않습니다.
.disabled
또는 요소 에 대한 도구 설명disabled
은 래퍼 요소에서 트리거되어야 합니다.- 여러 줄에 걸쳐 있는 하이퍼링크에서 트리거되면 도구 설명이 중앙에 표시됩니다. 이 동작을 방지 하려면
white-space: nowrap;
에 사용하십시오.<a>
- 도구 설명은 해당 요소가 DOM에서 제거되기 전에 숨겨야 합니다.
- Shadow DOM 내부의 요소 덕분에 툴팁이 트리거될 수 있습니다.
다 알아? 좋습니다. 몇 가지 예를 들어 어떻게 작동하는지 봅시다.
prefers-reduced-motion
미디어 쿼리에 따라 다릅니다. 접근성 설명서의 감소된 동작 섹션을 참조하십시오
.
예
툴팁 활성화
위에서 언급했듯이 도구 설명을 사용하려면 먼저 초기화해야 합니다. 페이지의 모든 툴팁을 초기화하는 한 가지 방법은 다음 data-bs-toggle
과 같이 속성별로 선택하는 것입니다.
const tooltipTriggerList = document.querySelectorAll('[data-bs-toggle="tooltip"]')
const tooltipList = [...tooltipTriggerList].map(tooltipTriggerEl => new bootstrap.Tooltip(tooltipTriggerEl))
링크에 대한 툴팁
툴팁을 보려면 아래 링크 위로 마우스를 가져갑니다.
도구 설명이 있는 일부 인라인 링크 를 보여 주는 자리 표시자 텍스트 . 이것은 이제 킬러가 아닌 필러일 뿐입니다. 실제 텍스트 의 존재를 모방하기 위해 여기에 배치된 콘텐츠 입니다. 그리고 이 모든 것은 실제 상황에서 도구 설명을 사용할 때 어떻게 보일지 알려드리기 위한 것입니다. 따라서 링크에 대한 이러한 도구 설명을 자신의 사이트나 프로젝트 에서 사용한 후 실제로 어떻게 작동하는지 보았 기를 바랍니다.
<p class="muted">Placeholder text to demonstrate some <a href="#" data-bs-toggle="tooltip" data-bs-title="Default tooltip">inline links</a> with tooltips. This is now just filler, no killer. Content placed here just to mimic the presence of <a href="#" data-bs-toggle="tooltip" data-bs-title="Another tooltip">real text</a>. And all that just to give you an idea of how tooltips would look when used in real-world situations. So hopefully you've now seen how <a href="#" data-bs-toggle="tooltip" data-bs-title="Another one here too">these tooltips on links</a> can work in practice, once you use them on <a href="#" data-bs-toggle="tooltip" data-bs-title="The last tip!">your own</a> site or project.
</p>
title
하십시오
. data-bs-title
가 사용 되면
Popper는 요소가 렌더링될 때
title
자동으로 대체합니다
.data-bs-title
사용자 정의 도구 설명
v5.2.0에 추가됨CSS 변수 를 사용하여 도구 설명의 모양을 사용자 정의할 수 있습니다 . data-bs-custom-class="custom-tooltip"
사용자 정의 모양의 범위를 지정하고 로컬 CSS 변수를 재정의하는 데 사용하기 위해 사용자 정의 클래스를 설정 합니다.
.custom-tooltip {
--bs-tooltip-bg: var(--bs-primary);
}
<button type="button" class="btn btn-secondary"
data-bs-toggle="tooltip" data-bs-placement="top"
data-bs-custom-class="custom-tooltip"
data-bs-title="This top tooltip is themed via CSS variables.">
Custom tooltip
</button>
지도
아래 버튼 위로 마우스를 가져가면 위쪽, 오른쪽, 아래쪽 및 왼쪽의 4가지 도구 설명 방향이 표시됩니다. RTL에서 부트스트랩을 사용할 때 방향이 미러링됩니다.
<button type="button" class="btn btn-secondary" data-bs-toggle="tooltip" data-bs-placement="top" data-bs-title="Tooltip on top">
Tooltip on top
</button>
<button type="button" class="btn btn-secondary" data-bs-toggle="tooltip" data-bs-placement="right" data-bs-title="Tooltip on right">
Tooltip on right
</button>
<button type="button" class="btn btn-secondary" data-bs-toggle="tooltip" data-bs-placement="bottom" data-bs-title="Tooltip on bottom">
Tooltip on bottom
</button>
<button type="button" class="btn btn-secondary" data-bs-toggle="tooltip" data-bs-placement="left" data-bs-title="Tooltip on left">
Tooltip on left
</button>
추가된 사용자 정의 HTML:
<button type="button" class="btn btn-secondary" data-bs-toggle="tooltip" data-bs-html="true" data-bs-title="<em>Tooltip</em> <u>with</u> <b>HTML</b>">
Tooltip with HTML
</button>
SVG 사용:
CSS
변수
v5.2.0에 추가됨Bootstrap의 진화하는 CSS 변수 접근 방식의 일부로 이제 툴팁 .tooltip
은 향상된 실시간 사용자 정의를 위해 로컬 CSS 변수를 사용합니다. CSS 변수의 값은 Sass를 통해 설정되므로 Sass 사용자 정의도 계속 지원됩니다.
--#{$prefix}tooltip-zindex: #{$zindex-tooltip};
--#{$prefix}tooltip-max-width: #{$tooltip-max-width};
--#{$prefix}tooltip-padding-x: #{$tooltip-padding-x};
--#{$prefix}tooltip-padding-y: #{$tooltip-padding-y};
--#{$prefix}tooltip-margin: #{$tooltip-margin};
@include rfs($tooltip-font-size, --#{$prefix}tooltip-font-size);
--#{$prefix}tooltip-color: #{$tooltip-color};
--#{$prefix}tooltip-bg: #{$tooltip-bg};
--#{$prefix}tooltip-border-radius: #{$tooltip-border-radius};
--#{$prefix}tooltip-opacity: #{$tooltip-opacity};
--#{$prefix}tooltip-arrow-width: #{$tooltip-arrow-width};
--#{$prefix}tooltip-arrow-height: #{$tooltip-arrow-height};
Sass 변수
$tooltip-font-size: $font-size-sm;
$tooltip-max-width: 200px;
$tooltip-color: $white;
$tooltip-bg: $black;
$tooltip-border-radius: $border-radius;
$tooltip-opacity: .9;
$tooltip-padding-y: $spacer * .25;
$tooltip-padding-x: $spacer * .5;
$tooltip-margin: null; // TODO: remove this in v6
$tooltip-arrow-width: .8rem;
$tooltip-arrow-height: .4rem;
// fusv-disable
$tooltip-arrow-color: null; // Deprecated in Bootstrap 5.2.0 for CSS variables
// fusv-enable
용법
툴팁 플러그인은 요청 시 콘텐츠와 마크업을 생성하고 기본적으로 트리거 요소 뒤에 툴팁을 배치합니다.
JavaScript를 통해 도구 설명을 트리거합니다.
const exampleEl = document.getElementById('example')
const tooltip = new bootstrap.Tooltip(exampleEl, options)
오버플 auto
로 및scroll
도구 설명 위치는 상위 컨테이너 가 우리와 같 overflow: auto
거나 overflow: scroll
같을 때 자동으로 변경하려고 시도 .table-responsive
하지만 여전히 원래 배치의 위치를 유지합니다. 이 문제를 해결하려면 boundary
옵션 (옵션을 사용하는 반전 수정 자용)을 HTMLElement로 설정하여 다음 과 같은 popperConfig
기본값을 재정의합니다 .'clippingParents'
document.body
const tooltip = new bootstrap.Tooltip('#example', {
boundary: document.body // or document.querySelector('#boundary')
})
마크업
툴팁에 필요한 마크업은 data
속성 일 뿐이며 툴팁 title
을 갖고자 하는 HTML 요소에 있습니다. top
툴팁의 생성된 마크업은 위치가 필요하지만(기본적으로 플러그인에 의해 설정됨) 다소 간단합니다 .
키보드 및 보조 기술 사용자를 위한 도구 설명 만들기
전통적으로 키보드에 초점을 맞출 수 있고 대화형인 HTML 요소(예: 링크 또는 양식 컨트롤)에만 도구 설명을 추가해야 합니다. 속성을 추가하여 임의의 HTML 요소(예: <span>
s)에 초점을 맞출 수 있지만 tabindex="0"
, 이는 키보드 사용자를 위해 비대화형 요소에 잠재적으로 성가시고 혼란스러운 탭 정지를 추가하며 현재 대부분의 보조 기술은 이 상황에서 툴팁을 알리지 않습니다. 또한 도구 설명에 대한 트리거로 전적으로 의존하지 마십시오. hover
그러면 도구 설명이 키보드 사용자에게 트리거되지 않을 수 있습니다.
<!-- HTML to write -->
<a href="#" data-bs-toggle="tooltip" data-bs-title="Some tooltip text!">Hover over me</a>
<!-- Generated markup by the plugin -->
<div class="tooltip bs-tooltip-top" role="tooltip">
<div class="tooltip-arrow"></div>
<div class="tooltip-inner">
Some tooltip text!
</div>
</div>
장애인 요소
속성이 있는 요소는 disabled
대화형이 아니므로 사용자가 초점을 맞추거나 마우스를 올리거나 클릭하여 도구 설명(또는 팝오버)을 트리거할 수 없습니다. 이 문제를 해결하려면 래퍼에서 툴팁을 트리거 <div>
하거나 <span>
을 사용하여 이상적으로는 키보드에 초점을 맞출 수 tabindex="0"
있습니다.
<span class="d-inline-block" tabindex="0" data-bs-toggle="tooltip" data-bs-title="Disabled tooltip">
<button class="btn btn-primary" type="button" disabled>Disabled button</button>
</span>
옵션
옵션은 데이터 속성이나 JavaScript를 통해 전달할 수 있으므로 에서 data-bs-
와 같이 옵션 이름을 에 추가할 수 있습니다 data-bs-animation="{value}"
. 데이터 속성을 통해 옵션을 전달할 때 옵션 이름의 대소문자 유형을 " camelCase "에서 " kebab-case "로 변경해야 합니다. 예를 들어, data-bs-custom-class="beautifier"
대신 를 사용 data-bs-customClass="beautifier"
하십시오.
Bootstrap 5.2.0부터 모든 구성 요소 는 JSON 문자열로 간단한 구성 요소 구성을 수용할 수 있는 실험적 으로 예약된 데이터 속성 을 지원합니다. data-bs-config
요소에 data-bs-config='{"delay":0, "title":123}'
및 data-bs-title="456"
속성이 있는 경우 최종 title
값은 456
이고 별도의 데이터 속성은 에 제공된 값을 재정의합니다 data-bs-config
. 또한 기존 데이터 속성은 와 같은 JSON 값을 저장할 수 data-bs-delay='{"show":0,"hide":150}'
있습니다.
sanitize
,
sanitizeFn
및
allowList
옵션을 제공할 수 없습니다.
이름 | 유형 | 기본 | 설명 |
---|---|---|---|
allowList |
물체 | 기본값 | 허용된 속성 및 태그가 포함된 개체입니다. |
animation |
부울 | true |
툴팁에 CSS 페이드 전환을 적용합니다. |
boundary |
문자열, 요소 | 'clippingParents' |
툴팁의 오버플로 제약 조건 경계(Popper의 preventOverflow 수정자에만 적용됨). 기본적으로 'clippingParents' HTMLElement 참조를 허용하고 허용할 수 있습니다(JavaScript를 통해서만). 자세한 내용은 Popper의 detectOverflow 문서 를 참조하십시오 . |
container |
문자열, 요소, 거짓 | false |
특정 요소에 도구 설명을 추가합니다. 예: container: 'body' . 이 옵션은 문서의 흐름에서 트리거 요소 근처에 도구 설명을 배치할 수 있다는 점에서 특히 유용합니다. 이렇게 하면 창 크기 조정 중에 도구 설명이 트리거 요소에서 멀어지는 것을 방지할 수 있습니다. |
customClass |
문자열, 함수 | '' |
도구 설명이 표시되면 클래스를 추가합니다. 이러한 클래스는 템플릿에 지정된 클래스 외에 추가됩니다. 여러 클래스를 추가하려면 공백으로 구분합니다 'class-1 class-2' . 추가 클래스 이름을 포함하는 단일 문자열을 반환해야 하는 함수를 전달할 수도 있습니다. |
delay |
숫자, 개체 | 0 |
도구 설명 표시 및 숨기기 지연(ms) - 수동 트리거 유형에는 적용되지 않습니다. 숫자가 제공되면 숨기기/표시 모두에 지연이 적용됩니다. 개체 구조: delay: { "show": 500, "hide": 100 } . |
fallbackPlacements |
정렬 | ['top', 'right', 'bottom', 'left'] |
배열의 게재위치 목록을 제공하여 대체 게재위치를 정의합니다(선호도 순서대로). 자세한 내용은 Popper의 행동 문서 를 참조하십시오 . |
html |
부울 | false |
툴팁에서 HTML을 허용합니다. true인 경우 툴팁의 HTML 태그가 툴팁 title 에 렌더링됩니다. false인 경우 innerText 속성을 사용하여 DOM에 콘텐츠를 삽입합니다. XSS 공격이 걱정된다면 텍스트를 사용하세요. |
offset |
배열, 문자열, 함수 | [0, 0] |
대상을 기준으로 한 도구 설명의 오프셋입니다. 다음과 같이 쉼표로 구분된 값을 사용하여 데이터 속성의 문자열을 전달할 수 있습니다 data-bs-offset="10,20" . 오프셋을 결정하는 데 함수가 사용되면 포퍼 배치, 참조 및 포퍼 사각형을 첫 번째 인수로 포함하는 객체와 함께 호출됩니다. 트리거 요소 DOM 노드는 두 번째 인수로 전달됩니다. 함수는 두 개의 숫자( skidding , distance ) 가 있는 배열을 반환해야 합니다 . 자세한 내용은 Popper의 오프셋 문서 를 참조하십시오 . |
placement |
문자열, 함수 | 'top' |
툴팁 위치 지정 방법: 자동, 위, 아래, 왼쪽, 오른쪽. 가 지정 되면 auto 툴팁의 방향이 동적으로 변경됩니다. 배치를 결정하는 데 함수가 사용되면 도구 설명 DOM 노드를 첫 번째 인수로 사용하고 트리거 요소 DOM 노드를 두 번째 인수로 사용하여 호출됩니다. 컨텍스트 는 this 도구 설명 인스턴스로 설정됩니다. |
popperConfig |
null, 객체, 함수 | null |
Bootstrap의 기본 Popper 구성을 변경하려면 Popper의 구성 을 참조하십시오 . 함수가 Popper 구성을 생성하는 데 사용되면 Bootstrap의 기본 Popper 구성을 포함하는 객체와 함께 호출됩니다. 기본값을 사용하고 고유한 구성과 병합하는 데 도움이 됩니다. 함수는 Popper에 대한 구성 개체를 반환해야 합니다. |
sanitize |
부울 | true |
살균을 활성화하거나 비활성화합니다. 활성화 'template' 되면 옵션 'content' 이 'title' 삭제됩니다. |
sanitizeFn |
널, 함수 | null |
여기에서 자신만의 살균 기능을 제공할 수 있습니다. 이는 삭제를 수행하기 위해 전용 라이브러리를 사용하려는 경우에 유용할 수 있습니다. |
selector |
문자열, 거짓 | false |
선택기가 제공되면 도구 설명 개체가 지정된 대상에 위임됩니다. 실제로 이것은 동적으로 추가된 DOM 요소( jQuery.on 지원)에 툴팁을 적용하는 데에도 사용됩니다. 이 문제 와 유익한 예를 참조하십시오 . |
template |
끈 | '<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>' |
도구 설명을 만들 때 사용할 기본 HTML입니다. 툴팁 title 이 에 주입됩니다 .tooltip-inner . .tooltip-arrow 툴팁의 화살표가 됩니다. 가장 바깥쪽 래퍼 요소에는 .tooltip 클래스 및 role="tooltip" . |
title |
문자열, 요소, 함수 | '' |
title 속성이 없는 경우 기본 제목 값 입니다. 함수가 주어지면 this 팝오버가 연결된 요소로 설정된 참조로 호출됩니다. |
trigger |
끈 | 'hover focus' |
툴팁이 트리거되는 방법: 클릭, 호버, 포커스, 수동. 여러 트리거를 전달할 수 있습니다. 공백으로 구분하십시오. 도구 설명이 , 및 메서드 'manual' 를 통해 프로그래밍 방식으로 트리거됨을 나타냅니다 . 이 값은 다른 트리거와 결합할 수 없습니다. 그 자체로는 키보드를 통해 트리거할 수 없는 도구 설명이 나타나며 키보드 사용자에게 동일한 정보를 전달하는 대체 방법이 있는 경우에만 사용해야 합니다..tooltip('show') .tooltip('hide') .tooltip('toggle') 'hover' |
기능 사용popperConfig
const tooltip = new bootstrap.Tooltip(element, {
popperConfig(defaultBsPopperConfig) {
// const newPopperConfig = {...}
// use defaultBsPopperConfig if needed...
// return newPopperConfig
}
})
행동 양식
비동기식 메서드 및 전환
모든 API 메서드는 비동기식 이며 전환 을 시작합니다 . 전환이 시작되자마자 그러나 끝나기 전에 호출자에게 돌아갑니다 . 또한 전환 구성 요소에 대한 메서드 호출은 무시 됩니다.
방법 | 설명 |
---|---|
disable |
요소의 툴팁이 표시되는 기능을 제거합니다. 툴팁은 다시 활성화된 경우에만 표시될 수 있습니다. |
dispose |
요소의 툴팁을 숨기고 삭제합니다(DOM 요소에 저장된 데이터 제거). 위임을 사용하는 도구 설명( 옵션 을 사용 하여selector 생성됨 )은 하위 트리거 요소에서 개별적으로 제거할 수 없습니다. |
enable |
요소의 툴팁에 표시할 수 있는 기능을 제공합니다. 도구 설명은 기본적으로 활성화되어 있습니다. |
getInstance |
DOM 요소와 연결된 도구 설명 인스턴스를 가져오거나 초기화되지 않은 경우 새 인스턴스를 만들 수 있는 정적 메서드입니다. |
getOrCreateInstance |
DOM 요소와 연결된 도구 설명 인스턴스를 가져오거나 초기화되지 않은 경우 새 인스턴스를 만들 수 있는 정적 메서드입니다. |
hide |
요소의 툴팁을 숨깁니다. 툴팁이 실제로 숨겨 지기 전에(즉, hidden.bs.tooltip 이벤트가 발생하기 전에) 호출자에게 반환됩니다. 이것은 툴팁의 "수동" 트리거로 간주됩니다. |
setContent |
초기화 후 도구 설명의 내용을 변경하는 방법을 제공합니다. |
show |
요소의 툴팁을 표시합니다. 툴팁이 실제로 표시 되기 전에(즉, shown.bs.tooltip 이벤트가 발생하기 전에) 호출자에게 반환합니다. 이것은 툴팁의 "수동" 트리거로 간주됩니다. 길이가 0인 제목이 있는 도구 설명은 표시되지 않습니다. |
toggle |
요소의 툴팁을 토글합니다. 툴팁이 실제로 표시되거나 숨겨 지기 전에(즉, shown.bs.tooltip 또는 hidden.bs.tooltip 이벤트가 발생하기 전에) 호출자에게 반환됩니다. 이것은 툴팁의 "수동" 트리거로 간주됩니다. |
toggleEnabled |
요소의 툴팁을 표시하거나 숨길 수 있는 기능을 토글합니다. |
update |
요소의 툴팁 위치를 업데이트합니다. |
const tooltip = bootstrap.Tooltip.getInstance('#example') // Returns a Bootstrap tooltip instance
// setContent example
tooltip.setContent({ '.tooltip-inner': 'another title' })
setContent
메서드는
object
인수를 허용합니다. 여기서 각 속성 키는
string
팝오버 템플릿 내에서 유효한 선택기이고 관련된 각 속성 값은
string
|
element
|
function
|
null
이벤트
이벤트 | 설명 |
---|---|
hide.bs.tooltip |
hide 이 이벤트는 인스턴스 메서드가 호출 되면 즉시 시작됩니다 . |
hidden.bs.tooltip |
이 이벤트는 팝오버가 사용자에게 숨겨지면 시작됩니다(CSS 전환이 완료될 때까지 기다림). |
inserted.bs.tooltip |
이 이벤트는 show.bs.tooltip 툴팁 템플릿이 DOM에 추가되었을 때 이벤트 후에 시작됩니다. |
show.bs.tooltip |
show 이 이벤트는 인스턴스 메서드가 호출 되면 즉시 발생합니다 . |
shown.bs.tooltip |
이 이벤트는 팝오버가 사용자에게 표시되면 시작됩니다(CSS 전환이 완료될 때까지 기다림). |
const myTooltipEl = document.getElementById('myTooltip')
const tooltip = bootstrap.Tooltip.getOrCreateInstance(myTooltipEl)
myTooltipEl.addEventListener('hidden.bs.tooltip', () => {
// do something...
})
tooltip.hide()