<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>붕차야 공부하자</title>
    <link>https://bungcha.tistory.com/</link>
    <description>공부할게용</description>
    <language>ko</language>
    <pubDate>Tue, 23 Jun 2026 12:35:54 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>날라차붕차</managingEditor>
    <image>
      <title>붕차야 공부하자</title>
      <url>https://tistory1.daumcdn.net/tistory/3220147/attach/3792c3073a1f40439489f16adad73728</url>
      <link>https://bungcha.tistory.com</link>
    </image>
    <item>
      <title>스크롤 바; 마우스 휠 돌릴 때만 스크롤 나옴</title>
      <link>https://bungcha.tistory.com/47</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;
&lt;script&gt;
  if (window.location.pathname.split(&quot;/&quot;)[1] === &quot;m&quot; &amp;&amp; navigator.userAgent.indexOf(&quot;Tistory&quot;) === -1 &amp;&amp; navigator.userAgent.indexOf(&quot;Android&quot;) === -1) {
    window.location.href = window.location.origin + window.location.pathname.substr(2);
  }
&lt;/script&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Animation4.gif&quot; data-origin-width=&quot;615&quot; data-origin-height=&quot;288&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cjMByu/btrA0zHvy5T/it8CR2PmALYHyg7OSPwJE0/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cjMByu/btrA0zHvy5T/it8CR2PmALYHyg7OSPwJE0/img.gif&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cjMByu/btrA0zHvy5T/it8CR2PmALYHyg7OSPwJE0/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/cjMByu/btrA0zHvy5T/it8CR2PmALYHyg7OSPwJE0/img.gif&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;615&quot; height=&quot;288&quot; data-filename=&quot;Animation4.gif&quot; data-origin-width=&quot;615&quot; data-origin-height=&quot;288&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;간혹 스크롤 바를 싫어하는 사람들이 있다. 요청할 때 스크롤 할때만 스크롤 바가 나오게 해달라고 요청한다...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1651480306211&quot; class=&quot;xml language-html line-numbers&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html lang=&quot;en&quot;&amp;gt;
&amp;lt;head&amp;gt;
	&amp;lt;meta charset=&quot;UTF-8&quot;&amp;gt;
	&amp;lt;meta http-equiv=&quot;X-UA-Compatible&quot; content=&quot;IE=edge&quot;&amp;gt;
	&amp;lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&amp;gt;
	&amp;lt;title&amp;gt;Document&amp;lt;/title&amp;gt;
	&amp;lt;script src=&quot;https://code.jquery.com/jquery-3.6.0.js&quot;&amp;gt;&amp;lt;/script&amp;gt;
	&amp;lt;style&amp;gt;
		.wrap {margin-top:100px;}
		.list {width:300px; height:200px; margin:0 auto; padding:0 10px; border:1px solid #ddd;}
		.list li {margin:10px 0 0 30px; background:#f2f2f2;}

		.y-bar {overflow-x:hidden; overflow-y:auto; scrollbar-width:thin; scrollbar-color:rgba(0,0,0,.2); scrollbar-base-color:transparent; scrollbar-face-color:#ccc; scrollbar-highlight-color:transparent; scrollbar-track-color:transparent; scrollbar-arrow-color:#fff; scrollbar-shadow-color:#ccc;}
		.y-bar::-webkit-scrollbar {width:4px; background-color:transparent;}
		.y-bar::-webkit-scrollbar-button {display:none;}
		.y-bar::-webkit-scrollbar-thumb {border-radius:2em; background-color:transparent;}
		.y-bar.on::-webkit-scrollbar-thumb {background-color:rgba(0,0,0,.5);}
	&amp;lt;/style&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
&amp;lt;div class=&quot;wrap&quot;&amp;gt;
	&amp;lt;ol class=&quot;list y-bar&quot;&amp;gt;
		&amp;lt;li&amp;gt; Lorem ipsum dolor sit.&amp;lt;/li&amp;gt;
		&amp;lt;li&amp;gt; Lorem ipsum dolor sit.&amp;lt;/li&amp;gt;
		&amp;lt;li&amp;gt; Lorem ipsum dolor sit.&amp;lt;/li&amp;gt;
		&amp;lt;li&amp;gt; Lorem ipsum dolor sit.&amp;lt;/li&amp;gt;
		&amp;lt;li&amp;gt; Lorem ipsum dolor sit.&amp;lt;/li&amp;gt;
		&amp;lt;li&amp;gt; Lorem ipsum dolor sit.&amp;lt;/li&amp;gt;
		&amp;lt;li&amp;gt; Lorem ipsum dolor sit.&amp;lt;/li&amp;gt;
		&amp;lt;li&amp;gt; Lorem ipsum dolor sit.&amp;lt;/li&amp;gt;
		&amp;lt;li&amp;gt; Lorem ipsum dolor sit.&amp;lt;/li&amp;gt;
		&amp;lt;li&amp;gt; Lorem ipsum dolor sit.&amp;lt;/li&amp;gt;
	&amp;lt;/ol&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;script&amp;gt;
$(function(){

	// scroll 이벤트
	function overScroll() {

		var listWrap = $('.list');

		listWrap.off('scroll').on('scroll', function(){
			$(this).addClass('on');
		});

		$.fn.scrollStopped = function(callback) {
			var that = this, 
				$this = $(that);

			$this.scroll(function(ev) {
				clearTimeout($this.data('scrollTimeout'));
				$this.data('scrollTimeout', setTimeout(callback.bind(that), 250, ev));
			});
		};
		
		listWrap.scrollStopped(function(ev){
			$(this).removeClass('on');
		});
	}
	overScroll();
})
&amp;lt;/script&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;​&lt;/code&gt;&lt;/pre&gt;</description>
      <category>WEB/jQuery</category>
      <category>스크롤 바</category>
      <author>날라차붕차</author>
      <guid isPermaLink="true">https://bungcha.tistory.com/47</guid>
      <comments>https://bungcha.tistory.com/47#entry47comment</comments>
      <pubDate>Mon, 2 May 2022 17:33:24 +0900</pubDate>
    </item>
    <item>
      <title>숫자 카운터; 배열에 있는 숫자 애니메이션으로 카운터</title>
      <link>https://bungcha.tistory.com/46</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;
&lt;script&gt;
  if (window.location.pathname.split(&quot;/&quot;)[1] === &quot;m&quot; &amp;&amp; navigator.userAgent.indexOf(&quot;Tistory&quot;) === -1 &amp;&amp; navigator.userAgent.indexOf(&quot;Android&quot;) === -1) {
    window.location.href = window.location.origin + window.location.pathname.substr(2);
  }
&lt;/script&gt;
&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Animation.gif&quot; data-origin-width=&quot;502&quot; data-origin-height=&quot;203&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cjaAiM/btrAM3BGvq0/eZeekKwdmpfncVDtytPPP0/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cjaAiM/btrAM3BGvq0/eZeekKwdmpfncVDtytPPP0/img.gif&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cjaAiM/btrAM3BGvq0/eZeekKwdmpfncVDtytPPP0/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/cjaAiM/btrAM3BGvq0/eZeekKwdmpfncVDtytPPP0/img.gif&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;502&quot; height=&quot;203&quot; data-filename=&quot;Animation.gif&quot; data-origin-width=&quot;502&quot; data-origin-height=&quot;203&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;버튼을 클릭했을 때 숫자가 애니메이션 효과로 카운터 된다.&lt;/p&gt;
&lt;pre id=&quot;code_1651220058381&quot; class=&quot;html xml line-numbers language-html&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html lang=&quot;en&quot;&amp;gt;
&amp;lt;head&amp;gt;
	&amp;lt;meta charset=&quot;UTF-8&quot;&amp;gt;
	&amp;lt;meta http-equiv=&quot;X-UA-Compatible&quot; content=&quot;IE=edge&quot;&amp;gt;
	&amp;lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&amp;gt;
	&amp;lt;title&amp;gt;Document&amp;lt;/title&amp;gt;
	&amp;lt;script src=&quot;https://code.jquery.com/jquery-3.6.0.js&quot;&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
&amp;lt;div class=&quot;wrap&quot;&amp;gt;
	&amp;lt;div class=&quot;btn-wrap&quot;&amp;gt;
		&amp;lt;button type=&quot;button&quot;&amp;gt;버튼100&amp;lt;/button&amp;gt;
		&amp;lt;button type=&quot;button&quot;&amp;gt;버튼200&amp;lt;/button&amp;gt;
		&amp;lt;button type=&quot;button&quot;&amp;gt;버튼300&amp;lt;/button&amp;gt;
	&amp;lt;/div&amp;gt;
	&amp;lt;div class=&quot;num-wrap&quot;&amp;gt;
		&amp;lt;span id=&quot;num1&quot;&amp;gt;0&amp;lt;/span&amp;gt;
		&amp;lt;span id=&quot;num2&quot;&amp;gt;0&amp;lt;/span&amp;gt;
		&amp;lt;span id=&quot;num3&quot;&amp;gt;0&amp;lt;/span&amp;gt;
	&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;script&amp;gt;
$(function(){

	// 숫자 카운트 애니메이션
	function numberCounter(target_frame, target_number) {
		this.count = 0;
		this.diff = 0;
		this.target_count = parseInt(target_number);
		this.target_frame = document.getElementById(target_frame);
		this.timer = null;
		this.counter();
	};
	numberCounter.prototype.counter = function() {
		var self = this;
		this.diff = this.target_count - this.count;

		if(this.diff &amp;gt; 0) {
			self.count += Math.ceil(this.diff / 5);
		}

		this.target_frame.innerHTML = this.count.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',');

		if(this.count &amp;lt; this.target_count) {
			this.timer = setTimeout(function() { self.counter(); }, 30);
		} else {
			clearTimeout(this.timer);
		}
	};

	var btn = $('.btn-wrap').find('button');

	btn.on('click', function(){
		var $this = $(this),
			btnIdx = btn.index($this),
			// btnData = btn.attr('data-size'),
			num = [ 
				{num1: &quot;100&quot;, num2: &quot;100&quot;, num3: &quot;100&quot;},
				{num1: &quot;200&quot;, num2: &quot;200&quot;, num3: &quot;200&quot;},
				{num1: &quot;300&quot;, num2: &quot;300&quot;, num3: &quot;300&quot;}
			];
		
		num1 = num[btnIdx].num1;
		num2 = num[btnIdx].num2;
		num3 = num[btnIdx].num3;

		new numberCounter(&quot;num1&quot;, num1);
		new numberCounter(&quot;num2&quot;, num2);
		new numberCounter(&quot;num3&quot;, num3);
	})
})
&amp;lt;/script&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&lt;/code&gt;&lt;/pre&gt;</description>
      <category>WEB/jQuery</category>
      <category>배열</category>
      <category>숫자 카운터</category>
      <category>애니메이션 숫자 카운터</category>
      <author>날라차붕차</author>
      <guid isPermaLink="true">https://bungcha.tistory.com/46</guid>
      <comments>https://bungcha.tistory.com/46#entry46comment</comments>
      <pubDate>Fri, 29 Apr 2022 17:14:46 +0900</pubDate>
    </item>
    <item>
      <title>forEach; 배열, 객체를 append 하기</title>
      <link>https://bungcha.tistory.com/45</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;
&lt;script&gt;
  if (window.location.pathname.split(&quot;/&quot;)[1] === &quot;m&quot; &amp;&amp; navigator.userAgent.indexOf(&quot;Tistory&quot;) === -1 &amp;&amp; navigator.userAgent.indexOf(&quot;Android&quot;) === -1) {
    window.location.href = window.location.origin + window.location.pathname.substr(2);
  }
&lt;/script&gt;
&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Animation2.gif&quot; data-origin-width=&quot;805&quot; data-origin-height=&quot;901&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/o8MLa/btrAPVW4C7T/TGeDlkFc2zF2TflDHxSQpk/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/o8MLa/btrAPVW4C7T/TGeDlkFc2zF2TflDHxSQpk/img.gif&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/o8MLa/btrAPVW4C7T/TGeDlkFc2zF2TflDHxSQpk/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/o8MLa/btrAPVW4C7T/TGeDlkFc2zF2TflDHxSQpk/img.gif&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;805&quot; height=&quot;901&quot; data-filename=&quot;Animation2.gif&quot; data-origin-width=&quot;805&quot; data-origin-height=&quot;901&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;똑같은 레이아웃이 겁나게 많을 때 내용만 바뀌게 하려면 ajax로 페이지를 불러오면 좋지만 CMS로 운영되는 사이트일 경우 ajax가 느린 경우가 있다. 그래서 배열에 내용을 넣고 뿌리는 형식으로 작업해봤다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;배열의 객체는 다 똑같아야 한다. 내용이 없으면 빈값으로 넣으면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1651218414784&quot; class=&quot;html xml line-numbers language-html&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html lang=&quot;en&quot;&amp;gt;
&amp;lt;head&amp;gt;
&amp;lt;meta charset=&quot;UTF-8&quot;&amp;gt;
&amp;lt;meta http-equiv=&quot;X-UA-Compatible&quot; content=&quot;IE=edge&quot;&amp;gt;
&amp;lt;title&amp;gt;hover img button&amp;lt;/title&amp;gt;
&amp;lt;style&amp;gt;
    .box {border:1px solid #ddd;}
    .box + .box {margin-top:20px;}
&amp;lt;/style&amp;gt;
&amp;lt;script src=&quot;https://code.jquery.com/jquery-3.6.0.js&quot;&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;

&amp;lt;div class=&quot;wrap&quot;&amp;gt;
    &amp;lt;nav&amp;gt;
        &amp;lt;ul&amp;gt;
            &amp;lt;li class=&quot;btn&quot; data-category=&quot;more&quot;&amp;gt;&amp;lt;button&amp;gt;&amp;lt;span&amp;gt;more&amp;lt;/span&amp;gt;&amp;lt;/button&amp;gt;&amp;lt;/li&amp;gt;
            &amp;lt;li class=&quot;btn&quot; data-category=&quot;aa&quot;&amp;gt;&amp;lt;button&amp;gt;&amp;lt;span&amp;gt;aa&amp;lt;/span&amp;gt;&amp;lt;/button&amp;gt;&amp;lt;/li&amp;gt;
            &amp;lt;li class=&quot;btn&quot; data-category=&quot;bb&quot;&amp;gt;&amp;lt;button&amp;gt;&amp;lt;span&amp;gt;bb&amp;lt;/span&amp;gt;&amp;lt;/button&amp;gt;&amp;lt;/li&amp;gt;
            &amp;lt;li class=&quot;btn&quot; data-category=&quot;cc&quot;&amp;gt;&amp;lt;button&amp;gt;&amp;lt;span&amp;gt;cc&amp;lt;/span&amp;gt;&amp;lt;/button&amp;gt;&amp;lt;/li&amp;gt;
        &amp;lt;/ul&amp;gt;
    &amp;lt;/nav&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;script&amp;gt;
    var arr = [
        {
            category:'aa',
            title:'가',
            content:'1',
            detail:[
                {
                    year:'2022',
                    text:'안녕하세요'
                },
                {
                    year:'2021',
                    text:'하하하'
                }
            ]
        },
        {
            category:'aa',
            title:'나',
            content:'2',
            detail:[
                {
                    year:'2022',
                    text:'안녕하세요'
                },
                {
                    year:'2021',
                    text:'하하하'
                }
            ]
        },
        {
            category:'bb',
            title:'다',
            content:'3',
            detail:[
                {
                    year:'',
                    text:''
                }
            ]
        },
        {
            category:'bb',
            title:'라',
            content:'4',
            detail:[
                {
                    year:'2022',
                    text:'안녕하세요'
                },
                {
                    year:'2021',
                    text:'하하하'
                }
            ]
        },
        {
            category:'cc',
            title:'마',
            content:'5',
            detail:[
                {
                    year:'2022',
                    text:'안녕하세요'
                },
                {
                    year:'2021',
                    text:'하하하'
                }
            ]
        },
        {
            category:'cc',
            title:'바',
            content:'6',
            detail:[
                {
                    year:'2022',
                    text:'안녕하세요'
                },
                {
                    year:'2021',
                    text:'하하하'
                }
            ]
        },
        {
            category:'cc',
            title:'사',
            content:'7',
            detail:[
                {
                    year:'2021',
                    text:'하하하'
                }
            ]
        }
    ];
    
    arr.forEach(function(item, index){

        var $wrap = $('.wrap');
        var btn = $('nav .btn');

        function htmlLoad(item, index){
            var category = item.category;
            var tit = item.title;
            var cont = item.content;
            var details = item.detail;

            var html = '&amp;lt;div class=&quot;box&quot; data-category=&quot;' + category + '&quot;&amp;gt;';
                html += '&amp;lt;p class=&quot;tit&quot;&amp;gt;' + tit + '&amp;lt;/p&amp;gt;';
                html += '&amp;lt;p class=&quot;cont&quot;&amp;gt;' + cont + '&amp;lt;/p&amp;gt;';
                html += '&amp;lt;/div&amp;gt;';
                
            var $html = $(html);

            details.forEach(function(item, index){
                var html2 = '&amp;lt;div class=&quot;txt-box&quot;&amp;gt;';
                    html2 += '&amp;lt;p class=&quot;year&quot;&amp;gt;' + details[index].year + '&amp;lt;/p&amp;gt;';
                    html2 += '&amp;lt;p class=&quot;txt&quot;&amp;gt;' + details[index].text + '&amp;lt;/p&amp;gt;';
                    html2 += '&amp;lt;/div&amp;gt;';

                $html.append(html2);
            })

            $wrap.append($html);
        }
        htmlLoad(item, index);
    
        btn.off('click').on('click', function(){
            var $this = $(this);
            var dataCheck = $this.attr('data-category');

            $('.box').remove();

            if(dataCheck == 'more'){
                
                var isMore = arr;

                isMore.forEach(function(item, index){
                    htmlLoad(item, index);
                });

            }else{
                function isThis(item, index){
                    if(item.category === dataCheck){
                        return true;
                    }
                }
                var isCategory = arr.filter(isThis);

                // console.log(isCategory);

                isCategory.forEach(function(item){
                    htmlLoad(item, index);
                })
            }
        })
    });

&amp;lt;/script&amp;gt;
&amp;lt;/html&amp;gt;&lt;/code&gt;&lt;/pre&gt;</description>
      <category>WEB/jQuery</category>
      <category>append</category>
      <category>forEach</category>
      <category>배열</category>
      <author>날라차붕차</author>
      <guid isPermaLink="true">https://bungcha.tistory.com/45</guid>
      <comments>https://bungcha.tistory.com/45#entry45comment</comments>
      <pubDate>Fri, 29 Apr 2022 16:48:04 +0900</pubDate>
    </item>
    <item>
      <title>dialog ; modal popup, 웹접근성</title>
      <link>https://bungcha.tistory.com/44</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;
&lt;script&gt;
  if (window.location.pathname.split(&quot;/&quot;)[1] === &quot;m&quot; &amp;&amp; navigator.userAgent.indexOf(&quot;Tistory&quot;) === -1 &amp;&amp; navigator.userAgent.indexOf(&quot;Android&quot;) === -1) {
    window.location.href = window.location.origin + window.location.pathname.substr(2);
  }
&lt;/script&gt;
&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Animation4.gif&quot; data-origin-width=&quot;1074&quot; data-origin-height=&quot;688&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pXWKT/btrAPgOvefv/qBVLbUcFaxgtQKqgbTEKLk/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pXWKT/btrAPgOvefv/qBVLbUcFaxgtQKqgbTEKLk/img.gif&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pXWKT/btrAPgOvefv/qBVLbUcFaxgtQKqgbTEKLk/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/pXWKT/btrAPgOvefv/qBVLbUcFaxgtQKqgbTEKLk/img.gif&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1074&quot; height=&quot;688&quot; data-filename=&quot;Animation4.gif&quot; data-origin-width=&quot;1074&quot; data-origin-height=&quot;688&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;웹접근성을 준수한 모달 레이어 창을 만들어 봤다. 특이점은 모달 레이어 창이 열린 상태에서 포커스 이동을 요소를 추가해서 제어했다. esc 키를 누르면 모달 에이어 창이 닫힌다. 요소를 추가 해서 포커스를 제어 하는 것이 좋은 작동인지는 잘 모르겠다. 아래 참고 사이트를 보고 좀더 보완해야겠다.&lt;/p&gt;
&lt;pre id=&quot;code_1648605295265&quot; class=&quot;html xml line-numbers language-html&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html lang=&quot;ko-KR&quot;&amp;gt;
&amp;lt;head&amp;gt;
    &amp;lt;meta charset=&quot;UTF-8&quot;&amp;gt;
    &amp;lt;meta http-equiv=&quot;X-UA-Compatible&quot; content=&quot;IE=edge&quot;&amp;gt;
    &amp;lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&amp;gt;
    &amp;lt;title&amp;gt;modal popUp&amp;lt;/title&amp;gt;
    &amp;lt;style&amp;gt;
        html, body {font-size:62.5%;}
        *, *::before, *::after {box-sizing:border-box; margin:0; padding:0;}
        ul, ol {list-style:none;}
        button {border:0; background:inherit; cursor:pointer;}
        .offscreen {overflow:hidden; position:absolute; width:1px; height:1px; margin:-1px; clip-path:polygon(0 0, 0 0, 0 0);}
        .has_modal {overflow:hidden;}

        header {width:100%; padding:2rem 0; background:orange; font-size:2rem; font-weight:bold; text-align:center;}

        main {max-width:100rem; margin:10rem auto 0;}

        h1 {font-size:10rem;}
        .dummy {margin-top:2rem; font-size:5rem;}

        button {margin-top:2rem; padding:1rem; background:greenyellow; font-size:2rem; border:1px solid #999; border-radius:1rem;}
        button:focus {outline:2px dotted red}
        [class*=close] {margin:0;}

        .modal-layer {display:none; position:fixed; top:0; right:0; bottom:0; left:0; z-index:100;}
        .modal-layer.active {display:block;}
        .modal-layer .modal-dim {position:absolute; top:0; right:0; bottom:0; left:0; background:rgba(0, 0, 0, 0.5);}
        .modal-layer .modal {display:flex; position:absolute; top:50%; left:50%; padding:2rem; background:rgba(255, 255, 255, 1); transform:translate(-50%, -50%); flex-direction:column;}
        .modal-layer .modal:focus {outline:2px dotted red;}
        .modal-layer .modal h2 {font-size:2rem;}
        .modal-layer .modal label {display:flex; margin-top:3rem; padding:0.5rem 0; font-size:2rem; align-items:center;}
        .modal-layer .modal label + label {margin-top:1.5rem;}
        .modal-layer .modal label input {height:3rem; margin-left:0.5rem; padding:0.5rem; border:1px solid #ddd;}
        .modal-layer .modal .btn_close-modal {position:absolute; top:1rem; right:1rem; padding:1.5rem; background:orangered;}
        .modal-layer .modal .btn_close-modal .ico_close {display:flex; overflow:hidden; position:absolute; top:50%; left:50%; width:2rem; height:2rem; padding-top:1.2rem; color:#fff; font-size:3rem; line-height:0; transform:translate(-50%, -50%); justify-content:center; align-items:center;}
        
    &amp;lt;/style&amp;gt;
    &amp;lt;script src=&quot;https://code.jquery.com/jquery-3.6.0.js&quot;&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
    &amp;lt;header&amp;gt;header&amp;lt;/header&amp;gt;
    &amp;lt;main&amp;gt;
        &amp;lt;h1&amp;gt;modal pop&amp;lt;/h1&amp;gt;
        &amp;lt;p class=&quot;dummy&quot;&amp;gt;Lorem ipsum dolor sit amet consectetur adipisicing elit. Accusamus dignissimos hic non, vero praesentium asperiores excepturi modi distinctio nostrum voluptates officia et sint, repellendus vitae exercitationem eos nobis eum deserunt!&amp;lt;/p&amp;gt;

        &amp;lt;button type=&quot;button&quot; aria-controls=&quot;openModal1&quot; class=&quot;btn_open-modal&quot;&amp;gt;openModal1&amp;lt;/button&amp;gt;

        &amp;lt;p class=&quot;dummy&quot;&amp;gt;Lorem ipsum dolor sit amet consectetur adipisicing elit. Accusamus dignissimos hic non, vero praesentium asperiores excepturi modi distinctio nostrum voluptates officia et sint, repellendus vitae exercitationem eos nobis eum deserunt!&amp;lt;/p&amp;gt;
        &amp;lt;p class=&quot;dummy&quot;&amp;gt;Lorem ipsum dolor sit amet consectetur adipisicing elit. Accusamus dignissimos hic non, vero praesentium asperiores excepturi modi distinctio nostrum voluptates officia et sint, repellendus vitae exercitationem eos nobis eum deserunt!&amp;lt;/p&amp;gt;

        &amp;lt;button type=&quot;button&quot; aria-controls=&quot;openModal2&quot; class=&quot;btn_open-modal&quot;&amp;gt;openModal2&amp;lt;/button&amp;gt;

        &amp;lt;p class=&quot;dummy&quot;&amp;gt;Lorem ipsum dolor sit amet consectetur adipisicing elit. Accusamus dignissimos hic non, vero praesentium asperiores excepturi modi distinctio nostrum voluptates officia et sint, repellendus vitae exercitationem eos nobis eum deserunt!&amp;lt;/p&amp;gt;
    &amp;lt;/main&amp;gt;
    &amp;lt;div id=&quot;openModal1&quot; class=&quot;modal-layer&quot;&amp;gt;
        &amp;lt;div class=&quot;modal-dim&quot;&amp;gt;&amp;lt;/div&amp;gt;
        &amp;lt;div role=&quot;dialog&quot; aria-modal=&quot;true&quot; aria-labelledby=&quot;modal-label1&quot; class=&quot;modal&quot;&amp;gt;
            &amp;lt;h2 id=&quot;modal-label1&quot;&amp;gt;dialog label1&amp;lt;/h2&amp;gt;
            &amp;lt;label&amp;gt;&amp;lt;span&amp;gt;이름&amp;lt;/span&amp;gt; &amp;lt;input type=&quot;text&quot; placeholder=&quot;한글로 적으세요&quot;&amp;gt;&amp;lt;/label&amp;gt;
            &amp;lt;label&amp;gt;&amp;lt;span&amp;gt;나이&amp;lt;/span&amp;gt; &amp;lt;input type=&quot;text&quot; placeholder=&quot;숫자로 적으세요&quot;&amp;gt;&amp;lt;/label&amp;gt;
            &amp;lt;button type=&quot;button&quot; class=&quot;btn_close-modal&quot;&amp;gt;&amp;lt;span class=&quot;offscreen&quot;&amp;gt;팝업닫기&amp;lt;/span&amp;gt;&amp;lt;span class=&quot;ico_close&quot;&amp;gt;&amp;amp;#x2df;&amp;lt;/span&amp;gt;&amp;lt;/button&amp;gt;
        &amp;lt;/div&amp;gt;
    &amp;lt;/div&amp;gt;
    &amp;lt;div id=&quot;openModal2&quot; class=&quot;modal-layer&quot;&amp;gt;
        &amp;lt;div class=&quot;modal-dim&quot;&amp;gt;&amp;lt;/div&amp;gt;
        &amp;lt;div role=&quot;dialog&quot; aria-modal=&quot;true&quot; aria-labelledby=&quot;modal-label2&quot; class=&quot;modal&quot;&amp;gt;
            &amp;lt;h2 id=&quot;modal-label2&quot;&amp;gt;dialog label2&amp;lt;/h2&amp;gt;
            &amp;lt;label&amp;gt;&amp;lt;span&amp;gt;이름&amp;lt;/span&amp;gt; &amp;lt;input type=&quot;text&quot; placeholder=&quot;한글로 적으세요&quot;&amp;gt;&amp;lt;/label&amp;gt;
            &amp;lt;label&amp;gt;&amp;lt;span&amp;gt;나이&amp;lt;/span&amp;gt; &amp;lt;input type=&quot;text&quot; placeholder=&quot;숫자로 적으세요&quot;&amp;gt;&amp;lt;/label&amp;gt;
            &amp;lt;button type=&quot;button&quot; class=&quot;btn_close-modal&quot;&amp;gt;&amp;lt;span class=&quot;offscreen&quot;&amp;gt;팝업닫기&amp;lt;/span&amp;gt;&amp;lt;span class=&quot;ico_close&quot;&amp;gt;&amp;amp;#x2df;&amp;lt;/span&amp;gt;&amp;lt;/button&amp;gt;
        &amp;lt;/div&amp;gt;
    &amp;lt;/div&amp;gt;
    
&amp;lt;/body&amp;gt;
&amp;lt;script&amp;gt;
    $(function(){

        var modalDialog = function(){

            var openModalBtn = $('.btn_open-modal'),
                modalLayer = $('.modal-layer');
            
            modalLayer.attr('aria-hidden', true);
            // 포커스 요소 추가
            modalLayer.prepend($('&amp;lt;div data-focus=&quot;focusStart&quot; tabindex=&quot;0&quot;&amp;gt;&amp;lt;/div&amp;gt;'));
            modalLayer.find('[role=dialog]').append($('&amp;lt;div data-focus=&quot;focusEnd&quot; tabindex=&quot;0&quot;&amp;gt;&amp;lt;/div&amp;gt;'));

            openModalBtn.on('click', function(){
                var $this = $(this),
                    openModal = $('#' + $this.attr('aria-controls')),
                    modalDim = openModal.find('.modal-dim'),
                    modal = openModal.find('.modal'),
                    closeModal = openModal.find('.btn_close-modal');

                console.log(openModal.attr('id'));

                $('body').addClass('has_modal');
                openModal.addClass('active').attr('aria-hidden', false);

                // 포커스 이동 함수
                function modalFocus(modalId) {
                    // 팝업 버튼 클릭하면 dialog에 포커스
                    $(modalId).find('[role=dialog]').attr('tabindex', 0).focus(); 
                    
                    // 닫기 버튼에서 tab을 눌렀을 때 role=dialog로 포커스 이동
                    $(modalId).find('[data-focus=focusEnd]').on('focus', function(){
                        $(modalId).find('[role=dialog]').focus();
                    });

                    // role=dialog에서 shift + tab을 눌렀을 때 닫기 버튼으로 포커스 이동
                    $(modalId).find('[data-focus=focusStart]').on('focus', function(){
                        $(modalId).find('.btn_close-modal').focus();
                    });
                }
                modalFocus(openModal);

                // 닫기 버튼 함수
                function modlaClose() {
                    $('body').removeClass('has_modal');
                    openModal.removeClass('active').removeAttr('aria-hidden', true);
                    $this.focus(); // 팝업 닫으면 열었던 버튼으로 포커스 이동
                    $(document).off('keyup.closeModal')
                }

                // 닫기 버튼 클릭 시 팝업차 닫기
                closeModal.on('click', modlaClose)

                // modalDim을 클릭해도 팝업창 닫기
                modalDim.on('click', function(e){
                    if(e.target === e.currentTarget){
                        modlaClose();
                    }
                });

                // 팝업창이 열렸을 때 esc 키를 누르면 닫기
                $(document).on('keyup.closeModal', function(e){
                    var keycode = e.keycode || e.which;
                    if(keycode == 27 &amp;amp;&amp;amp; openModal.hasClass('active')){
                        modlaClose();
                    }
                })
            });
        }
        modalDialog();
    })
&amp;lt;/script&amp;gt;
&amp;lt;/html&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://w3c.github.io/aria-practices/examples/dialog-modal/dialog.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://w3c.github.io/aria-practices/examples/dialog-modal/dialog.html&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1648606064362&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Modal Dialog Example | WAI-ARIA Authoring Practices 1.2&quot; data-og-description=&quot;Address Added The address you provided has been added to your list of delivery addresses. It is ready for immediate use. If you wish to remove it, you can do so from your profile. OK&quot; data-og-host=&quot;w3c.github.io&quot; data-og-source-url=&quot;https://w3c.github.io/aria-practices/examples/dialog-modal/dialog.html&quot; data-og-url=&quot;https://w3c.github.io/aria-practices/examples/dialog-modal/dialog.html&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://w3c.github.io/aria-practices/examples/dialog-modal/dialog.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://w3c.github.io/aria-practices/examples/dialog-modal/dialog.html&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Modal Dialog Example | WAI-ARIA Authoring Practices 1.2&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Address Added The address you provided has been added to your list of delivery addresses. It is ready for immediate use. If you wish to remove it, you can do so from your profile. OK&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;w3c.github.io&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://selosele.github.io/2020/01/29/layer-popup/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://selosele.github.io/2020/01/29/layer-popup/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1648606124123&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;레이어팝업에 웹 접근성을 불어넣다&quot; data-og-description=&quot;웹 접근성이 충분히 보장된 레이어팝업&quot; data-og-host=&quot;selosele.github.io&quot; data-og-source-url=&quot;https://selosele.github.io/2020/01/29/layer-popup/&quot; data-og-url=&quot;https://selosele.github.io/2020/01/29/layer-popup/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/z23sV/hyNQ41pAMf/bXNw8oKLmfwz9AXfK6aGQ1/img.jpg?width=1920&amp;amp;height=1557&amp;amp;face=0_0_1920_1557&quot;&gt;&lt;a href=&quot;https://selosele.github.io/2020/01/29/layer-popup/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://selosele.github.io/2020/01/29/layer-popup/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/z23sV/hyNQ41pAMf/bXNw8oKLmfwz9AXfK6aGQ1/img.jpg?width=1920&amp;amp;height=1557&amp;amp;face=0_0_1920_1557');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;레이어팝업에 웹 접근성을 불어넣다&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;웹 접근성이 충분히 보장된 레이어팝업&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;selosele.github.io&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;*위 사이트를 참고하여 공부했습니다.&lt;/p&gt;</description>
      <category>WEB/jQuery</category>
      <category>Dialog</category>
      <category>Modal</category>
      <category>popup</category>
      <category>wai-aria</category>
      <category>웹접근성</category>
      <author>날라차붕차</author>
      <guid isPermaLink="true">https://bungcha.tistory.com/44</guid>
      <comments>https://bungcha.tistory.com/44#entry44comment</comments>
      <pubDate>Mon, 28 Mar 2022 18:13:32 +0900</pubDate>
    </item>
    <item>
      <title>tab ui ; wai-aria, 웹접근성</title>
      <link>https://bungcha.tistory.com/41</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;script&gt;
  if (window.location.pathname.split(&quot;/&quot;)[1] === &quot;m&quot; &amp;&amp; navigator.userAgent.indexOf(&quot;Tistory&quot;) === -1 &amp;&amp; navigator.userAgent.indexOf(&quot;Android&quot;) === -1) {
    window.location.href = window.location.origin + window.location.pathname.substr(2);
  }
&lt;/script&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Animation3.gif&quot; data-origin-width=&quot;1084&quot; data-origin-height=&quot;344&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/FcfJg/btrAPNEGuqm/FOZjPnUrBQkwPta4Gkk6r0/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/FcfJg/btrAPNEGuqm/FOZjPnUrBQkwPta4Gkk6r0/img.gif&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/FcfJg/btrAPNEGuqm/FOZjPnUrBQkwPta4Gkk6r0/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/FcfJg/btrAPNEGuqm/FOZjPnUrBQkwPta4Gkk6r0/img.gif&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1084&quot; height=&quot;344&quot; data-filename=&quot;Animation3.gif&quot; data-origin-width=&quot;1084&quot; data-origin-height=&quot;344&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;tab ui를 접근성을 높이기 위해 wai-aria를 사용하여 만들어 봤다. tab ui에 들어가는 wai-aria 속성은 aria-selected, aria-labelledby, aria-controls, role 이다. tabindex 태그 속성은 잘못 쓰면 독이 된다. 그래서 접근성을 맞춘 모듈을 보면 주로 tabindex 값을&amp;nbsp; -1, 0, 1 이정도만 쓴다. wai-aria 속성이 모호하고 자세하게 알고 싶다면 명세 사이트에 가서 확인해 보자. 1.1, 1.2 까지 나왔다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사용성을 보장하는 모듈이 어려운 이유는 키보드 컨트롤 까지 되어야 하기 때문에 어렵다. 그렇기 때문에 아래 예제 만드는데 시간이 꽤 들었다. 극히 주관적인 실력으로 만들었다. 키보드 컨트롤을 하다보면 약간 생소할 것이다. 탭키만으로 컨트롤이 안된다. 방향키도 사용을 해야한다. 일반적이지 않아서 비장애인한테는 이해가 안될지 모르지만 보조프로그램을 사용하는 장애인한테는 사용성이 보장된 키보드 컨트롤이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1647393861634&quot; class=&quot;html xml language-html line-numbers&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html lang=&quot;ko-KR&quot;&amp;gt;
&amp;lt;head&amp;gt;
    &amp;lt;meta charset=&quot;UTF-8&quot;&amp;gt;
    &amp;lt;meta http-equiv=&quot;X-UA-Compatible&quot; content=&quot;IE=edge&quot;&amp;gt;
    &amp;lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&amp;gt;
    &amp;lt;title&amp;gt;Document&amp;lt;/title&amp;gt;
    &amp;lt;style&amp;gt;
        html, body {font-size:62.5%;}
        *, *::before, *::after {box-sizing:border-box; margin:0; padding:0;}
        ul, ol {list-style:none;}
        button {border:0; background:inherit; cursor:pointer;}

        main {max-width:100rem; margin:10rem auto 0;}

        .tab_list {display:flex;}
        .tab_list .item {padding:0.5rem 1rem 0.5rem; background:#fff; border-bottom:0.2rem solid rgb(107, 107, 107);}
        .tab_list .item + .item {margin-left:1rem;}

        .tab_list .item.active {background:rgba(255, 111, 0, 0.2); border-bottom-color:rgb(255, 111, 0)}

        .tab_conts {margin-top:2rem; border:1px solid #ddd; font-size:1.6rem;}
        .tab_conts .tab_panel {display:none;  padding:1rem;}
        .tab_conts .tab_panel.active {display:block;}
        
        .tab_conts .tab_panel:focus, button:focus {outline:0.2rem solid rgb(0, 99, 248);}

        .btn {margin-top:2rem; padding:1rem; border:1px solid #ddd; background:#eee;}
    &amp;lt;/style&amp;gt;
    &amp;lt;script src=&quot;https://code.jquery.com/jquery-3.6.0.js&quot;&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
    &amp;lt;div class=&quot;wrap&quot;&amp;gt;
        &amp;lt;main&amp;gt;
            &amp;lt;div class=&quot;tabs&quot;&amp;gt;
                &amp;lt;div role=&quot;tablist&quot; class=&quot;tab_list&quot;&amp;gt;
                    &amp;lt;button type=&quot;button&quot; role=&quot;tab&quot; aria-controls=&quot;tabPanel01&quot; id=&quot;tabList01&quot; class=&quot;item&quot;&amp;gt;&amp;lt;span&amp;gt;탭1&amp;lt;/span&amp;gt;&amp;lt;/button&amp;gt;
                    &amp;lt;button type=&quot;button&quot; role=&quot;tab&quot; aria-controls=&quot;tabPanel02&quot; id=&quot;tabList02&quot; class=&quot;item&quot;&amp;gt;&amp;lt;span&amp;gt;탭2&amp;lt;/span&amp;gt;&amp;lt;/button&amp;gt;
                    &amp;lt;button type=&quot;button&quot; role=&quot;tab&quot; aria-controls=&quot;tabPanel03&quot; id=&quot;tabList03&quot; class=&quot;item&quot;&amp;gt;&amp;lt;span&amp;gt;탭3&amp;lt;/span&amp;gt;&amp;lt;/button&amp;gt;
                    &amp;lt;button type=&quot;button&quot; role=&quot;tab&quot; aria-controls=&quot;tabPanel04&quot; id=&quot;tabList04&quot; class=&quot;item&quot;&amp;gt;&amp;lt;span&amp;gt;탭4&amp;lt;/span&amp;gt;&amp;lt;/button&amp;gt;
                &amp;lt;/div&amp;gt;
                &amp;lt;div class=&quot;tab_conts&quot;&amp;gt;
                    &amp;lt;div role=&quot;tabpanel&quot; aria-labelledby=&quot;tabList01&quot; id=&quot;tabPanel01&quot; class=&quot;tab_panel&quot;&amp;gt;&amp;lt;h2&amp;gt;tab1&amp;lt;/h2&amp;gt;Lorem, ipsum dolor sit amet consectetur adipisicing elit. Explicabo ut tempore eveniet aliquam sapiente at provident labore sit ipsa, dolores deleniti soluta nulla maxime corrupti fuga eos adipisci voluptas itaque!&amp;lt;/div&amp;gt;
                    &amp;lt;div role=&quot;tabpanel&quot; aria-labelledby=&quot;tabList02&quot; id=&quot;tabPanel02&quot; class=&quot;tab_panel&quot;&amp;gt;&amp;lt;h2&amp;gt;tab2&amp;lt;/h2&amp;gt;Lorem ipsum dolor sit amet consectetur adipisicing elit. Saepe reiciendis odit sint, perspiciatis quisquam vero facilis libero. Est quae, suscipit aut, voluptate quis quia voluptatum reiciendis odio ut nostrum repellendus.&amp;lt;/div&amp;gt;
                    &amp;lt;div role=&quot;tabpanel&quot; aria-labelledby=&quot;tabList03&quot; id=&quot;tabPanel03&quot; class=&quot;tab_panel&quot;&amp;gt;&amp;lt;h2&amp;gt;tab3&amp;lt;/h2&amp;gt;Lorem ipsum dolor sit, amet consectetur adipisicing elit. Sunt laudantium eveniet veritatis, ducimus temporibus dolores, omnis totam rem, quod eaque sed. Maiores reprehenderit consectetur error, omnis reiciendis quod quos minima!&amp;lt;/div&amp;gt;
                    &amp;lt;div role=&quot;tabpanel&quot; aria-labelledby=&quot;tabList04&quot; id=&quot;tabPanel04&quot; class=&quot;tab_panel&quot;&amp;gt;&amp;lt;h2&amp;gt;tab4&amp;lt;/h2&amp;gt;Lorem ipsum dolor sit amet consectetur adipisicing elit. Ratione distinctio, asperiores hic veritatis in perspiciatis magni id ea quo repellendus non atque eos doloribus minus debitis! Dolorum magnam delectus adipisci.&amp;lt;/div&amp;gt;
                &amp;lt;/div&amp;gt;
            &amp;lt;/div&amp;gt;
            &amp;lt;button type=&quot;button&quot; class=&quot;btn&quot;&amp;gt;button&amp;lt;/button&amp;gt;
        &amp;lt;/main&amp;gt;
    &amp;lt;/div&amp;gt;
    &amp;lt;script&amp;gt;
        $(function(){
            var tabs = $('.tabs'),
                tabList = tabs.find('.tab_list').find('.item'),
                tabConts = tabs.find('.tab_conts'),
                tabPanel = tabConts.find('.tab_panel');

            tabList.on('click', function(){
                var $this = $(this),
                    $targetIndex = $this.index();

                $this.addClass('active').siblings().removeClass('active');
                tabPanel.eq($targetIndex).addClass('active').siblings().removeClass('active');

                // wai-aria
                $this.attr({'aria-selected': true, 'tabindex': 0}).siblings().attr({'aria-selected': false, 'tabindex': -1});
            })
            .on('keyup', function(e){
                var $this = $(this),
                    keycode = e.keycode || e.which; // // keycode 명령어에 반응하지 않는 브라우저도 있어서, 다양한 브라우저에 대응하기 위해서 keycode와 which를 같이 사용

                if(keycode == 39 || keycode == 40){ // 오른쪽 방향키 이거나 아래 방향키
                    console.log('right or down');

                    var nextTab = $this.next(),
                        nextTabSiblings = nextTab.siblings(),
                        thisPanel = $('#' + nextTab.attr('aria-controls'));

                    nextTab.addClass('active').attr({'aria-selected': true, 'tabindex': 0}).focus();
                    nextTabSiblings.removeClass('active').attr({'aria-selected': false, 'tabindex': -1});

                    thisPanel.addClass('active').siblings().removeClass('active');

                    // tab list 마지막 요소에서
                    var lastTab = $this.last().attr('aria-controls'),
                        lastPanel = tabPanel.last().attr('id');

                    if(lastTab == lastPanel){
                        var fisrtTab = tabList.first(),
                            firstPanel = tabPanel.first();

                        fisrtTab.addClass('active').attr({'aria-selected': true, 'tabindex': 0}).focus();
                        fisrtTab.siblings().removeClass('active').attr({'aria-selected': false, 'tabindex': -1});
                        firstPanel.addClass('active').siblings().removeClass('active');
                    }
                }else if(keycode == 37 || keycode == 38){ // 왼쪽 방향키 이거나 위쪽 방향키
                    console.log('left or up');

                    var prevTab = $this.prev(),
                        prevTabSiblings = prevTab.siblings(),
                        thisPanel = $('#' + prevTab.attr('aria-controls'));

                    prevTab.addClass('active').attr({'aria-selected': true, 'tabindex': 0}).focus();
                    prevTabSiblings.removeClass('active').attr({'aria-selected': false, 'tabindex': -1});

                    thisPanel.addClass('active').siblings().removeClass('active');

                    // tab list 처음 요소에서
                    var firstTab = $this.first().attr('aria-controls'),
                        firstPanel = tabPanel.first().attr('id');

                    if(firstTab == firstPanel){
                        var lastTab = tabList.last(),
                            lastPanel = tabPanel.last();

                        lastTab.addClass('active').attr({'aria-selected': true, 'tabindex': 0}).focus();
                        lastTab.siblings().removeClass('active').attr({'aria-selected': false, 'tabindex': -1});
                        lastPanel.addClass('active').siblings().removeClass('active');
                    }
                }
            });

            tabList.eq(0).trigger('click'); // 페이지가 로딩이 되면 첫번 째 탭이 클릭되어 있음(즉, active 클래스 들어가 있음)

            // Accessibility Set
            function acc(){
                if(!tabList.first()){
                    $(this).attr({'aria-selected': false, 'tabindex': -1});
                }else{
                    $(this).attr({'aria-selected': true, 'tabindex': 0});
                }
                
                tabPanel.attr('tabindex', 0);
            }
            acc();
        })
    &amp;lt;/script&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.w3.org/TR/wai-aria-practices/examples/tabs/tabs-1/tabs.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.w3.org/TR/wai-aria-practices/examples/tabs/tabs-1/tabs.html&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1647677031186&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Example of Tabs with Automatic Activation | WAI-ARIA Authoring Practices 1.2&quot; data-og-description=&quot;Nils Frahm Agnes Obel Joke Nils Frahm is a German musician, composer and record producer based in Berlin. He is known for combining classical and electronic music and for an unconventional approach to the piano in which he mixes a grand piano, upright pian&quot; data-og-host=&quot;www.w3.org&quot; data-og-source-url=&quot;https://www.w3.org/TR/wai-aria-practices/examples/tabs/tabs-1/tabs.html&quot; data-og-url=&quot;https://www.w3.org/TR/wai-aria-practices/examples/tabs/tabs-1/tabs.html&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://www.w3.org/TR/wai-aria-practices/examples/tabs/tabs-1/tabs.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.w3.org/TR/wai-aria-practices/examples/tabs/tabs-1/tabs.html&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Example of Tabs with Automatic Activation | WAI-ARIA Authoring Practices 1.2&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Nils Frahm Agnes Obel Joke Nils Frahm is a German musician, composer and record producer based in Berlin. He is known for combining classical and electronic music and for an unconventional approach to the piano in which he mixes a grand piano, upright pian&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.w3.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;tai ui wai-aria 예제 사이트&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.w3.org/TR/wai-aria-1.1/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.w3.org/TR/wai-aria-1.1/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1647678073645&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Accessible Rich Internet Applications (WAI-ARIA) 1.1&quot; data-og-description=&quot;A section of a page that consists of a composition that forms an independent part of a document, page, or site. An article is not a navigational landmark, but may be nested to form a discussion where assistive technologies could pay attention to article ne&quot; data-og-host=&quot;www.w3.org&quot; data-og-source-url=&quot;https://www.w3.org/TR/wai-aria-1.1/&quot; data-og-url=&quot;https://www.w3.org/TR/wai-aria-1.1/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/ew1jS/hyNKf2ApTA/JlZdGgCrgfWoJtKkXV0SqK/img.png?width=723&amp;amp;height=389&amp;amp;face=0_0_723_389,https://scrap.kakaocdn.net/dn/44IlS/hyNJ9H2Coo/aulQ5gEr9XoryhVU0vnVnK/img.png?width=600&amp;amp;height=269&amp;amp;face=0_0_600_269&quot;&gt;&lt;a href=&quot;https://www.w3.org/TR/wai-aria-1.1/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.w3.org/TR/wai-aria-1.1/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/ew1jS/hyNKf2ApTA/JlZdGgCrgfWoJtKkXV0SqK/img.png?width=723&amp;amp;height=389&amp;amp;face=0_0_723_389,https://scrap.kakaocdn.net/dn/44IlS/hyNJ9H2Coo/aulQ5gEr9XoryhVU0vnVnK/img.png?width=600&amp;amp;height=269&amp;amp;face=0_0_600_269');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Accessible Rich Internet Applications (WAI-ARIA) 1.1&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;A section of a page that consists of a composition that forms an independent part of a document, page, or site. An article is not a navigational landmark, but may be nested to form a discussion where assistive technologies could pay attention to article ne&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.w3.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;wai-aria 1.1&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.w3.org/TR/wai-aria-1.2/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.w3.org/TR/wai-aria-1.2/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1647678034800&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Accessible Rich Internet Applications (WAI-ARIA) 1.2&quot; data-og-description=&quot;A section of a page that consists of a composition that forms an independent part of a document, page, or site. An article is not a navigational landmark, but may be nested to form a discussion where assistive technologies could pay attention to article ne&quot; data-og-host=&quot;www.w3.org&quot; data-og-source-url=&quot;https://www.w3.org/TR/wai-aria-1.2/&quot; data-og-url=&quot;https://www.w3.org/TR/wai-aria-1.2/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/baix0O/hyNKdp8prq/6GqQheCrC8ZXMpRnbhlRWk/img.png?width=723&amp;amp;height=389&amp;amp;face=0_0_723_389&quot;&gt;&lt;a href=&quot;https://www.w3.org/TR/wai-aria-1.2/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.w3.org/TR/wai-aria-1.2/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/baix0O/hyNKdp8prq/6GqQheCrC8ZXMpRnbhlRWk/img.png?width=723&amp;amp;height=389&amp;amp;face=0_0_723_389');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Accessible Rich Internet Applications (WAI-ARIA) 1.2&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;A section of a page that consists of a composition that forms an independent part of a document, page, or site. An article is not a navigational landmark, but may be nested to form a discussion where assistive technologies could pay attention to article ne&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.w3.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;wai-aria 1.2&lt;/p&gt;</description>
      <category>WEB/jQuery</category>
      <category>aria-controls</category>
      <category>aria-labelledby</category>
      <category>aria-selected</category>
      <category>first()</category>
      <category>keyup()</category>
      <category>last()</category>
      <category>role=&amp;quot;tab&amp;quot;</category>
      <category>role=&amp;quot;tabpanel&amp;quot;</category>
      <category>tab ui</category>
      <category>tabindex</category>
      <author>날라차붕차</author>
      <guid isPermaLink="true">https://bungcha.tistory.com/41</guid>
      <comments>https://bungcha.tistory.com/41#entry41comment</comments>
      <pubDate>Wed, 16 Mar 2022 10:24:25 +0900</pubDate>
    </item>
    <item>
      <title>tab ui ; index(), eq(), trigger()</title>
      <link>https://bungcha.tistory.com/40</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;script&gt;
  if (window.location.pathname.split(&quot;/&quot;)[1] === &quot;m&quot; &amp;&amp; navigator.userAgent.indexOf(&quot;Tistory&quot;) === -1 &amp;&amp; navigator.userAgent.indexOf(&quot;Android&quot;) === -1) {
    window.location.href = window.location.origin + window.location.pathname.substr(2);
  }
&lt;/script&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;tab2.gif&quot; data-origin-width=&quot;1464&quot; data-origin-height=&quot;490&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pMSs6/btrvYIBOtch/GzNeftSZlkel0Xnjen4WoK/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pMSs6/btrvYIBOtch/GzNeftSZlkel0Xnjen4WoK/img.gif&quot; data-alt=&quot;tab ui&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pMSs6/btrvYIBOtch/GzNeftSZlkel0Xnjen4WoK/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/pMSs6/btrvYIBOtch/GzNeftSZlkel0Xnjen4WoK/img.gif&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1464&quot; height=&quot;490&quot; data-filename=&quot;tab2.gif&quot; data-origin-width=&quot;1464&quot; data-origin-height=&quot;490&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;tab ui&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;eq(), index() 메서드를 이용해서 tab ui를 만들어 보자. index() 메서드는 선택자의 순번을 알 수 있다. eq() 메서드는 번호에 해당하는 요소를 가져올 수 있다. eq(), index() 메서드를 사용해서 만들면 tab list와 tab panel 속성 값을 맞출 필요 없다.&lt;/p&gt;
&lt;pre id=&quot;code_1647329767745&quot; class=&quot;html xml language-html line-numbers&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html lang=&quot;ko-KR&quot;&amp;gt;
&amp;lt;head&amp;gt;
    &amp;lt;meta charset=&quot;UTF-8&quot;&amp;gt;
    &amp;lt;meta http-equiv=&quot;X-UA-Compatible&quot; content=&quot;IE=edge&quot;&amp;gt;
    &amp;lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&amp;gt;
    &amp;lt;title&amp;gt;Document&amp;lt;/title&amp;gt;
    &amp;lt;style&amp;gt;
        html, body {font-size:62.5%;}
        *, *::before, *::after {box-sizing:border-box; margin:0; padding:0;}
        ul, ol {list-style:none;}
        button {border:0; background:inherit; cursor:pointer;}

        main {max-width:100rem; margin:10rem auto 0;}

        .tab_list ul {display:flex;}
        .tab_list ul li + li {margin-left:1rem;}
        .tab_list .item {padding:0.5rem 1rem 0.5rem; background:#fff; border-bottom:0.2rem solid rgb(107, 107, 107);}

        .tab_list ul li.active .item {background:rgba(255, 111, 0, 0.2); border-bottom-color:rgb(255, 111, 0)}

        .tab_panel {margin-top:2rem; padding:1rem; border:1px solid #ddd; font-size:1.6rem;}
        .tab_panel .item {display:none;}
        .tab_panel .item.active {display:block;}
    &amp;lt;/style&amp;gt;
    &amp;lt;script src=&quot;https://code.jquery.com/jquery-3.6.0.js&quot;&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
    &amp;lt;div class=&quot;wrap&quot;&amp;gt;
        &amp;lt;main&amp;gt;
            &amp;lt;div class=&quot;tabs&quot;&amp;gt;
                &amp;lt;div class=&quot;tab_list&quot;&amp;gt;
                    &amp;lt;ul&amp;gt;
                        &amp;lt;li&amp;gt;&amp;lt;button type=&quot;button&quot; class=&quot;item&quot;&amp;gt;&amp;lt;span&amp;gt;탭1&amp;lt;/span&amp;gt;&amp;lt;/button&amp;gt;&amp;lt;/li&amp;gt;
                        &amp;lt;li&amp;gt;&amp;lt;button type=&quot;button&quot; class=&quot;item&quot;&amp;gt;&amp;lt;span&amp;gt;탭2&amp;lt;/span&amp;gt;&amp;lt;/button&amp;gt;&amp;lt;/li&amp;gt;
                        &amp;lt;li&amp;gt;&amp;lt;button type=&quot;button&quot; class=&quot;item&quot;&amp;gt;&amp;lt;span&amp;gt;탭3&amp;lt;/span&amp;gt;&amp;lt;/button&amp;gt;&amp;lt;/li&amp;gt;
                        &amp;lt;li&amp;gt;&amp;lt;button type=&quot;button&quot; class=&quot;item&quot;&amp;gt;&amp;lt;span&amp;gt;탭4&amp;lt;/span&amp;gt;&amp;lt;/button&amp;gt;&amp;lt;/li&amp;gt;
                    &amp;lt;/ul&amp;gt;
                &amp;lt;/div&amp;gt;
                &amp;lt;div class=&quot;tab_panel&quot;&amp;gt;
                    &amp;lt;div class=&quot;item&quot;&amp;gt;&amp;lt;h2&amp;gt;tab1&amp;lt;/h2&amp;gt;Lorem, ipsum dolor sit amet consectetur adipisicing elit. Explicabo ut tempore eveniet aliquam sapiente at provident labore sit ipsa, dolores deleniti soluta nulla maxime corrupti fuga eos adipisci voluptas itaque!&amp;lt;/div&amp;gt;
                    &amp;lt;div class=&quot;item&quot;&amp;gt;&amp;lt;h2&amp;gt;tab2&amp;lt;/h2&amp;gt;Lorem ipsum dolor sit amet consectetur adipisicing elit. Saepe reiciendis odit sint, perspiciatis quisquam vero facilis libero. Est quae, suscipit aut, voluptate quis quia voluptatum reiciendis odio ut nostrum repellendus.
                    Blanditiis tenetur perferendis aspernatur maiores sed quis illo veritatis culpa in distinctio ducimus voluptatibus nesciunt est atque facilis quos illum deserunt, eaque necessitatibus laboriosam non aperiam. Quis laboriosam explicabo placeat?&amp;lt;/div&amp;gt;
                    &amp;lt;div class=&quot;item&quot;&amp;gt;&amp;lt;h2&amp;gt;tab3&amp;lt;/h2&amp;gt;Lorem ipsum dolor sit, amet consectetur adipisicing elit. Sunt laudantium eveniet veritatis, ducimus temporibus dolores, omnis totam rem, quod eaque sed. Maiores reprehenderit consectetur error, omnis reiciendis quod quos minima!
                    Delectus fugit alias architecto expedita, officiis accusamus sit molestiae id nihil nostrum quos fuga doloribus quidem saepe error optio vitae officia tempora non ducimus dolore est deserunt possimus. Labore, laboriosam.
                    Soluta earum iusto rem nihil error! Totam dicta nobis quas assumenda ullam vero saepe. Quam, dolorem? Nisi molestiae, ipsa laboriosam architecto quas blanditiis quasi minus tenetur mollitia velit, asperiores nesciunt.&amp;lt;/div&amp;gt;
                    &amp;lt;div class=&quot;item&quot;&amp;gt;&amp;lt;h2&amp;gt;tab4&amp;lt;/h2&amp;gt;Lorem ipsum dolor sit amet consectetur adipisicing elit. Ratione distinctio, asperiores hic veritatis in perspiciatis magni id ea quo repellendus non atque eos doloribus minus debitis! Dolorum magnam delectus adipisci.
                    Asperiores repellat odit debitis inventore, tenetur tempore exercitationem impedit commodi, alias harum architecto aliquid quidem provident ipsum atque sunt aspernatur quos. Vitae fuga sed accusantium, veniam perferendis sit facere dolorum.&amp;lt;/div&amp;gt;
                &amp;lt;/div&amp;gt;
            &amp;lt;/div&amp;gt;
        &amp;lt;/main&amp;gt;
    &amp;lt;/div&amp;gt;
    &amp;lt;script&amp;gt;
        $(function(){
            var tabs = $('.tabs'),
                tabList = tabs.find('.tab_list').find('li'),
                tabPanel = tabs.find('.tab_panel'),
                tabPanelItem = tabPanel.find('.item');

            tabList.on('click', function(){
                var $this = $(this),
                    $targetIndex = $this.index();
                    console.log($targetIndex);

                $this.addClass('active').siblings().removeClass('active');
                tabPanelItem.eq($targetIndex).addClass('active').siblings().removeClass('active');
            })

            tabList.eq(0).trigger('click');
        })
    &amp;lt;/script&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;trigger()메서드는 지정한 이벤트를 강제로 발생시킨다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=r4JHvKFYzOc&amp;amp;list=PL-qMANrofLyu4HcK14ntl-o7d-eHxo7-U&amp;amp;index=18&quot;&gt;https://www.youtube.com/watch?v=r4JHvKFYzOc&amp;amp;list=PL-qMANrofLyu4HcK14ntl-o7d-eHxo7-U&amp;amp;index=18&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;youtube&quot; data-video-url=&quot;https://www.youtube.com/watch?v=r4JHvKFYzOc&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/bodG5X/hyNHV39gl5/CWsakiDxUZwzmKxTO70XH1/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=0_0_1280_720&quot; data-video-width=&quot;860&quot; data-video-height=&quot;484&quot; data-video-origin-width=&quot;860&quot; data-video-origin-height=&quot;484&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/r4JHvKFYzOc&quot; width=&quot;860&quot; height=&quot;484&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;위 동영상 참고했습니다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;</description>
      <category>WEB/jQuery</category>
      <category>eq()</category>
      <category>index()</category>
      <category>tab ui</category>
      <category>trigger()</category>
      <author>날라차붕차</author>
      <guid isPermaLink="true">https://bungcha.tistory.com/40</guid>
      <comments>https://bungcha.tistory.com/40#entry40comment</comments>
      <pubDate>Tue, 15 Mar 2022 16:37:24 +0900</pubDate>
    </item>
    <item>
      <title>tab ui ; attr()</title>
      <link>https://bungcha.tistory.com/39</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;
&lt;script&gt;
  if (window.location.pathname.split(&quot;/&quot;)[1] === &quot;m&quot; &amp;&amp; navigator.userAgent.indexOf(&quot;Tistory&quot;) === -1 &amp;&amp; navigator.userAgent.indexOf(&quot;Android&quot;) === -1) {
    window.location.href = window.location.origin + window.location.pathname.substr(2);
  }
&lt;/script&gt;
&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;tab1.gif&quot; data-origin-width=&quot;1464&quot; data-origin-height=&quot;490&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/GaKBY/btrv4m5LqNl/ruwKyhcVkeHU2aOoHKDVL1/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/GaKBY/btrv4m5LqNl/ruwKyhcVkeHU2aOoHKDVL1/img.gif&quot; data-alt=&quot;tab ui&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/GaKBY/btrv4m5LqNl/ruwKyhcVkeHU2aOoHKDVL1/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/GaKBY/btrv4m5LqNl/ruwKyhcVkeHU2aOoHKDVL1/img.gif&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1464&quot; height=&quot;490&quot; data-filename=&quot;tab1.gif&quot; data-origin-width=&quot;1464&quot; data-origin-height=&quot;490&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;tab ui&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;attr() 메서드를 활용해서 tab ui를 만들어보자. attr() 메서드는 요소의 속성 값을 가져오거나 다른 요소에 넣을 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 예제의 포인트는 tab list의 속성 값과 tab panel의 속성 값이 일치해야 한다.&lt;/p&gt;
&lt;pre id=&quot;code_1647328120573&quot; class=&quot;html xml language-html line-numbers&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html lang=&quot;ko-KR&quot;&amp;gt;
&amp;lt;head&amp;gt;
    &amp;lt;meta charset=&quot;UTF-8&quot;&amp;gt;
    &amp;lt;meta http-equiv=&quot;X-UA-Compatible&quot; content=&quot;IE=edge&quot;&amp;gt;
    &amp;lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&amp;gt;
    &amp;lt;title&amp;gt;Document&amp;lt;/title&amp;gt;
    &amp;lt;style&amp;gt;
        html, body {font-size:62.5%;}
        *, *::before, *::after {box-sizing:border-box; margin:0; padding:0;}
        ul, ol {list-style:none;}
        button {border:0; background:inherit; cursor:pointer;}

        main {max-width:100rem; margin:10rem auto 0;}

        .tab_list ul {display:flex;}
        .tab_list ul li + li {margin-left:1rem;}
        .tab_list .item {padding:0.5rem 1rem 0.5rem; background:#fff; border-bottom:0.2rem solid rgb(107, 107, 107);}

        .tab_list ul li.active .item {background:rgba(255, 111, 0, 0.2); border-bottom-color:rgb(255, 111, 0)}

        .tab_panel {margin-top:2rem; padding:1rem; border:1px solid #ddd; font-size:1.6rem;}
        .tab_panel .item {display:none;}
        .tab_panel .item.active {display:block;}
    &amp;lt;/style&amp;gt;
    &amp;lt;script src=&quot;https://code.jquery.com/jquery-3.6.0.js&quot;&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
    &amp;lt;div class=&quot;wrap&quot;&amp;gt;
        &amp;lt;main&amp;gt;
            &amp;lt;div class=&quot;tabs&quot;&amp;gt;
                &amp;lt;div class=&quot;tab_list&quot;&amp;gt;
                    &amp;lt;ul&amp;gt;
                        &amp;lt;li data-id=&quot;tab1&quot; class=&quot;active&quot;&amp;gt;&amp;lt;button type=&quot;button&quot; class=&quot;item&quot;&amp;gt;&amp;lt;span&amp;gt;탭1&amp;lt;/span&amp;gt;&amp;lt;/button&amp;gt;&amp;lt;/li&amp;gt;
                        &amp;lt;li data-id=&quot;tab2&quot;&amp;gt;&amp;lt;button type=&quot;button&quot; class=&quot;item&quot;&amp;gt;&amp;lt;span&amp;gt;탭2&amp;lt;/span&amp;gt;&amp;lt;/button&amp;gt;&amp;lt;/li&amp;gt;
                        &amp;lt;li data-id=&quot;tab3&quot;&amp;gt;&amp;lt;button type=&quot;button&quot; class=&quot;item&quot;&amp;gt;&amp;lt;span&amp;gt;탭3&amp;lt;/span&amp;gt;&amp;lt;/button&amp;gt;&amp;lt;/li&amp;gt;
                        &amp;lt;li data-id=&quot;tab4&quot;&amp;gt;&amp;lt;button type=&quot;button&quot; class=&quot;item&quot;&amp;gt;&amp;lt;span&amp;gt;탭4&amp;lt;/span&amp;gt;&amp;lt;/button&amp;gt;&amp;lt;/li&amp;gt;
                    &amp;lt;/ul&amp;gt;
                &amp;lt;/div&amp;gt;
                &amp;lt;div class=&quot;tab_panel&quot;&amp;gt;
                    &amp;lt;div id=&quot;tab1&quot; class=&quot;item active&quot;&amp;gt;&amp;lt;h2&amp;gt;tab1&amp;lt;/h2&amp;gt;Lorem, ipsum dolor sit amet consectetur adipisicing elit. Explicabo ut tempore eveniet aliquam sapiente at provident labore sit ipsa, dolores deleniti soluta nulla maxime corrupti fuga eos adipisci voluptas itaque!&amp;lt;/div&amp;gt;
                    &amp;lt;div id=&quot;tab2&quot; class=&quot;item&quot;&amp;gt;&amp;lt;h2&amp;gt;tab2&amp;lt;/h2&amp;gt;Lorem ipsum dolor sit amet consectetur adipisicing elit. Saepe reiciendis odit sint, perspiciatis quisquam vero facilis libero. Est quae, suscipit aut, voluptate quis quia voluptatum reiciendis odio ut nostrum repellendus.
                    Blanditiis tenetur perferendis aspernatur maiores sed quis illo veritatis culpa in distinctio ducimus voluptatibus nesciunt est atque facilis quos illum deserunt, eaque necessitatibus laboriosam non aperiam. Quis laboriosam explicabo placeat?&amp;lt;/div&amp;gt;
                    &amp;lt;div id=&quot;tab3&quot; class=&quot;item&quot;&amp;gt;&amp;lt;h2&amp;gt;tab3&amp;lt;/h2&amp;gt;Lorem ipsum dolor sit, amet consectetur adipisicing elit. Sunt laudantium eveniet veritatis, ducimus temporibus dolores, omnis totam rem, quod eaque sed. Maiores reprehenderit consectetur error, omnis reiciendis quod quos minima!
                    Delectus fugit alias architecto expedita, officiis accusamus sit molestiae id nihil nostrum quos fuga doloribus quidem saepe error optio vitae officia tempora non ducimus dolore est deserunt possimus. Labore, laboriosam.
                    Soluta earum iusto rem nihil error! Totam dicta nobis quas assumenda ullam vero saepe. Quam, dolorem? Nisi molestiae, ipsa laboriosam architecto quas blanditiis quasi minus tenetur mollitia velit, asperiores nesciunt.&amp;lt;/div&amp;gt;
                    &amp;lt;div id=&quot;tab4&quot; class=&quot;item&quot;&amp;gt;&amp;lt;h2&amp;gt;tab4&amp;lt;/h2&amp;gt;Lorem ipsum dolor sit amet consectetur adipisicing elit. Ratione distinctio, asperiores hic veritatis in perspiciatis magni id ea quo repellendus non atque eos doloribus minus debitis! Dolorum magnam delectus adipisci.
                    Asperiores repellat odit debitis inventore, tenetur tempore exercitationem impedit commodi, alias harum architecto aliquid quidem provident ipsum atque sunt aspernatur quos. Vitae fuga sed accusantium, veniam perferendis sit facere dolorum.&amp;lt;/div&amp;gt;
                &amp;lt;/div&amp;gt;
            &amp;lt;/div&amp;gt;
        &amp;lt;/main&amp;gt;
    &amp;lt;/div&amp;gt;
    &amp;lt;script&amp;gt;
        $(function(){
            var tabs = $('.tabs'),
                tabList = tabs.find('.tab_list').find('li'),
                tabPanel = tabs.find('.tab_panel');

            tabList.on('click', function(){
                var $this = $(this),
                    $target = $this.attr('data-id');

                $this.addClass('active').siblings().removeClass('active');
                tabPanel.find('#' + $target).addClass('active').siblings().removeClass('active');
            })
        })
    &amp;lt;/script&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=94K5cot4GVs&amp;amp;list=PL-qMANrofLyu4HcK14ntl-o7d-eHxo7-U&amp;amp;index=16&amp;amp;t=5s&quot;&gt;https://www.youtube.com/watch?v=94K5cot4GVs&amp;amp;list=PL-qMANrofLyu4HcK14ntl-o7d-eHxo7-U&amp;amp;index=16&amp;amp;t=5s&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;youtube&quot; data-video-url=&quot;https://www.youtube.com/watch?v=94K5cot4GVs&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/cB8OS5/hyNH56IQcN/VcbKI8sy8SsYWgS8YfQKvk/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=0_0_1280_720&quot; data-video-width=&quot;860&quot; data-video-height=&quot;484&quot; data-video-origin-width=&quot;860&quot; data-video-origin-height=&quot;484&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/94K5cot4GVs&quot; width=&quot;860&quot; height=&quot;484&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;위 동영상 참고했습니다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;</description>
      <category>WEB/jQuery</category>
      <category>attr()</category>
      <category>tab ui</category>
      <author>날라차붕차</author>
      <guid isPermaLink="true">https://bungcha.tistory.com/39</guid>
      <comments>https://bungcha.tistory.com/39#entry39comment</comments>
      <pubDate>Tue, 15 Mar 2022 16:09:18 +0900</pubDate>
    </item>
    <item>
      <title>scroll 이벤트 ; attr(), 이미지 경로 변경</title>
      <link>https://bungcha.tistory.com/37</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;script&gt;
  if (window.location.pathname.split(&quot;/&quot;)[1] === &quot;m&quot; &amp;&amp; navigator.userAgent.indexOf(&quot;Tistory&quot;) === -1 &amp;&amp; navigator.userAgent.indexOf(&quot;Android&quot;) === -1) {
    window.location.href = window.location.origin + window.location.pathname.substr(2);
  }
&lt;/script&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;scroll_header.gif&quot; data-origin-width=&quot;1602&quot; data-origin-height=&quot;378&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bWA0Nj/btrvRzF1QzW/e2TAeyKctKkqBFYBYxmYF1/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bWA0Nj/btrvRzF1QzW/e2TAeyKctKkqBFYBYxmYF1/img.gif&quot; data-alt=&quot;스크롤 이벤트&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bWA0Nj/btrvRzF1QzW/e2TAeyKctKkqBFYBYxmYF1/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/bWA0Nj/btrvRzF1QzW/e2TAeyKctKkqBFYBYxmYF1/img.gif&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1602&quot; height=&quot;378&quot; data-filename=&quot;scroll_header.gif&quot; data-origin-width=&quot;1602&quot; data-origin-height=&quot;378&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;스크롤 이벤트&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스크롤 양에 따라 헤더의 사이즈와 로고 이미지의 경로 수정을 해보자.&lt;/p&gt;
&lt;pre id=&quot;code_1647239699925&quot; class=&quot;html xml language-html line-numbers&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html lang=&quot;ko-KR&quot;&amp;gt;
&amp;lt;head&amp;gt;
    &amp;lt;meta charset=&quot;UTF-8&quot;&amp;gt;
    &amp;lt;meta http-equiv=&quot;X-UA-Compatible&quot; content=&quot;IE=edge&quot;&amp;gt;
    &amp;lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&amp;gt;
    &amp;lt;title&amp;gt;Document&amp;lt;/title&amp;gt;
    &amp;lt;style&amp;gt;
        html, body {font-size:62.5%;}
        *, *::before, *::after {box-sizing:border-box; margin:0; padding:0;}
        ul, ol {list-style:none;}

        .header {display:flex; position:fixed; top:0; right:0; left:0; padding:3rem 2rem; background:rgba(138, 43, 226, 1); color:#fff; font-size:2rem; align-items:center; justify-content:space-between; transition:all 0.2s;}
        .logo img {width:200px; transition:all 0.2s;}
        
        .header.shrink {padding:1rem 2rem; background:rgba(138, 43, 226, 0.7);}
        .header.shrink .logo img {width:100px;}

        nav ul {display:flex;}
        nav ul li + li {margin-left:10px;}

        main {height:2000px;}
        
    &amp;lt;/style&amp;gt;
    &amp;lt;script src=&quot;https://code.jquery.com/jquery-3.6.0.js&quot;&amp;gt;&amp;lt;/script&amp;gt;
    &amp;lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/jquery-throttle-debounce/1.1/jquery.ba-throttle-debounce.min.js&quot;&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
    &amp;lt;div class=&quot;wrap&quot;&amp;gt;
        &amp;lt;header class=&quot;header&quot;&amp;gt;
            &amp;lt;div class=&quot;logo&quot;&amp;gt;&amp;lt;img src=&quot;https://www.google.com/images/branding/googlelogo/1x/googlelogo_light_color_272x92dp.png&quot; alt=&quot;&quot;&amp;gt;&amp;lt;/div&amp;gt;
            &amp;lt;nav&amp;gt;&amp;lt;ul&amp;gt;
                &amp;lt;li&amp;gt;&amp;lt;a href=&quot;#&quot;&amp;gt;&amp;lt;span&amp;gt;메뉴1&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
                &amp;lt;li&amp;gt;&amp;lt;a href=&quot;#&quot;&amp;gt;&amp;lt;span&amp;gt;메뉴2&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
                &amp;lt;li&amp;gt;&amp;lt;a href=&quot;#&quot;&amp;gt;&amp;lt;span&amp;gt;메뉴3&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
                &amp;lt;li&amp;gt;&amp;lt;a href=&quot;#&quot;&amp;gt;&amp;lt;span&amp;gt;메뉴4&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
                &amp;lt;li&amp;gt;&amp;lt;a href=&quot;#&quot;&amp;gt;&amp;lt;span&amp;gt;메뉴5&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
            &amp;lt;/ul&amp;gt;&amp;lt;/nav&amp;gt;
        &amp;lt;/header&amp;gt;
        &amp;lt;main&amp;gt;&amp;lt;/main&amp;gt;
    &amp;lt;/div&amp;gt;
    &amp;lt;script&amp;gt;
        $(function(){
            var wind = $(window);
            var header = $('.header');
            var headerOffsetTop = header.offset().top;
            var headerOutherHeight = header.outerHeight();
            var threshold = headerOffsetTop + headerOutherHeight;

            wind.on('scroll', $.throttle(1000/15, function(){
                var windScrollTop = $(this).scrollTop();

                var defaultLogo = 'https://www.google.com/images/branding/googlelogo/1x/googlelogo_light_color_272x92dp.png';
                var smallLogo = 'https://www.google.com/images/branding/googlelogo/2x/googlelogo_light_color_92x30dp.png';

                if(windScrollTop &amp;gt;= threshold){
                    if(!header.hasClass('shrink')){ // header에 shrink 클래스가 없으면
                        header.addClass('shrink');
                        switchImages(smallLogo);
                    }
                }else{
                    if(header.hasClass('shrink')){ // header에 shrink 클래스가 있으면
                        header.removeClass('shrink');
                        switchImages(defaultLogo);
                    }
                }
            }));

            //switchImages 함수
            function switchImages(newPath){
                var logo = $('.logo').find('img');
                logo.fadeOut(200, function(){
                    logo.attr('src', newPath).fadeIn(200);
                });
            }

        })
    &amp;lt;/script&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&lt;/code&gt;&lt;/pre&gt;</description>
      <category>WEB/jQuery</category>
      <category>attr()</category>
      <category>fadeIn()</category>
      <category>fadeOut()</category>
      <category>offset().top</category>
      <category>outerHeight()</category>
      <category>scroll()</category>
      <category>scrollTop()</category>
      <category>throttle JS</category>
      <author>날라차붕차</author>
      <guid isPermaLink="true">https://bungcha.tistory.com/37</guid>
      <comments>https://bungcha.tistory.com/37#entry37comment</comments>
      <pubDate>Mon, 14 Mar 2022 15:35:25 +0900</pubDate>
    </item>
    <item>
      <title>scroll 이벤트 ; clone(), throttle JS, dom 복사</title>
      <link>https://bungcha.tistory.com/36</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;
&lt;script&gt;
  if (window.location.pathname.split(&quot;/&quot;)[1] === &quot;m&quot; &amp;&amp; navigator.userAgent.indexOf(&quot;Tistory&quot;) === -1 &amp;&amp; navigator.userAgent.indexOf(&quot;Android&quot;) === -1) {
    window.location.href = window.location.origin + window.location.pathname.substr(2);
  }
&lt;/script&gt;
&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;scroll_header2.gif&quot; data-origin-width=&quot;1562&quot; data-origin-height=&quot;939&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dBzGyD/btrvK2OVFJS/ERSkv8aMcwLMDrKSmpbQz0/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dBzGyD/btrvK2OVFJS/ERSkv8aMcwLMDrKSmpbQz0/img.gif&quot; data-alt=&quot;스크롤 이벤트&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dBzGyD/btrvK2OVFJS/ERSkv8aMcwLMDrKSmpbQz0/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/dBzGyD/btrvK2OVFJS/ERSkv8aMcwLMDrKSmpbQz0/img.gif&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1562&quot; height=&quot;939&quot; data-filename=&quot;scroll_header2.gif&quot; data-origin-width=&quot;1562&quot; data-origin-height=&quot;939&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;스크롤 이벤트&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스크롤 이벤트 발생시켰을 경우 성능에 과부하가 생길 수 있다. 이런 과부하를 방지하는 것이 throttle JS다. 사용 법은 아래 예제를 보고 참고 하자. 아래 예제는 일정 스크롤을&amp;nbsp; 내릴 경우 기존 header가 위로 올라가고 복사가 된 header가 새로 내려오는 예제이다.&lt;/p&gt;
&lt;pre id=&quot;code_1647233253687&quot; class=&quot;html xml language-html line-numbers&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html lang=&quot;ko-KR&quot;&amp;gt;
&amp;lt;head&amp;gt;
    &amp;lt;meta charset=&quot;UTF-8&quot;&amp;gt;
    &amp;lt;meta http-equiv=&quot;X-UA-Compatible&quot; content=&quot;IE=edge&quot;&amp;gt;
    &amp;lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&amp;gt;
    &amp;lt;title&amp;gt;Document&amp;lt;/title&amp;gt;
    &amp;lt;style&amp;gt;
        html, body {font-size:62.5%;}
        *, *::before, *::after {box-sizing:border-box; margin:0; padding:0;}
        .top_banner {width:100%; padding:5rem 0; background:gold; font-size:2rem; text-align:center;}

        .header {padding:1rem 0; background:blueviolet; color:#fff; font-size:2rem; text-align:center; transition:transform 0.2s;}
        .header.fixedOut {transform:translateY(-100%);}
        .copy_header {position:fixed; top:0; right:0; left:0; z-index:100; padding:1rem 0; background:salmon; color:#fff; font-size:2rem; text-align:center; transform:translateY(-100%); transition:transform 0.2s;}
        .copy_header.fixedIn {transform:translateY(0)}

        .main {max-width:100rem; margin:0 auto; padding:0 2rem;}
        .main .txt {margin-top:2rem; font-size:1.5rem;}
        .main .txt.on {transform:translateX(0); opacity:1;}
        .main .buying {display:flex; position:relative; margin-top:2rem; justify-content:space-between;}
        .main .buying .thumb {position:sticky; top:6.7rem; width:60rem; height:80rem; background:goldenrod;}
        .main .buying .set {width:calc(100% - 65rem); font-size:2rem; text-align:justify; word-break:break-all;}
        .main .buying .set p + p {margin-top:1rem;}
        .main .scrollTop1 {position:fixed; right:0; bottom:0; margin-top:1rem; padding:2rem 1rem; background:tomato; color:#fff; font-size:2rem; font-weight:700; text-align:center; transform:translateY(-100%);}
        .main .scrollTop2 {position:fixed; right:0; bottom:0; margin-top:1rem; padding:2rem 1rem; background:goldenrod; color:#fff; font-size:2rem; font-weight:700; text-align:center;}
        .footer {margin-top:5rem; padding:1rem 0; background:yellowgreen; color:#fff; font-size:2rem; text-align:center;}
    &amp;lt;/style&amp;gt;
    &amp;lt;script src=&quot;https://code.jquery.com/jquery-3.6.0.js&quot;&amp;gt;&amp;lt;/script&amp;gt;
    &amp;lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/jquery-throttle-debounce/1.1/jquery.ba-throttle-debounce.min.js&quot;&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
    &amp;lt;div class=&quot;wrap&quot;&amp;gt;
        &amp;lt;div class=&quot;top_banner&quot;&amp;gt;top banner&amp;lt;/div&amp;gt;
        &amp;lt;div class=&quot;header&quot;&amp;gt;
            &amp;lt;header&amp;gt;heading&amp;lt;/header&amp;gt;
        &amp;lt;/div&amp;gt;
        &amp;lt;main class=&quot;main&quot;&amp;gt;
            &amp;lt;p class=&quot;txt&quot;&amp;gt;Lorem ipsum dolor sit amet consectetur adipisicing elit. Doloremque quo doloribus facere aut a sint officia quidem quia amet facilis reiciendis nisi hic ullam, quas corrupti quasi iste ab reprehenderit.&amp;lt;/p&amp;gt;
            &amp;lt;div class=&quot;buying&quot;&amp;gt;
                &amp;lt;div class=&quot;thumb&quot;&amp;gt;&amp;lt;/div&amp;gt;
                &amp;lt;div class=&quot;set&quot;&amp;gt;
                    &amp;lt;p&amp;gt;Lorem ipsum dolor sit amet consectetur adipisicing elit. Neque modi consequatur, facere quisquam animi, porro eum quam laboriosam, doloribus ipsa debitis fugit pariatur praesentium. Quasi sunt vero quisquam non repellat.&amp;lt;/p&amp;gt;
                    &amp;lt;p&amp;gt;Lorem ipsum dolor sit amet consectetur adipisicing elit. Neque modi consequatur, facere quisquam animi, porro eum quam laboriosam, doloribus ipsa debitis fugit pariatur praesentium. Quasi sunt vero quisquam non repellat.&amp;lt;/p&amp;gt;
                    &amp;lt;p&amp;gt;Lorem ipsum dolor sit amet consectetur adipisicing elit. Neque modi consequatur, facere quisquam animi, porro eum quam laboriosam, doloribus ipsa debitis fugit pariatur praesentium. Quasi sunt vero quisquam non repellat.&amp;lt;/p&amp;gt;
                    &amp;lt;p&amp;gt;Lorem ipsum dolor sit amet consectetur adipisicing elit. Neque modi consequatur, facere quisquam animi, porro eum quam laboriosam, doloribus ipsa debitis fugit pariatur praesentium. Quasi sunt vero quisquam non repellat.&amp;lt;/p&amp;gt;
                    &amp;lt;p&amp;gt;Lorem ipsum dolor sit amet consectetur adipisicing elit. Neque modi consequatur, facere quisquam animi, porro eum quam laboriosam, doloribus ipsa debitis fugit pariatur praesentium. Quasi sunt vero quisquam non repellat.&amp;lt;/p&amp;gt;
                    &amp;lt;p&amp;gt;Lorem ipsum dolor sit amet consectetur adipisicing elit. Neque modi consequatur, facere quisquam animi, porro eum quam laboriosam, doloribus ipsa debitis fugit pariatur praesentium. Quasi sunt vero quisquam non repellat.&amp;lt;/p&amp;gt;
                    &amp;lt;p&amp;gt;Lorem ipsum dolor sit amet consectetur adipisicing elit. Neque modi consequatur, facere quisquam animi, porro eum quam laboriosam, doloribus ipsa debitis fugit pariatur praesentium. Quasi sunt vero quisquam non repellat.&amp;lt;/p&amp;gt;
                &amp;lt;/div&amp;gt;
            &amp;lt;/div&amp;gt;
            &amp;lt;p class=&quot;scrollTop1&quot;&amp;gt;&amp;lt;/p&amp;gt;
            &amp;lt;p class=&quot;scrollTop2&quot;&amp;gt;&amp;lt;/p&amp;gt;
            &amp;lt;p class=&quot;txt&quot;&amp;gt;Lorem ipsum dolor sit amet consectetur adipisicing elit. Doloremque quo doloribus facere aut a sint officia quidem quia amet facilis reiciendis nisi hic ullam, quas corrupti quasi iste ab reprehenderit.&amp;lt;/p&amp;gt;
            &amp;lt;p class=&quot;txt&quot;&amp;gt;Lorem ipsum dolor sit amet consectetur adipisicing elit. Doloremque quo doloribus facere aut a sint officia quidem quia amet facilis reiciendis nisi hic ullam, quas corrupti quasi iste ab reprehenderit.&amp;lt;/p&amp;gt;
            &amp;lt;p class=&quot;txt&quot;&amp;gt;Lorem ipsum dolor sit amet consectetur adipisicing elit. Doloremque quo doloribus facere aut a sint officia quidem quia amet facilis reiciendis nisi hic ullam, quas corrupti quasi iste ab reprehenderit.&amp;lt;/p&amp;gt;
            &amp;lt;p class=&quot;txt&quot;&amp;gt;Lorem ipsum dolor sit amet consectetur adipisicing elit. Doloremque quo doloribus facere aut a sint officia quidem quia amet facilis reiciendis nisi hic ullam, quas corrupti quasi iste ab reprehenderit.&amp;lt;/p&amp;gt;
            &amp;lt;p class=&quot;txt&quot;&amp;gt;Lorem ipsum dolor sit amet consectetur adipisicing elit. Doloremque quo doloribus facere aut a sint officia quidem quia amet facilis reiciendis nisi hic ullam, quas corrupti quasi iste ab reprehenderit.&amp;lt;/p&amp;gt;
            &amp;lt;p class=&quot;txt&quot;&amp;gt;Lorem ipsum dolor sit amet consectetur adipisicing elit. Doloremque quo doloribus facere aut a sint officia quidem quia amet facilis reiciendis nisi hic ullam, quas corrupti quasi iste ab reprehenderit.&amp;lt;/p&amp;gt;
            &amp;lt;p class=&quot;txt&quot;&amp;gt;Lorem ipsum dolor sit amet consectetur adipisicing elit. Doloremque quo doloribus facere aut a sint officia quidem quia amet facilis reiciendis nisi hic ullam, quas corrupti quasi iste ab reprehenderit.&amp;lt;/p&amp;gt;
            &amp;lt;p class=&quot;txt&quot;&amp;gt;Lorem ipsum dolor sit amet consectetur adipisicing elit. Doloremque quo doloribus facere aut a sint officia quidem quia amet facilis reiciendis nisi hic ullam, quas corrupti quasi iste ab reprehenderit.&amp;lt;/p&amp;gt;
            &amp;lt;p class=&quot;txt&quot;&amp;gt;Lorem ipsum dolor sit amet consectetur adipisicing elit. Doloremque quo doloribus facere aut a sint officia quidem quia amet facilis reiciendis nisi hic ullam, quas corrupti quasi iste ab reprehenderit.&amp;lt;/p&amp;gt;
            &amp;lt;p class=&quot;txt&quot;&amp;gt;Lorem ipsum dolor sit amet consectetur adipisicing elit. Doloremque quo doloribus facere aut a sint officia quidem quia amet facilis reiciendis nisi hic ullam, quas corrupti quasi iste ab reprehenderit.&amp;lt;/p&amp;gt;
            &amp;lt;p class=&quot;txt&quot;&amp;gt;Lorem ipsum dolor sit amet consectetur adipisicing elit. Doloremque quo doloribus facere aut a sint officia quidem quia amet facilis reiciendis nisi hic ullam, quas corrupti quasi iste ab reprehenderit.&amp;lt;/p&amp;gt;
            &amp;lt;p class=&quot;txt&quot;&amp;gt;Lorem ipsum dolor sit amet consectetur adipisicing elit. Doloremque quo doloribus facere aut a sint officia quidem quia amet facilis reiciendis nisi hic ullam, quas corrupti quasi iste ab reprehenderit.&amp;lt;/p&amp;gt;
            &amp;lt;p class=&quot;txt&quot;&amp;gt;Lorem ipsum dolor sit amet consectetur adipisicing elit. Doloremque quo doloribus facere aut a sint officia quidem quia amet facilis reiciendis nisi hic ullam, quas corrupti quasi iste ab reprehenderit.&amp;lt;/p&amp;gt;
            &amp;lt;p class=&quot;txt&quot;&amp;gt;Lorem ipsum dolor sit amet consectetur adipisicing elit. Doloremque quo doloribus facere aut a sint officia quidem quia amet facilis reiciendis nisi hic ullam, quas corrupti quasi iste ab reprehenderit.&amp;lt;/p&amp;gt;
            &amp;lt;p class=&quot;txt last&quot;&amp;gt;Lorem ipsum dolor sit amet consectetur adipisicing elit. Doloremque quo doloribus facere aut a sint officia quidem quia amet facilis reiciendis nisi hic ullam, quas corrupti quasi iste ab reprehenderit.&amp;lt;/p&amp;gt;
        &amp;lt;/main&amp;gt;
        &amp;lt;footer class=&quot;footer&quot;&amp;gt;footer&amp;lt;/footer&amp;gt;
    &amp;lt;/div&amp;gt;
    &amp;lt;script&amp;gt;
        $(function(){
            var wind = $(window);
            var header = $('.header');
            var headerOffsetTop = header.offset().top; // 화면 위에서 header 위치
            var headerOutherHeight = header.outerHeight(); // padding, border 포함 header 높이
            var threshold = headerOffsetTop + headerOutherHeight; // 화면상의 header 끝나는 시점, threshold: 문지방 
            var headerClone = header.contents().clone(); // header 콘텐츠 복사
            var headerCloneContainer = $('&amp;lt;div class=&quot;copy_header&quot;&amp;gt;&amp;lt;/div&amp;gt;');

            headerCloneContainer.append(headerClone);
            headerCloneContainer.prependTo($('.wrap'));

            wind.on('scroll', $.throttle(1000/15, function(){ // throttle: 1초에 15번만 스크롤양을 검사
                var windScrollTop = $(this).scrollTop();
                $('.scrollTop2').text('throttle 적용 : ' + windScrollTop); /* 실시간 윈도우 스크롤 값 */

                if(windScrollTop &amp;gt;= threshold){
                    $('.copy_header').addClass('fixedIn');
                    header.addClass('fixedOut');
                }else{
                    $('.copy_header').removeClass('fixedIn');
                    header.removeClass('fixedOut');
                }
            }));

            wind.on('scroll', function(){
                var windScrollTop = $(this).scrollTop();
                $('.scrollTop1').text('throttle 미적용 : ' + windScrollTop); /* 실시간 윈도우 스크롤 값 */
                
            });

        })
    &amp;lt;/script&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 예제를 복사해서 실행해 보면 throttle JS 적용했을 때와 적용 하지 않았을 때의 차이를 알 수 있다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=9Rtx8pDNaJ8&quot;&gt;https://www.youtube.com/watch?v=9Rtx8pDNaJ8&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;youtube&quot; data-video-url=&quot;https://www.youtube.com/watch?v=9Rtx8pDNaJ8&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/oNRPM/hyNGOduiAz/XFxDXprYpXycL0gBMynkUk/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=0_0_1280_720&quot; data-video-width=&quot;860&quot; data-video-height=&quot;484&quot; data-video-origin-width=&quot;860&quot; data-video-origin-height=&quot;484&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/9Rtx8pDNaJ8&quot; width=&quot;860&quot; height=&quot;484&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;&lt;b&gt;위 동영상 보고 공부했습니다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;</description>
      <category>WEB/jQuery</category>
      <category>append()</category>
      <category>clone()</category>
      <category>offset()</category>
      <category>outerHeight()</category>
      <category>prependTo</category>
      <category>throttle JS</category>
      <author>날라차붕차</author>
      <guid isPermaLink="true">https://bungcha.tistory.com/36</guid>
      <comments>https://bungcha.tistory.com/36#entry36comment</comments>
      <pubDate>Mon, 14 Mar 2022 13:49:09 +0900</pubDate>
    </item>
    <item>
      <title>요소의 높이, 넓이 구하기 ; width(), innerWidth(), outerWidth()</title>
      <link>https://bungcha.tistory.com/35</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;script&gt;
  if (window.location.pathname.split(&quot;/&quot;)[1] === &quot;m&quot; &amp;&amp; navigator.userAgent.indexOf(&quot;Tistory&quot;) === -1 &amp;&amp; navigator.userAgent.indexOf(&quot;Android&quot;) === -1) {
    window.location.href = window.location.origin + window.location.pathname.substr(2);
  }
&lt;/script&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;695&quot; data-origin-height=&quot;581&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/T1a05/btrvAUh21ir/zP0CxZvN5xkrmkMkQmDk7k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/T1a05/btrvAUh21ir/zP0CxZvN5xkrmkMkQmDk7k/img.png&quot; data-alt=&quot;Element&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/T1a05/btrvAUh21ir/zP0CxZvN5xkrmkMkQmDk7k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FT1a05%2FbtrvAUh21ir%2FzP0CxZvN5xkrmkMkQmDk7k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;695&quot; height=&quot;581&quot; data-origin-width=&quot;695&quot; data-origin-height=&quot;581&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Element&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 100px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style1&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px; text-align: center;&quot;&gt;&lt;b&gt;메서드&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px; text-align: center;&quot;&gt;&lt;b&gt;설명&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;width(), height()&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;요소의 넓이, 높이&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;innerWidth(), innerHeight()&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;padding 포함 넓이, 높이&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;outerWidth(), outerHeight()&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;border 포함 넓이, 높이&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;outerWidth(true), outerHeight(true)&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;margin 포함 넓이, 높이&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>WEB/jQuery</category>
      <category>height()</category>
      <category>innerHeight()</category>
      <category>innerWidth()</category>
      <category>outherHeight()</category>
      <category>outherHeight(true)</category>
      <category>outherWidth()</category>
      <category>outherWidth(true)</category>
      <category>width()</category>
      <category>요소의 크기 구하기</category>
      <author>날라차붕차</author>
      <guid isPermaLink="true">https://bungcha.tistory.com/35</guid>
      <comments>https://bungcha.tistory.com/35#entry35comment</comments>
      <pubDate>Thu, 10 Mar 2022 17:23:27 +0900</pubDate>
    </item>
  </channel>
</rss>