평균 문자 너비는 어떻게 계산됩니까?

로랑 돈트

에 따르면 HTML 사양 , COLS는 지정을 한 줄에 문자의 예상 최대 수 때문이다.

사용 된 글꼴의 너비가 모든 문자에 대해 동일한 경우에 해당됩니다.

따르면 W3 스쿨 , COLS는 pecifies (평균 문자 폭) 텍스트 영역의 폭 때문이다.

내 생각 엔 그들은 텍스트 영역의 텍스트의 평균 문자 너비가 아니라 글꼴의 평균 문자 너비를 의미한다는 것입니다.

이제 내 질문은 사용자 에이전트 가 특정 글꼴 평균 문자 너비 를 어떻게 계산하는지,이 계산에 어떤 문자가 포함되는지, ...이 정보를 얻거나 직접 계산할 수있는 방법이 있습니까?

내가하고 싶은 일 : textContent 및 cols 속성을 제외한 다른 것을 사용하지 않고 텍스트 영역 내부 시각적 줄 수를 계산하십시오 .

내가 이미 시도한 것 :

  • textContent의 평균 문자 너비를 계산합니다.

const textSpan = document.getElementById("textSpan");
const textarea = document.getElementById("textarea");

textarea.addEventListener("input", (evt) => {
  textSpan.innerText = evt.target.value;
  console.log("Predicted number of lines: " + (textSpan.getBoundingClientRect().width / (textSpan.getBoundingClientRect().width / textSpan.innerText.length * 10))) // 10 = cols attribute of textarea element;
});
<textarea id="textarea" cols="10" rows="10" style="word-break: break-all;"></textarea>
<span id="textSpan"></span>

  • 대부분의 문자의 평균 문자 너비를 계산합니다. 이것은 작동 할 수 있지만 계산에 사용할 문자를 알아야합니다 ... :

const textSpan = document.getElementById("textSpan");
const textSpanACW = document.getElementById("textSpanACW");
const textarea = document.getElementById("textarea");

textarea.addEventListener("input", (evt) => {
  textSpan.innerText = evt.target.value;
  console.log("Predicted number of lines: " + (textSpan.getBoundingClientRect().width / (textSpanACW.getBoundingClientRect().width / textSpanACW.innerText.length * 10))) // 10 = cols attribute of textarea element;
});
<textarea id="textarea" cols="10" rows="10" style="word-break: break-all;"></textarea>
<span id="textSpanACW">abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 ,;?.:/=+ù%µ£^¨$*-_)àç!è§('"é&|@#¼½^{[{}</span>
<span id="textSpan"></span>

이것을 알아 내면를 사용하지 않고 시각적 선의 수를 얻어야합니다 word-break: break-all;. 그래서 그것은 대답에 있으면 좋지만 필요하지는 않습니다.

로랑 돈트

HTML 사양 더 읽어보기 : textarea 요소의 textarea 유효 너비는 size × avg + sbw입니다. 여기서 size는 요소의 문자 너비이고, avg는 요소의 기본 글꼴의 평균 문자 너비 (CSS 픽셀, sbw)입니다. 스크롤 막대의 너비 (CSS 픽셀)입니다. (요소의 문자 간격 속성은 결과에 영향을주지 않습니다.) .

따라서 평균 문자 너비 (avg) 를 계산하는 공식 은 다음과 같습니다 (effectiveWidth - sbw) / size.

sbw 얻기 :

<style>
    /* way the hell off screen */
    .scrollbar-measure {
        width: 100px;
        height: 100px;
        overflow: scroll;
        position: absolute;
        top: -9999px;
    }
</style>
<script>
    const sbw = getScrollbarWidth();

    function getScrollbarWidth() {
        let scrollDiv = document.createElement("div");
        scrollDiv.className = "scrollbar-measure";
        document.body.appendChild(scrollDiv);
        const scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth;
        document.body.removeChild(scrollDiv);
        return scrollbarWidth;
    }

</script>

크기 얻기 :

에서 HTML 사양 : COLS는 지정을 한 줄에 문자의 예상 최대 수 때문이다. cols 속성이 지정된 경우 해당 값은 0보다 큰 유효한 음이 아닌 정수 여야합니다. 음이 아닌 정수를 분석하는 규칙을 속성 값에 적용하면 숫자가 0보다 큰 경우 요소의 문자 너비는 해당 값입니다. 그렇지 않으면 20입니다.

그래서:

let size = parseInt(textarea.getAttribute("cols"));

if (isNaN(size)) {
    size = 20;
}

효과적인 폭 얻기 :

요소에 cols 속성이 있고 음이 아닌 정수를 구문 분석하는 규칙을 사용하여 해당 속성의 값을 구문 분석해도 오류가 발생하지 않는 경우 사용자 에이전트는 해당 속성을 요소의 width 속성에 대한 표현 힌트로 사용할 것으로 예상됩니다. , 값은 텍스트 영역 유효 너비입니다 (아래에 정의 됨). 그렇지 않으면 사용자 에이전트는 요소의 width 속성을 textarea 유효 너비로 설정하는 사용자 에이전트 수준의 스타일 시트 규칙이있는 것처럼 작동합니다.

그래서:

const effectiveWidth = parseFloat(getComputedStyle(textarea).getPropertyValue("width").slice(0, -2));

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

OSX에서 부하 평균은 어떻게 계산됩니까? 너무 높은 것 같습니다. 어떻게 분석합니까?

분류에서Dev

Laravel Query Builder의 첫 글자는 어떻게 계산됩니까?

분류에서Dev

숫자 열에서 문자열 값을 건너 뛰어 평균을 계산하는 방법은 무엇입니까?

분류에서Dev

Flex Child의 100 % 너비는 어떻게 계산됩니까?

분류에서Dev

계산 된 열의 광고 평균을 계산하는 쿼리를 어떻게 생성합니까?

분류에서Dev

문자열의 너비를 픽셀 단위로 어떻게 계산합니까?

분류에서Dev

다음 / 이전 ISO 평일 숫자는 어떻게 계산합니까?

분류에서Dev

문자열 리터럴 풀에서 문자열 리터럴의 해시는 어떻게 계산됩니까?

분류에서Dev

SQL에서 에피소드 당 평균 시간 비율을 계산하려면 어떻게해야합니까?

분류에서Dev

SQL에서 에피소드 당 평균 시간 비율을 계산하려면 어떻게해야합니까?

분류에서Dev

이 이동 평균 함수는 어떻게 작동합니까?

분류에서Dev

연속 함수의 평균 밀도에 해당하는 x 값을 어떻게 계산합니까?

분류에서Dev

애플 로그인 : 사용자 ID는 어떻게 계산됩니까?

분류에서Dev

float 및 double의 소수 자릿수는 어떻게 계산됩니까?

분류에서Dev

지수 이동 평균은 어떻게 계산합니까?

분류에서Dev

SQL에서 평균 날짜를 어떻게 계산합니까?

분류에서Dev

두 열의 평균을 어떻게 계산합니까? Microsoft Access

분류에서Dev

두 숫자의 산술 평균 (평균) 계산 : 최적화의 의미는 무엇입니까?

분류에서Dev

텍스트 파일의 문자열에 포함 된 목록에있는 숫자의 평균을 어떻게 찾을 수 있습니까?

분류에서Dev

int는 부울 문으로 어떻게 평가됩니까?

분류에서Dev

특정 어두운 영역의 평균 너비 계산

분류에서Dev

일련의 특정 고정 너비 열 범위에 대한 평균을 어떻게 계산할 수 있습니까?

분류에서Dev

여러 ^ = 연산자를 포함하는 표현식은 어떻게 평가됩니까?

분류에서Dev

중간에 대시가 포함 된 두 개의 숫자가있는 셀의 평균과 합계를 얻으려면 어떻게해야합니까?

분류에서Dev

특정 평균으로 분산을 어떻게 계산할 수 있습니까?

분류에서Dev

텍스트 (문자열)의 단어 수는 어떻게 계산합니까?

분류에서Dev

div 태그의 평균 높이와 평균 너비를 계산

분류에서Dev

날짜와 시간을 포함하는 일련의 POSIXct가 주어지면 시간의 평균 (일 제외)을 어떻게 계산합니까?

분류에서Dev

ADC 판독 값의 평균은 어떻게 계산할 수 있습니까?

Related 관련 기사

  1. 1

    OSX에서 부하 평균은 어떻게 계산됩니까? 너무 높은 것 같습니다. 어떻게 분석합니까?

  2. 2

    Laravel Query Builder의 첫 글자는 어떻게 계산됩니까?

  3. 3

    숫자 열에서 문자열 값을 건너 뛰어 평균을 계산하는 방법은 무엇입니까?

  4. 4

    Flex Child의 100 % 너비는 어떻게 계산됩니까?

  5. 5

    계산 된 열의 광고 평균을 계산하는 쿼리를 어떻게 생성합니까?

  6. 6

    문자열의 너비를 픽셀 단위로 어떻게 계산합니까?

  7. 7

    다음 / 이전 ISO 평일 숫자는 어떻게 계산합니까?

  8. 8

    문자열 리터럴 풀에서 문자열 리터럴의 해시는 어떻게 계산됩니까?

  9. 9

    SQL에서 에피소드 당 평균 시간 비율을 계산하려면 어떻게해야합니까?

  10. 10

    SQL에서 에피소드 당 평균 시간 비율을 계산하려면 어떻게해야합니까?

  11. 11

    이 이동 평균 함수는 어떻게 작동합니까?

  12. 12

    연속 함수의 평균 밀도에 해당하는 x 값을 어떻게 계산합니까?

  13. 13

    애플 로그인 : 사용자 ID는 어떻게 계산됩니까?

  14. 14

    float 및 double의 소수 자릿수는 어떻게 계산됩니까?

  15. 15

    지수 이동 평균은 어떻게 계산합니까?

  16. 16

    SQL에서 평균 날짜를 어떻게 계산합니까?

  17. 17

    두 열의 평균을 어떻게 계산합니까? Microsoft Access

  18. 18

    두 숫자의 산술 평균 (평균) 계산 : 최적화의 의미는 무엇입니까?

  19. 19

    텍스트 파일의 문자열에 포함 된 목록에있는 숫자의 평균을 어떻게 찾을 수 있습니까?

  20. 20

    int는 부울 문으로 어떻게 평가됩니까?

  21. 21

    특정 어두운 영역의 평균 너비 계산

  22. 22

    일련의 특정 고정 너비 열 범위에 대한 평균을 어떻게 계산할 수 있습니까?

  23. 23

    여러 ^ = 연산자를 포함하는 표현식은 어떻게 평가됩니까?

  24. 24

    중간에 대시가 포함 된 두 개의 숫자가있는 셀의 평균과 합계를 얻으려면 어떻게해야합니까?

  25. 25

    특정 평균으로 분산을 어떻게 계산할 수 있습니까?

  26. 26

    텍스트 (문자열)의 단어 수는 어떻게 계산합니까?

  27. 27

    div 태그의 평균 높이와 평균 너비를 계산

  28. 28

    날짜와 시간을 포함하는 일련의 POSIXct가 주어지면 시간의 평균 (일 제외)을 어떻게 계산합니까?

  29. 29

    ADC 판독 값의 평균은 어떻게 계산할 수 있습니까?

뜨겁다태그

보관