Html2canvas: ๊ธ€๋จธ๋ฆฌ ๊ธฐํ˜ธ๊ฐ€ ๋ Œ๋”๋ง๋˜์ง€ ์•Š์Œ

์— ๋งŒ๋“  2013๋…„ 03์›” 17์ผ  ยท  20์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: niklasvh/html2canvas

๋‚ด html ๋งˆํฌ์—…์— ์ˆœ์„œ๊ฐ€ ์ง€์ •๋˜์ง€ ์•Š์•˜๊ฑฐ๋‚˜ ์ˆœ์„œ๊ฐ€ ์ง€์ •๋œ ๋ชฉ๋ก์ด ์žˆ๋Š” ๊ฒฝ์šฐ ๊ธ€๋จธ๋ฆฌ ๊ธฐํ˜ธ๋Š” html2canvas์—์„œ ๋ Œ๋”๋ง๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์˜ค๋ž˜์ „๋ถ€ํ„ฐ ๋ชจ๋“  ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ง€์›๋˜๋Š” html์˜ ํ‘œ์ค€ ๊ธฐ๋Šฅ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ƒ๋‹นํžˆ ์ค‘์š”ํ•œ ๋ฌธ์ œ๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

๊ฐ„๋‹จํ•œ ํŠธ๋ฆญ:

HTML
<ul><li>Item 1</li><li>Item 2</li></ul>

SCSS
ul li { list-style-type: none; &:before { content: 'โ€ข '; margin-left: -1em; } }

๋ชจ๋“  20 ๋Œ“๊ธ€

์†”๋ฃจ์…˜์€ ์ด๋ก ์ ์œผ๋กœ ์ƒ๋‹นํžˆ ๋‹จ์ˆœํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(๋‹จ์ง€ ์›). ๊ทธ๋Ÿฌ๋‚˜ ์†”๋ฃจ์…˜์ด ๋ฌด์—‡์ด๋“  ๊ฐ„์— ์ด์•Œ์˜ ๋ชจ์–‘์„ ์‚ฌ์šฉ์ž ์ •์˜ํ•˜๊ธฐ ์œ„ํ•ด CSS๋ฅผ ๊ณ ๋ คํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋งํ•  ๊ฒƒ๋„ ์—†์ด ๋ชฉ๋ก ํ•ญ๋ชฉ์€ ๋ชฉ๋ก์ฒ˜๋Ÿผ ๋ณด์ด์ง€ ์•Š๋Š” ๊ฒƒ๋“ค์— ์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค(์˜ˆ๋ฅผ ๋“ค์–ด "Code", "Network" ๋“ฑ์ด ์žˆ๋Š” github ํ—ค๋”๋Š” ul์ด๋ฏ€๋กœ ๋ชฉ๋ก ๋•Œ๋ฌธ์— ๋ถ„๋ช…ํžˆ ๊ธ€๋จธ๋ฆฌ ๊ธฐํ˜ธ๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์Šคํƒ€์ผ ์œ ํ˜•: ์—†์Œ

http://www.w3schools.com/css/css_list.asp

์ด๊ฒƒ์— ๋Œ€ํ•œ ์†Œ์‹์ด ์žˆ์Šต๋‹ˆ๊นŒ? ๋‚ด ์•ฑ์— ์ด ๊ธฐ๋Šฅ์ด ์ •๋ง ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๋ˆ„๊ตฌ๋“ ์ง€ ์ด๊ฒƒ์— ๋Œ€ํ•œ ์•„์ด๋””์–ด/ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๊นŒ? ์•„๋‹ˆ๋ฉด ๋ˆ„๊ตฐ๊ฐ€ ๊ทธ๊ฒƒ์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

์ž‘๋™ํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์„ ์ฆ๋ช…ํ•˜๋Š” ๋ฐ”์ด์˜ฌ๋ฆฐ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. http://jsfiddle.net/fYZ5h/

ํŠนํžˆ ์ •๋ ฌ๋œ ๋ชฉ๋ก์˜ ๊ฒฝ์šฐ ์ด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ์œผ๋ฉด ํ•ฉ๋‹ˆ๋‹ค.

ํŽธ์ง‘: ์ •๋ ฌ๋œ ๋ชฉ๋ก์— ๋Œ€ํ•ด ์ˆซ์ž๋ฅผ ๋ณด๋Š” ๋ฐ ๊ด€์‹ฌ์ด ์žˆ๋Š” ์‚ฌ๋žŒ๋“ค์„ ์œ„ํ•œ ๊ฐ„๋‹จํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ 'ol' ์š”์†Œ์—์„œ 'list-style-position' CSS ์†์„ฑ์„ 'inside'๋กœ ์„ค์ •ํ•˜๋Š” ํ•œ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ 'list-style-type'์€ ๋‹ค์Œ ์ •๊ทœ์‹๊ณผ ์ผ์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

/^(์‹ญ์ง„์ˆ˜|์‹ญ์ง„์ˆ˜ ์„ ํ–‰ 0|์œ„ ์•ŒํŒŒ|์œ„ ๋ผํ‹ด|์œ„ ๋กœ๋งˆ์ž|๋‚ฎ์€ ์•ŒํŒŒ|๋‚ฎ์€ ๊ทธ๋ฆฌ์Šค์–ด|๋‚ฎ์€ ๋ผํ‹ด|๋‚ฎ์€ ๋กœ๋งˆ์ž)$/i

...๋‘ ์ œ์•ฝ ์กฐ๊ฑด์ด ๋ชจ๋‘ ์ถฉ์กฑ๋˜๋Š” ํ•œ ์ˆซ์ž๋Š” ์ •๋ ฌ๋œ ๋ชฉ๋ก์— ๋Œ€ํ•ด ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋ Œ๋”๋ง๋ฉ๋‹ˆ๋‹ค. CSS๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ชฉ๋ก์˜ ์œ„์น˜๋ฅผ โ€‹โ€‹์กฐ์ •ํ•˜์—ฌ 'list-style-position: inside;'์˜ ์˜ํ–ฅ์„ ๋ณด์™„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ ˆ์ด์•„์›ƒ์— ์žˆ์Šต๋‹ˆ๋‹ค.

list-style-type square์— ๋Œ€ํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

์•„๋งˆ๋„ ๋‚ด ์†”๋ฃจ์…˜์ด ๋„์›€์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํ’€ ๋ฆฌํ€˜์ŠคํŠธ: https://github.com/niklasvh/html2canvas/pull/417

์ •๋ ฌ๋˜์ง€ ์•Š์€ ๋ชฉ๋ก์—์„œ ๊ธ€๋จธ๋ฆฌ ๊ธฐํ˜ธ๋ฅผ ๋ Œ๋”๋งํ•˜๋Š” ๊ธฐ๋Šฅ์— +1...

์ด๊ฒƒ์€ ๋˜ํ•œ ๋‚ด๊ฐ€ ์ž‘์—…ํ•˜๊ณ  ์žˆ๋Š” ํ”„๋กœ์ ํŠธ์— ๋งค์šฐ ๋„์›€์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‚ด ๋ชฉ๋ก์„ ๋‹จ๋ฝ์œผ๋กœ ๋ณ€ํ™˜ํ•˜๊ณ  ์ด์•Œ์„ ๊ฐ€์งœ๋กœ ๋งŒ๋“ค์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋” ๋ณต์žกํ•œ ๋ชฉ๋ก ์Šคํƒ€์ผ์„ ๋ฌด์‹œํ•˜๊ณ  ์ˆœ์„œ๊ฐ€ ์ง€์ •๋˜์ง€ ์•Š์€ ๋ชฉ๋ก์— ๋Œ€ํ•ด ๋””์Šคํฌ/์‚ฌ๊ฐํ˜•๋งŒ ๊ตฌํ˜„ํ•˜๋Š” ์ž„์‹œ ํ•ด๊ฒฐ์ฑ…๋„ ์œ ์šฉํ•  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. @adam-roth์˜ ์ ‘๊ทผ ๋ฐฉ์‹์„ ์‹œ๋„ํ–ˆ์ง€๋งŒ ๊ณง) . ๊ทธ๋Ÿฐ ๋‹ค์Œ ๋” ๋ฉ‹์ง„ ๋ชฉ๋ก ์Šคํƒ€์ผ์„ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค ...

์ด๊ฒƒ์€ ๋ชจ๋“  ์‚ฌ๋žŒ์—๊ฒŒ ํšจ๊ณผ๊ฐ€ ์žˆ๋Š” ์†”๋ฃจ์…˜์€ ์•„๋‹ˆ์ง€๋งŒ ์—ฌ๊ธฐ์— ์ œ๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ์‚ฌ์šฉํ•œ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค. Html2Canvas๋Š” ์˜์‚ฌ ํด๋ž˜์Šค ์„ ํƒ๊ธฐ๋ฅผ ์ž˜ ์ง€์›ํ•˜๋ฏ€๋กœ :before ํ•„ํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ธ€๋จธ๋ฆฌ ๊ธฐํ˜ธ์™€ ์ˆซ์ž๋ฅผ ๋‹ค์‹œ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.

//์ด ์ฝ”๋“œ๋Š” SASS์ด์ง€๋งŒ ์ผ๋ฐ˜ CSS๋กœ ์ž˜ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
//์ค‘์ฒฉ ๋ชฉ๋ก์„ ํ—ˆ์šฉํ•˜๊ธฐ ์œ„ํ•ด ol, ul์„ ์ค‘์ฒฉํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๋“ค์—ฌ์“ฐ๊ธฐํ•  ์ƒˆ ์™ผ์ชฝ ์œ„์น˜๋ฅผ ์ง€์ •ํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ๋“ค์—ฌ์“ฐ๊ธฐ๋‹น 30px๋งŒ ์ถ”๊ฐ€ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

#whatever-element-html2canvas-is-run-on {
    ol, ul {
        li {
            &:before {
                position: absolute; //This way is doesn't effect sizing
                left: 30px; //Whatever indent level you need to match the bullet placement
                z-index: 1000; //This may not be necessary for you
            }
        }
    }
    ol {
        li {
            &:before {
                content: attr(data-number); //This along with the javascrip below will make ordered lists work.
            }
        }
    }
}

๊ทธ๋Ÿฐ ๋‹ค์Œ ํ•„ํ„ฐ๋ฅผ ํ†ตํ•ด ๋ Œ๋”๋งํ•˜๋ ค๋Š” html์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค(์ œ ๊ฒฝ์šฐ์—๋Š” ๊ฐ๋„ ํ•„ํ„ฐ์ด์ง€๋งŒ ๋ชจ๋“  Javascript๊ฐ€ ์ž‘๋™ํ•จ).

var filtered = $("<div>" + data + "</div");

//Add Numbers To Each of The OL Li's
filtered.find('ol')
    //Loop through each ol
    .each(function(i, el){
        console.log('i', i);
        $(el).children('li')
            //Loop through each of it's children and give it a data attribute for what number it should have
            .each(function(ci, cel){
                console.log('ci', ci);
                $(cel).attr('data-number', ci + 1);
            });
    });

์ด์ „์— ๊ฒŒ์‹œํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ ๋” ์ด์ƒ ํ˜„์žฌ ๋ฒ„์ „์˜ html2canvas์—์„œ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ์— ๋Œ€ํ•œ ์ƒˆ๋กœ์šด ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

http://jsfiddle.net/e70o3mj0/2/

...๊ธฐ๋ณธ์ ์œผ๋กœ ๋ชจ๋“  'ol'๊ณผ 'ul'์„ div ์ปฌ๋ ‰์…˜์œผ๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค. html2canvas๊ฐ€ ์‹คํ–‰๋œ ํ›„์— ์ž‘์—…์„ ์ทจ์†Œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์ด ๊ณ ๋ ค๋˜๊ณ  ์žˆ๋Š”์ง€ ๋˜๋Š” ์ด ๊ธฐ๋Šฅ์„ ์ง„ํ–‰ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋  ์ˆ˜ ์žˆ๋Š” ์ผ์ด ์žˆ๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.

์–ด๋Š ์‹œ์ ์—์„œ ๊ณ ๋ ค๋˜๊ณ  ๊ตฌํ˜„๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. PR #486์€ ๊ทธ๊ฒƒ์„ ์œ„ํ•ด ๋งŒ๋“ค์–ด์กŒ๊ณ , ๋‚˜๋Š” ๊ทธ๊ฒƒ์— ๋Œ€ํ•ด ์•ฝ๊ฐ„์˜ ํ”ผ๋“œ๋ฐฑ์„ ์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค. ์ผ๋‹จ ํ•ด๊ฒฐ๋˜๋ฉด ๋ณ‘ํ•ฉ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์ด ๊ฐ€๊นŒ์šด ์žฅ๋ž˜์— html2canvas์—์„œ ํ•ด๊ฒฐ๋  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

์ฝ”๋“œ์—์„œ "ul", "ol", "li"๋ฅผ ์ฐพ์•˜์ง€๋งŒ ์•„๋ฌด ๊ฒƒ๋„ ์ฐพ์ง€ ๋ชปํ–ˆ์ง€๋งŒ li๋Š” ๋“ค์—ฌ์“ฐ๊ธฐ๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ ์ด์— ๋Œ€ํ•œ ๋…ผ๋ฆฌ๊ฐ€ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ฝ”๋“œ์—์„œ ์ด๊ฒƒ์ด ์œ„์น˜ํ•  ์œ„์น˜๋ฅผ ๊ฐ€๋ฆฌํ‚ฌ ์ˆ˜ ์žˆ๋Š” ์‚ฌ๋žŒ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

ํ™•์‹คํžˆ ํ•ดํ‚น์ด์ง€๋งŒ ์ด ์ ‘๊ทผ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜์—ฌ PDF์—์„œ ๊ธ€๋จธ๋ฆฌ ๊ธฐํ˜ธ <ul> ๋ฅผ ์ง€์›ํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

HTML
~~~

  • โ€ข ์ˆ˜์ž…์„ {{ output.monthlyIncome | ํ†ตํ™” }} ์›”๋ณ„ ์ˆ˜ํ‘œ
  • โ€ข ๋ชจ๊ธฐ์ง€๋ก ์„ 0์œผ๋กœ ๋‚ฎ์ถ”์‹ญ์‹œ์˜ค.
  • โ€ข ๋ถ€์ฑ„๋ฅผ 0์œผ๋กœ ์ค„์ด์‹ญ์‹œ์˜ค.
  • โ€ข ๊ณต๋ฆฝ ๋Œ€ํ•™์—์„œ ์ž๋…€ ๊ต์œก๋น„ 100% ์ง€๋ถˆ
  • โ€ข ๋ฐฐ์šฐ์ž/ํŒŒํŠธ๋„ˆ๊ฐ€ 65์„ธ๊ฐ€ ๋˜๊ฑฐ๋‚˜ ๋ง‰๋‚ด ์ž๋…€๊ฐ€ 23์„ธ๊ฐ€ ๋  ๋•Œ๊นŒ์ง€ ๋ณด์žฅ ์œ ์ง€

~~~

์ ๊ฒŒ/CSS
~~~

pdf ์บ”๋ฒ„์Šค ul {

list-style: none;
padding: 0;

}

pdf-canvas ul li {

margin: 0 0 0 35px;
list-style: none;

.bullet {
    display: inline-block;
    opacity: 0.85;
    font-size: 1.1em;
    text-indent: -22px;
}

}
~~~

์—ฌ๊ธฐ์„œ #pdf-canvas ๋Š” PDF ํ…œํ”Œ๋ฆฟ์ด ํฌํ•จ๋œ ์ˆจ๊ฒจ์ง„ DIV์˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ์ด๊ฒƒ์„ ์‹œ๋„ํ•˜๋Š” ๋‹ค๋ฅธ ์‚ฌ๋žŒ์—๊ฒŒ ๋„์›€์ด๋˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

๋‚˜๋Š” ํŽธ์ง‘์„ ์œ„ํ•ด TinyMCE๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์‚ฌ์šฉ์ž๋Š” "๋‚ด๋ถ€ ์ž‘๋™"์„ ๋ณผ ์ˆ˜ ์—†์–ด์•ผํ•˜์ง€๋งŒ ๋ฒ”์œ„ ๋ฐ โ€ข๊ฐ€ ์‚ฝ์ž…๋˜๋„๋ก ํ™•์žฅํ•˜๋Š” ๋ฐฉ๋ฒ•์ด์žˆ์„ ์ˆ˜ ์žˆ์ง€๋งŒ ์ ์ ˆํ•œ 1-1 ์†”๋ฃจ์…˜์ด ํ›จ์”ฌ ๋‚ซ์Šต๋‹ˆ๋‹ค. ๋ฌผ๋ก .

๊ฐ์‚ฌ ํ•ด์š”,
์•ค๋”์Šค

๊ฐ„๋‹จํ•œ ํŠธ๋ฆญ:

HTML
<ul><li>Item 1</li><li>Item 2</li></ul>

SCSS
ul li { list-style-type: none; &:before { content: 'โ€ข '; margin-left: -1em; } }

๊ทธ๋Ÿฐ๋ฐ ์™œ ์ด๊ฒƒ์ด html2canvas์—์„œ ํ•ด๊ฒฐ๋˜์ง€ ์•Š๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์„ ์šฐํšŒํ•˜๋Š” ๋‚˜์˜ ์ ‘๊ทผ ๋ฐฉ์‹์€ 2๊ฐœ์˜ ์—ด์ด ์žˆ๋Š” ํ…Œ์ด๋ธ”์„ ๋งŒ๋“ค๊ณ  ์ฒซ ๋ฒˆ์งธ ์—ด์— โ€ข ํ…์ŠคํŠธ๋ฅผ ๋‘ ๋ฒˆ์งธ ์—ด์— ๋„ฃ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์ด ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋ Œ๋”๋ง๋˜๋Š” ์œ ์ผํ•œ ๋ฐฉ๋ฒ•์ด์—ˆ์Šต๋‹ˆ๋‹ค.

์ง€๊ธˆ ํ…Œ์ŠคํŠธํ–ˆ์œผ๋ฉฐ HTML ๋ชฉ๋ก์€ 1.0.0 ์•ŒํŒŒ 10์—์„œ ์ œ๋Œ€๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

https://jsfiddle.net/boLxkgj8/264/ Bullet์„ ๋ Œ๋”๋งํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค :(์–ด๋–ป๊ฒŒ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

https://jsfiddle.net/boLxkgj8/264/ Bullet์„ ๋ Œ๋”๋งํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค :(์–ด๋–ป๊ฒŒ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

์•Œ๊ฒ ์Šต๋‹ˆ๋‹ค. ์ตœ์‹  ๋ฒ„์ „์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•˜๋Š”๋ฐ ์ด์ œ ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
https://jsfiddle.net/jeavhg05/4/

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰