diff options
author | SeulGi Choi(Chase) <cs09gi@gmail.com> | 2021-10-11 20:46:13 +0900 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-10-11 20:46:13 +0900 |
commit | f554df5a292ace5cc0daea0b9eb1ef038e3e7da5 (patch) | |
tree | 613f8fa660bb9c2431d4ff057d1e6ad9c0e5b67c /files/ko | |
parent | 4756692630cd877d81adf15147847ecb59e31edf (diff) | |
download | translated-content-f554df5a292ace5cc0daea0b9eb1ef038e3e7da5.tar.gz translated-content-f554df5a292ace5cc0daea0b9eb1ef038e3e7da5.tar.bz2 translated-content-f554df5a292ace5cc0daea0b9eb1ef038e3e7da5.zip |
l10n: add getClientRects for ko (#2480)
Diffstat (limited to 'files/ko')
-rw-r--r-- | files/ko/web/api/element/getclientrects/index.md | 218 |
1 files changed, 218 insertions, 0 deletions
diff --git a/files/ko/web/api/element/getclientrects/index.md b/files/ko/web/api/element/getclientrects/index.md new file mode 100644 index 0000000000..19f1268835 --- /dev/null +++ b/files/ko/web/api/element/getclientrects/index.md @@ -0,0 +1,218 @@ +--- +title: Element.getClientRects() +slug: Web/API/Element/getClientRects +tags: + - API + - CSSOM View + - Element + - Method + - Reference + - clientHeight + - getBoundingClientRect + - getClientRects + - offsetHeight + - scrollHeight +browser-compat: api.Element.getClientRects +--- +{{APIRef("DOM")}} + +{{domxref("Element")}} 인터페이스의 **`getClientRects()`** 메서드는 클라이언트에 있는 각 [CSS 테두리 박스](/en-US/docs/Web/CSS/CSS_Box_Model/Introduction_to_the_CSS_box_model)에 대한 경계 사각형을 나타내는 {{DOMxRef("DOMRect")}} 객체의 컬렉션을 반환합니다. + +대부분의 엘리먼트는 각각 하나의 border box만을 갖지만, 여러 줄의 [인라인 엘리먼트](/en-US/docs/Web/HTML/Inline_elements)(예를 들면, 여러 줄의 {{HTMLElement("span")}} 엘리먼트)는 각각의 줄을 감싸는 테두리 박스를 갖습니다. + +## 구문 + +```js +let rectCollection = object.getClientRects(); +``` + +### 반환 값 + +반환 값은 각 엘리먼트와 관계된 CSS 테두리 박스인 {{DOMxRef("DOMRect")}} 객체의 컬렉션입니다. 각각의 {{DOMxRef("DOMRect")}} 객체는 뷰포트의 top-left에 상대적인 top-left인 픽셀 단위의 테두리 박스를 나타내는 읽기 전용 `left`, `top`, `right`, `bottom` 프로퍼티를 갖습니다. 캡션이 있는 테이블의 경우, 캡션이 테이블의 테두리 영역 밖에 있더라도 포함됩니다. 외부-`<svg>` 이외의 SVG 엘리먼트에서 호출될 때, 결과 사각형이 상대적인 "뷰포트"는 엘리먼트의 외부-`<svg>`가 설정하는 뷰포트입니다(명확히 하자면, 사각형은 외부-`<svg>`의 `viewBox` transform이 존재할 경우, 이에 의해 변형되기도 합니다). + +원래 Microsoft는 각각의 텍스트 _줄_ 에 대한 `TextRectangle` 객체를 반환하기 위해 이 메서드를 만들었습니다. 하지만 CSSOM 작업 초안은 이 메서드가 각각의 _테두리 박스_ 에 대한 {{DOMxRef("DOMRect")}}를 반환하도록 명세합니다. 인라인 엘리먼트의 경우 두 정의가 동일합니다. 하지만 블록 엘리먼트의 경우 Mozilla는 단 하나의 사각형만 반환합니다. + +{{Fx_MinVersion_Note(3.5, "Firefox 3.5는 <code>width</code>와 <code>height</code> 프로퍼티를 <code>TextRectangle</code> 객체에 추가합니다.")}} + +뷰포트 영역(또는 기타 스크롤 가능한 엘리먼트)에서 수행된 스크롤 양은 사각형을 계산할 때 고려됩니다. + +반환된 사각형은 오버플로우가 발생할 수도 있는 모든 하위 엘리먼트의 경계를 포함하지 않습니다. + +HTML {{HtmlElement("area")}} 엘리먼트, 스스로는 어떠한 것도 렌더링 하지 않는 SVG 엘리먼트, `display:none` 엘리먼트 및 일반적으로 직접 렌더링 되지 않는 엘리먼트의 경우, 빈 목록이 반환됩니다. + +테두리 박스가 비어있는 CSS 박스의 경우에도 사각형은 반환됩니다. `left`, `top`, `right`, `bottom` 좌표는 여전히 의미가 있습니다. + +소수점 단위의 픽셀 오프셋도 가능합니다. + +## 예제 + +다음 예제들은 다양한 색상으로 클라이언트 사각형을 그립니다. 클라이언트 사각형을 칠하는 JavaScript 함수는 `withClientRectsOverlay` 클래스를 통해 마크업과 연결되어 있음을 참고하세요. + +### HTML + +예제 1: 다음 HTML은 세 개의 단락을 생성합니다. 각각은 `<div>` 블록 안에 있고, `<span>`을 안쪽에 포함하고 있습니다. 클라이언트 사각형은 두 번째 블록의 단락과 세 번째 블록의 `<span>` 엘리먼트를 칠합니다. + +```html +<h3>span을 안쪽에 포함하는 단락</h3> +<p>span과 단락 모두 테두리가 설정되어 있습니다. 클라이언트 사각형은 빨간색입니다. p는 단 하나의 테두리 박스를 갖는 반면 span은 여러 테두리 박스를 갖는다는 점을 유의하세요.</p> + +<div> + <strong>원본</strong> + <p> + <span>여러 줄에 걸쳐있는 단락</span> + </p> +</div> + +<div> + <strong>p의 사각형</strong> + <p class="withClientRectsOverlay"> + <span>여러 줄에 걸쳐있는 단락</span> + </p> +</div> + +<div> + <strong>span의 사각형</strong> + <p> + <span class="withClientRectsOverlay">여러 줄에 걸쳐있는 단락</span> + </p> +</div> +``` + +예제 2: 다음 HTML은 세 개의 정렬된 목록을 생성합니다. 클라이언트 사각형은 두 번째 블록의 `<ol>`, 세 번째 블록의 각 `<li>` 엘리먼트를 칠합니다. + +```html +<h3>목록</h3> +<p>테두리 박스는 숫자를 포함하지 않으므로 클라이언트 사각형에 대해서도 숫자를 포함하지 않음을 유의하세요.</p> + +<div> + <strong>원본</strong> + <ol> + <li>Item 1</li> + <li>Item 2</li> + </ol> +</div> + +<div> + <strong>ol의 사각형</strong> + <ol class="withClientRectsOverlay"> + <li>Item 1</li> + <li>Item 2</li> + </ol> +</div> + +<div> + <strong>각 li의 사각형</strong> + <ol> + <li class="withClientRectsOverlay">Item 1</li> + <li class="withClientRectsOverlay">Item 2</li> + </ol> +</div> +``` + +예제 3: 다음 HTML은 캡션을 갖는 두 개의 테이블을 생성합니다. 클라이언트 사각형은 두 번째 블록의 `<table>`을 칠합니다. + +```html +<h3>캡션을 갖는 테이블</h3> +<p>테이블의 테두리 박스가 캡션을 포함하지는 않지만, 클라이언트 사각형은 캡션을 포함합니다.</p> + +<div> + <strong>원본</strong> + <table> + <caption>캡션</caption> + <thead> + <tr><th>thead</th></tr> + </thead> + <tbody> + <tr><td>tbody</td></tr> + </tbody> + </table> +</div> + +<div> + <strong>table의 사각형</strong> + <table class="withClientRectsOverlay"> + <caption>캡션</caption> + <thead> + <tr><th>thead</th></tr> + </thead> + <tbody> + <tr><td>tbody</td></tr> + </tbody> + </table> +</div> +``` + +### CSS + +CSS는 첫 번째 예제에서 각 `<div>` 블록 안쪽의 `<span>`과 문단을 감싸는 테두리를, 두 번째 예제에서 `<ol>`과 `<li>`를 감싸는 테두리를, 세 번째 예제에서 `<table>`, `<th>`, `<td>` 엘리먼트를 감싸는 테두리를 그립니다. + +```css +strong { + text-align: center; +} +div { + display: inline-block; + width: 150px; +} +div p, ol, table { + border: 1px solid blue; +} +span, li, th, td { + border: 1px solid green; +} +``` + +### JavaScript + +JavaScript 코드는 `withClientRectsOverlay` CSS 클래스가 할당된 모든 HTML 엘리먼트에 대해 클라이언트 사각형을 그립니다. + +```js +function addClientRectsOverlay(elt) { + /* 각 클라이언트 사각형에서 div를 절대적으로 배치하였기 때문에 div의 테두리 너비는 사각형의 너비와 동일합니다. + Note: 유저가 크기를 조정하거나 확대/축소하는 경우 오버레이가 제 위치를 벗어날 수 있습니다. */ + var rects = elt.getClientRects(); + for (var i = 0; i != rects.length; i++) { + var rect = rects[i]; + var tableRectDiv = document.createElement('div'); + tableRectDiv.style.position = 'absolute'; + tableRectDiv.style.border = '1px solid red'; + var scrollTop = document.documentElement.scrollTop || document.body.scrollTop; + var scrollLeft = document.documentElement.scrollLeft || document.body.scrollLeft; + tableRectDiv.style.margin = tableRectDiv.style.padding = '0'; + tableRectDiv.style.top = (rect.top + scrollTop) + 'px'; + tableRectDiv.style.left = (rect.left + scrollLeft) + 'px'; + // rect.width가 테두리 너비가 되어야 하므로 콘텐츠 너비는 2px 더 작습니다. + tableRectDiv.style.width = (rect.width - 2) + 'px'; + tableRectDiv.style.height = (rect.height - 2) + 'px'; + document.body.appendChild(tableRectDiv); + } +} + +(function() { + /* "withClientRectsOverlay" 클래스가 할당된 모든 엘리먼트에 대해 addClientRectsOverlay(elt) 함수를 호출합니다 */ + var elt = document.getElementsByClassName('withClientRectsOverlay'); + for (var i = 0; i < elt.length; i++) { + addClientRectsOverlay(elt[i]); + } +})(); +``` + +### 결과 + +{{EmbedLiveSample('예제', 680, 650)}} + +## 명세 + +{{Specifications}} + +### 노트 + +`getClientRects()`는 MS IE DHTML 객체 모델에서 처음으로 소개되었습니다. + +## 브라우저 호환성 + +{{Compat}} + +## 같이 보기 + +- {{DOMxRef("Element.getBoundingClientRect()")}} |