<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>Study Record</title>
    <link>https://laustudy.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Sat, 8 Aug 2026 06:49:53 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>초코초코초코</managingEditor>
    <item>
      <title>[JavaScript] 더 높은 수준의 이벤트 처리</title>
      <link>https://laustudy.tistory.com/461</link>
      <description>&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;h3 style=&quot;padding: 0.4em 1em 0.4em 0.5em; background: #e9efed; margin: 0.5em 0em; color: #000000; border-left: #00a667 10px solid; font-weight: bold; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot; data-ke-size=&quot;size23&quot;&gt;여러가지 이벤트 처리&lt;/h3&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;border-left: 6px solid #00a667; letter-spacing: -1px; padding: 0px 0px 0px 7px; margin: 5px 0px 7px 0px;&quot; data-ke-size=&quot;size15&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;&amp;nbsp;이벤트 리스너/이벤트 핸들러 삭제하기&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;① 이벤트 핸들러 삭제하기&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;이벤트 핸들러를 삭제하려면 onxxxxx 메소드에 대해 null 값을 설정하기만 하면 된다.&lt;/p&gt;
&lt;pre id=&quot;code_1744373867059&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 페이지 로드시 실행되는 이벤트 리스너를 등록한다.
document.addEventListener('DOMContentLoaded', function() {
    var button = document.getElementById('btn');

    // 이벤트 핸들러 등록
    button.onclick = function() {
        window.alert('안녕하세요, 자바스크립트!');
    };

    // 이벤트 핸들러 삭제하기
    button.onclick = null;
}, false);&lt;/code&gt;&lt;/pre&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;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;② 이벤트 리스너 삭제하기&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이벤트 리스너를 삭제하려면 removeEventListener 메소드를 이용해야 한다.&lt;/p&gt;
&lt;pre id=&quot;code_1744374019059&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 페이지 로드시 실행되는 이벤트 리스너를 등록한다.
document.addEventListener('DOMContentLoaded', function() {
    var button = document.getElementById('btn');
    var listener = function() {
        window.alert(&quot;Hello&quot;);
    }

    // 이벤트 리스너 등록하기
    button.addEventListener('click', listener, false);

    // 이벤트 리스너 삭제하기
    button.removeEventListener('click', listener, false);
    
}, false);&lt;/code&gt;&lt;/pre&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;h4 style=&quot;border-left: 6px solid #00a667; letter-spacing: -1px; padding: 0px 0px 0px 7px; margin: 5px 0px 7px 0px;&quot; data-ke-size=&quot;size15&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;&amp;nbsp;이벤트 관련 정보 취득하기 - 이벤트 객체&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;이벤트 리스너/이벤트 핸들러는 인수로 이벤트 객체를 받는다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;① 이벤트 객체 간단한 정보 보기&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;이벤트 객체를 받으려면 이벤트 리스너에 인수를 지정하기만 하면 된다. 인수명은 'e', 'ev' 가 일반적이다. 이벤트 객체가 필요없다면 생략해도 무방하다&lt;/p&gt;
&lt;pre id=&quot;code_1744374292680&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 페이지 로드시 실행되는 이벤트 리스너를 등록한다.
document.addEventListener('DOMContentLoaded', function() {
    var button = document.getElementById('btn');

    // 이벤트 리스너 등록하기
    button.addEventListener('click', function(e) {
        var target = e.target;

        console.log(`이벤트 발생원 : ${target.nodeName} / ${target.id}`);
        console.log(`종류 : ${e.type}`);
    }, false);

}, false);&lt;/code&gt;&lt;/pre&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;b&gt;② 이벤트 발생시 마우스 정보 취득하기&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;click, mousemove 등의 이벤트가 발생할 때 마우스 포인터의 좌표를 얻을 수 있다.&lt;/p&gt;
&lt;pre id=&quot;code_1744374751599&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 페이지 로드시 실행되는 이벤트 리스너를 등록한다.
document.addEventListener('DOMContentLoaded', function() {
    var main = document.getElementById('div-main');

    // 이벤트 리스너 등록하기
    main.addEventListener('click', function(e) {
        main.innerHTML = `screen : ${e.screenX} / ${e.screenY} &amp;lt;br/&amp;gt;`
        + `page : ${e.pageX} / ${e.pageY} &amp;lt;br/&amp;gt;`
        + `client : ${e.clientX} / ${e.clientY} &amp;lt;br/&amp;gt;`
        + `offset : ${e.offsetX} / ${e.offsetX} &amp;lt;br/&amp;gt;`;
    }, false);

}, false);&lt;/code&gt;&lt;/pre&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;p data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;③ 이벤트 발생 시 키 정보 취득하기&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;keypress/keydown 등의 키 이벤트는 눌린 키의 종류를 얻을수 있다.&lt;/p&gt;
&lt;pre id=&quot;code_1744375366426&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;/**
&amp;lt;label for='name'&amp;gt;사이트명: &amp;lt;/label&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;input type=&quot;text&quot; id=&quot;name&quot; name=&quot;name&quot; size=&quot;30&quot; /&amp;gt;
 */
// 페이지 로드시 실행되는 이벤트 리스너를 등록한다.
document.addEventListener('DOMContentLoaded', function() {
    document.getElementById('url').addEventListener('keydown', function(e) {
        console.log(`키 코드 : ${e.key}`);
    }, false);

}, false);&lt;/code&gt;&lt;/pre&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;h4 style=&quot;border-left: 6px solid #00a667; letter-spacing: -1px; padding: 0px 0px 0px 7px; margin: 5px 0px 7px 0px;&quot; data-ke-size=&quot;size15&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;&amp;nbsp;이벤트 전달과정&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;이벤트 처리가 호출될 때까지의 과정이 있다. 이벤트 전달 과정에는 총 3단계의 과정이 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;+ 문서 트리 구조 예시&lt;/p&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;window &amp;rarr; document &amp;rarr; html &amp;rarr; body &amp;rarr; div &amp;rarr; button&lt;/p&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;① 캡처 단계&lt;/p&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;최상위의 window 객체에로부터 문서 트리를 따라 하위 요소에 이벤트가 전달되어 간다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;② 타깃 단계&lt;/p&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;이벤트의 발생원(요소)를 특정한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;③ 버블링 단계&lt;/p&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;이벤트의 발생원으로부터 루트 요소를 향해 이벤트가 전달되는 단계이다. 다시 최상위 window 객체까지 거슬러 이벤트의 전달이 종료된다. 부모 노드에 전해지는 모습이 거픔이 떠오르기 때문에 버블링 단계라고 부른다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;예시) 이벤트 리스너는 inner1 &amp;rarr; inner2 &amp;rarr; main 순으로 실행된 후 디폴트 동작인 링크에 의한 페이지 이동이 처리된다.&lt;/p&gt;
&lt;pre id=&quot;code_1744378064898&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;/**
&amp;lt;div id=&quot;main&quot;&amp;gt;
    &amp;lt;a href=&quot;http://www.naver.com&quot; id=&quot;inner&quot; target=&quot;_blank&quot;&amp;gt;네이버&amp;lt;/a&amp;gt;
&amp;lt;/div&amp;gt; 
*/
document.addEventListener('DOMContentLoaded', function() {
    // inner 요소의 click 이벤트 리스너
    document.getElementById('inner').addEventListener('click', function(){
        console.log(&quot;inner1 리스너 발생&quot;);
    }, false);

    document.getElementById('inner').addEventListener('click', function(){
        console.log(&quot;inner2 리스너 발생&quot;);
    }, false);

    // main 요소의 click 이벤트 리스너
    document.getElementById('main').addEventListener('click', function(){
        console.log(&quot;main 리스너 발생&quot;);
    }, false);

}, false);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;예시) 기본적으로 버블링 단계에서 이벤트가 처리되고 있지만 addEventListener 메소드의 제 3인수의 값을 true 로 변경하면 반대의 결과를 얻을 수 있다. (main &amp;rarr; inner1 &amp;rarr; inner2)&lt;/p&gt;
&lt;pre id=&quot;code_1744378288963&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;/**
&amp;lt;div id=&quot;main&quot;&amp;gt;
    &amp;lt;a href=&quot;http://www.naver.com&quot; id=&quot;inner&quot; target=&quot;_blank&quot;&amp;gt;네이버&amp;lt;/a&amp;gt;
&amp;lt;/div&amp;gt; */
// 페이지 로드시 실행되는 이벤트 리스너를 등록한다.
document.addEventListener('DOMContentLoaded', function() {
    // inner 요소의 click 이벤트 리스너
    document.getElementById('inner').addEventListener('click', function(){
        console.log(&quot;inner1 리스너 발생&quot;);
    }, true);

    document.getElementById('inner').addEventListener('click', function(){
        console.log(&quot;inner2 리스너 발생&quot;);
    }, true);

    // main 요소의 click 이벤트 리스너
    document.getElementById('main').addEventListener('click', function(){
        console.log(&quot;main 리스너 발생&quot;);
    }, true);

}, false);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;border-left: 6px solid #00a667; letter-spacing: -1px; padding: 0px 0px 0px 7px; margin: 5px 0px 7px 0px;&quot; data-ke-size=&quot;size15&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;&amp;nbsp;이벤트 전달 취소하기&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;이벤트 전달이나 이벤트 처리에 따른 브라우저의 본래의 동작을 취소하고 싶은 경우가 있다. 이벤트 전달 취소 방법은 다음과 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;① stopPropagation 메소드 - 상위 노드로의 이벤트 전달 취소하기&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;상위 노드의 이벤트 리스너를 무시하고 싶은 경우 stopPropagation 메소드를 사용한다. (inner1 &amp;rarr; inner2 &amp;rarr; 태그 기본 동작)&lt;/p&gt;
&lt;pre id=&quot;code_1744378455404&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;/**
&amp;lt;div id=&quot;main&quot;&amp;gt;
    &amp;lt;a href=&quot;http://www.naver.com&quot; id=&quot;inner&quot; target=&quot;_blank&quot;&amp;gt;네이버&amp;lt;/a&amp;gt;
&amp;lt;/div&amp;gt; */
// 페이지 로드시 실행되는 이벤트 리스너를 등록한다.
document.addEventListener('DOMContentLoaded', function() {
    // inner 요소의 click 이벤트 리스너
    document.getElementById('inner').addEventListener('click', function(e){
        console.log(&quot;inner1 리스너 발생&quot;);
        e.stopPropagation();
    }, false);

    document.getElementById('inner').addEventListener('click', function(){
        console.log(&quot;inner2 리스너 발생&quot;);
    }, false);

    // main 요소의 click 이벤트 리스너
    document.getElementById('main').addEventListener('click', function(){
        console.log(&quot;main 리스너 발생&quot;);
    }, false);

}, false);&lt;/code&gt;&lt;/pre&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;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;② stopImmediatePropagation 메소드 - 이벤트 전달 즉시 취소하기&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;상위/하위 요소의 전파를 취소하는 반면 동일 요소에 등록된 리스너도 실행하지 않도록 하려면 stopImmediatePropagation 메소드를 이용한다. (inner1 &amp;rarr; 태그 기본 동작)&lt;/p&gt;
&lt;pre id=&quot;code_1744378709471&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;/**
&amp;lt;div id=&quot;main&quot;&amp;gt;
    &amp;lt;a href=&quot;http://www.naver.com&quot; id=&quot;inner&quot; target=&quot;_blank&quot;&amp;gt;네이버&amp;lt;/a&amp;gt;
&amp;lt;/div&amp;gt; */
// 페이지 로드시 실행되는 이벤트 리스너를 등록한다.
document.addEventListener('DOMContentLoaded', function() {
    // inner 요소의 click 이벤트 리스너
    document.getElementById('inner').addEventListener('click', function(e){
        console.log(&quot;inner1 리스너 발생&quot;);
        e.stopImmediatePropagation();
    }, false);

    document.getElementById('inner').addEventListener('click', function(){
        console.log(&quot;inner2 리스너 발생&quot;);
    }, false);

    // main 요소의 click 이벤트 리스너
    document.getElementById('main').addEventListener('click', function(){
        console.log(&quot;main 리스너 발생&quot;);
    }, false);

}, false);&lt;/code&gt;&lt;/pre&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;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;③ preventDefault 메소드 - 이벤트 본래의 동작 취소하기&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이벤트 본래의 동작이란 &quot;a 태그를 클릭하면 페이지를 이동한다&quot;, &quot;텍스트 상자에서의 키 누르면 문자 반영하기&quot; 등 브라우저 표준으로 정해진 동작을 뜻한다. 이 이벤트 본래의 동작을 취소하는 것은 preventDefault 메소드를 이용한다.&lt;/p&gt;
&lt;pre id=&quot;code_1744378864705&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;/**
&amp;lt;div id=&quot;main&quot;&amp;gt;
    &amp;lt;a href=&quot;http://www.naver.com&quot; id=&quot;inner&quot; target=&quot;_blank&quot;&amp;gt;네이버&amp;lt;/a&amp;gt;
&amp;lt;/div&amp;gt; */
// 페이지 로드시 실행되는 이벤트 리스너를 등록한다.
document.addEventListener('DOMContentLoaded', function() {
    // inner 요소의 click 이벤트 리스너
    document.getElementById('inner').addEventListener('click', function(e){
        console.log(&quot;inner1 리스너 발생&quot;);
        e.preventDefault();
    }, false);

}, false);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>웹/Javascript</category>
      <author>초코초코초코</author>
      <guid isPermaLink="true">https://laustudy.tistory.com/461</guid>
      <comments>https://laustudy.tistory.com/461#entry461comment</comments>
      <pubDate>Fri, 11 Apr 2025 22:57:15 +0900</pubDate>
    </item>
    <item>
      <title>[JavaScript] 스타일 시트 조작하기</title>
      <link>https://laustudy.tistory.com/460</link>
      <description>&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;h3 style=&quot;padding: 0.4em 1em 0.4em 0.5em; background: #e9efed; margin: 0.5em 0em; color: #000000; border-left: #00a667 10px solid; font-weight: bold; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot; data-ke-size=&quot;size23&quot;&gt;JavaScript 로 스타일 시트 조작하기&lt;/h3&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;HTML을 조작하는 방법 외에 DOM을 이용하면 스타일 시트를 조작할 수 있다. DOM 으로 스타일 시트를 조작하는 방법에는 인라인 스타일로 액세스하는 방법과 외부의 스타일 시트를 적용하는 방법이 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;border-left: 6px solid #00a667; letter-spacing: -1px; padding: 0px 0px 0px 7px; margin: 5px 0px 7px 0px;&quot; data-ke-size=&quot;size15&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;&amp;nbsp;인라인 스타일로 액세스하기 - style 프로퍼티&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;인라인 스타일이란 개개의 노드에 대해 설정된 스타일이다.&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1744371506277&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;div style=&quot;color:Red&quot;&amp;gt;붉은 문자입니다.&amp;lt;/div&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인라인 스타일로 액세스하려면 style 프로퍼티를 사용한다.&lt;/p&gt;
&lt;pre id=&quot;code_1744371673197&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;elem.style.prop [= value]
// elem : 요소 객체, prop : 스타일 프로퍼티, value: 설정값&lt;/code&gt;&lt;/pre&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;
&lt;pre id=&quot;code_1744371930371&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 페이지 로드시 실행되는 이벤트 리스너를 등록한다.
document.addEventListener('DOMContentLoaded', function() {
    var button = document.getElementById('btn');

    // 마우스 포인터가 올라간 타이밍에 배경색을 변환
    button.addEventListener('mouseover', function() {
        this.style.backgroundColor = &quot;yellow&quot;;
    }, false);

    // 마우스 포인터가 벗어난 타이밍에 배경색을 되돌림
    button.addEventListener('mouseout', function() {
        this.style.backgroundColor = 'red';
    }, false);

}, false);&lt;/code&gt;&lt;/pre&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;h4 style=&quot;border-left: 6px solid #00a667; letter-spacing: -1px; padding: 0px 0px 0px 7px; margin: 5px 0px 7px 0px;&quot; data-ke-size=&quot;size15&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;&amp;nbsp;외부 스타일 시트 적용하기 - className 프로퍼티&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;스타일 정의가 스크립트가 혼재되어 버리기 때문에 디자인의 변경 등의 어려움이 있을 수 있으므로 스타일의 정의는 스타일 시트에 하고 스크립트 측에서는 스타일과 관련된 부분만을 바꿀 수 있도록 하는 것이 바람직하다. 외부 스타일 시트로 정의된 스타일(=스타일 클래스)에 액세스하는 것은 className 프로퍼티의 역할이다. HTML 에서 대응하는 것은 class 속성이다.&lt;/p&gt;
&lt;pre id=&quot;code_1744372140847&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;elem.className [= class];
// elem : 요소 객체, class : 스타일 클래스&lt;/code&gt;&lt;/pre&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_1744372371519&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;/** css 스타일 시트트
.box {background-color: bisque;}
.highlight {background-color: brown;}
.red {padding: 10px;}
 */

// 페이지 로드시 실행되는 이벤트 리스너를 등록한다.
document.addEventListener('DOMContentLoaded', function() {
    var button = document.getElementById('btn');

    // 마우스 포인터가 올라간 타이밍에 배경색을 변환
    button.addEventListener('mouseover', function() {
        this.className = 'box';
    }, false);

    // 마우스 포인터가 벗어난 타이밍에 배경색을 되돌림
    button.addEventListener('mouseout', function() {
        this.className = 'highlight red';
    }, false);

}, false);&lt;/code&gt;&lt;/pre&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;
&lt;pre id=&quot;code_1744373061761&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 페이지 로드시 실행되는 이벤트 리스너를 등록한다.
document.addEventListener('DOMContentLoaded', function() {
    var button = document.getElementById('btn');

    button.addEventListener('click', function() {
        this.className = (this.className === 'red' ? '' : 'red');
    }, false);

}, false);&lt;/code&gt;&lt;/pre&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;h4 style=&quot;border-left: 6px solid #00a667; letter-spacing: -1px; padding: 0px 0px 0px 7px; margin: 5px 0px 7px 0px;&quot; data-ke-size=&quot;size15&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;&amp;nbsp;스타일 클래스를 더 간단하게 조작하기 - classList 프로퍼티&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;classList 프로퍼티를 이용하여 clas 속성의 값을 DOMTokenList 객체로 취득할수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;classList 프로퍼티의 주요 맴버&lt;/b&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style14&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 30.5814%;&quot;&gt;맴버&lt;/td&gt;
&lt;td style=&quot;width: 69.4186%;&quot;&gt;개요&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 30.5814%;&quot;&gt;length&lt;/td&gt;
&lt;td style=&quot;width: 69.4186%;&quot;&gt;리스트의 길이&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 30.5814%;&quot;&gt;item(index)&lt;/td&gt;
&lt;td style=&quot;width: 69.4186%;&quot;&gt;인덱스 번호의 클래스 취득&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 30.5814%;&quot;&gt;contains(class)&lt;/td&gt;
&lt;td style=&quot;width: 69.4186%;&quot;&gt;지정한 클래스가 포함되어 있는지 확인&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 30.5814%;&quot;&gt;add(class)&lt;/td&gt;
&lt;td style=&quot;width: 69.4186%;&quot;&gt;리스트에 클래스 추가&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 30.5814%;&quot;&gt;remove(class)&lt;/td&gt;
&lt;td style=&quot;width: 69.4186%;&quot;&gt;리스트로부터 클래스 삭제&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 30.5814%;&quot;&gt;toggle(class)&lt;/td&gt;
&lt;td style=&quot;width: 69.4186%;&quot;&gt;클래스의 on/off 전환&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;
&lt;p data-ke-size=&quot;size16&quot;&gt;예시) toggle&lt;/p&gt;
&lt;pre id=&quot;code_1744373549922&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 페이지 로드시 실행되는 이벤트 리스너를 등록한다.
document.addEventListener('DOMContentLoaded', function() {
    var button = document.getElementById('btn');

    button.addEventListener('click', function() {
        // this.className = (this.className === 'red' ? '' : 'red');
        this.classList.toggle('red');
    }, false);

}, false);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>웹/Javascript</category>
      <author>초코초코초코</author>
      <guid isPermaLink="true">https://laustudy.tistory.com/460</guid>
      <comments>https://laustudy.tistory.com/460#entry460comment</comments>
      <pubDate>Fri, 11 Apr 2025 21:12:46 +0900</pubDate>
    </item>
    <item>
      <title>[JavaScript] data-xxxxx 속성과 NodeList 반복 주의점</title>
      <link>https://laustudy.tistory.com/459</link>
      <description>&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;h3 style=&quot;padding: 0.4em 1em 0.4em 0.5em; background: #e9efed; margin: 0.5em 0em; color: #000000; border-left: #00a667 10px solid; font-weight: bold; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot; data-ke-size=&quot;size23&quot;&gt;data-xxxxx 속성&lt;/h3&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;data-xxxxx 속성은 개발자가 목적에 따라 값을 자유롭게 값을 설정할 수 있는 특별한 겂이다. 주로 스크립트(이벤트 리스너)에서 사용하기 위한 파라미터를 삽입하기 위한 속성이다. 'xxxxx' 부분은 알파벳 소문자, 하이픈 밑줄 등의 문자를 사용하여 자유롭게 명명할 수 있다. 사용자 정의 데이터 속성이라고도 한다.&lt;/p&gt;
&lt;pre id=&quot;code_1744361668121&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;a href=&quot;http://www.naver.com&quot; data-ex=&quot;0110&quot;&amp;gt;네이버&amp;lt;/a&amp;gt;
&amp;lt;a href=&quot;http://www.google.com&quot; data-ex=&quot;0113&quot;&amp;gt;구글&amp;lt;/a&amp;gt;&lt;/code&gt;&lt;/pre&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;h3 style=&quot;padding: 0.4em 1em 0.4em 0.5em; background: #e9efed; margin: 0.5em 0em; color: #000000; border-left: #00a667 10px solid; font-weight: bold; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot; data-ke-size=&quot;size23&quot;&gt;HTMLCollection/NodeList 반복 처리 주의점&lt;/h3&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;getElementsByTagName/getElementsByName/getElementsByClassName 메소드는 반환값으로서 HTMLCollection 또는 NodeList 객체를 반환한다. 이 객체들은 살아있는(Live) 객체이다. 살아있다는 것은 객체가 문서 트리를 참조하고 있어 문서 트리로의 변경이 있으면 HTMLCollection/NodeList 객체에도 실시간으로 반영된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;다음의 예시 코드는 무한루프가 되는 잘못된 예시이다. li 요소 노드들을 모두 가져오는 li 는 새롭게 생성되어지고 있기 때문에 li.length 가 다시 새롭게 갱신되어 for문이 끝나지 않게 된다.&lt;/p&gt;
&lt;pre id=&quot;code_1744371014325&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 페이지 로드시 실행되는 이벤트 리스너를 등록한다.
document.addEventListener('DOMContentLoaded', function() {
    var second = document.getElementById('second');
    var li = document.getElementsByTagName('li');

    for(var i=0; i&amp;lt;li.length; i++) {
        var item = li.item(i);
        var new_li = document.createElement('li');
        var new_text = document.createTextNode(item.textContent);

        new_li.appendChild(new_text);
        second.appendChild(new_li);
    }
}, false);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 for문의 조건식을 다음과 같이 바꾸면 루한루프를 방지할 수 있다.&lt;/p&gt;
&lt;pre id=&quot;code_1744371137837&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 페이지 로드시 실행되는 이벤트 리스너를 등록한다.
document.addEventListener('DOMContentLoaded', function() {
    var second = document.getElementById('second');
    var li = document.getElementsByTagName('li');

    for(var i=0, len=li.length; i&amp;lt;len; i++) {
        var item = li.item(i);
        var new_li = document.createElement('li');
        var new_text = document.createTextNode(item.textContent);

        new_li.appendChild(new_text);
        second.appendChild(new_li);
    }
}, false);&lt;/code&gt;&lt;/pre&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;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>웹/Javascript</category>
      <author>초코초코초코</author>
      <guid isPermaLink="true">https://laustudy.tistory.com/459</guid>
      <comments>https://laustudy.tistory.com/459#entry459comment</comments>
      <pubDate>Fri, 11 Apr 2025 20:32:52 +0900</pubDate>
    </item>
    <item>
      <title>[JavaScript] 노드를 추가/치환/삭제하기</title>
      <link>https://laustudy.tistory.com/458</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;padding: 0.4em 1em 0.4em 0.5em; background: #e9efed; margin: 0.5em 0em; color: #000000; border-left: #00a667 10px solid; font-weight: bold; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot; data-ke-size=&quot;size23&quot;&gt;노드 추가/치환/삭제&lt;/h3&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;DOM 으로 기존의 노드에 접근하여 값을 설정하거나 취득할 수 있다. 더 나아가 문서 트리에 새 노드를 추가하거나 기존의 노드를 대체 또는 삭제할 수 있다. innerHTML 프로퍼티로도 HTML 코드를 추가할 수 있지만 좀 더 복잡한 콘텐츠를 추가할 경우를 설명하고 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;border-left: 6px solid #00a667; letter-spacing: -1px; padding: 0px 0px 0px 7px; margin: 5px 0px 7px 0px;&quot; data-ke-size=&quot;size15&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;&amp;nbsp;신규 노드 생성하기&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 185px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style14&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 37.5581%; height: 21px;&quot;&gt;메소드&lt;/td&gt;
&lt;td style=&quot;width: 62.4419%; height: 21px;&quot;&gt;생성하는 노드&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 37.5581%; height: 21px;&quot;&gt;createElement(요소명)&lt;/td&gt;
&lt;td style=&quot;width: 62.4419%; height: 21px;&quot;&gt;요소 노드&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 37.5581%; height: 21px;&quot;&gt;createAttribute(속성명)&lt;/td&gt;
&lt;td style=&quot;width: 62.4419%; height: 21px;&quot;&gt;속성 노드&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 37.5581%; height: 21px;&quot;&gt;createTextNode(텍스트)&lt;/td&gt;
&lt;td style=&quot;width: 62.4419%; height: 21px;&quot;&gt;텍스트 노드&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 37.5581%; height: 21px;&quot;&gt;createCDATASection(텍스트)&lt;/td&gt;
&lt;td style=&quot;width: 62.4419%; height: 21px;&quot;&gt;CDATA 섹션&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 37.5581%; height: 21px;&quot;&gt;createComment(텍스트)&lt;/td&gt;
&lt;td style=&quot;width: 62.4419%; height: 21px;&quot;&gt;주석 노드&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 37.5581%; height: 21px;&quot;&gt;createEntityReference(실체명)&lt;/td&gt;
&lt;td style=&quot;width: 62.4419%; height: 21px;&quot;&gt;실제 참조 노드&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 37.5581%; height: 21px;&quot;&gt;createProcessingInstruction(타깃명, 데이터)&lt;/td&gt;
&lt;td style=&quot;width: 62.4419%; height: 21px;&quot;&gt;처리 명령 노드&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 37.5581%; height: 17px;&quot;&gt;createDocumentFragment()&lt;/td&gt;
&lt;td style=&quot;width: 62.4419%; height: 17px;&quot;&gt;문서의 단편&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;예시)&lt;/p&gt;
&lt;pre id=&quot;code_1744357107118&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// &amp;lt;a href=&quot;http://www.naver.com&quot;&amp;gt;네이버&amp;lt;/a&amp;gt;
function createListNode() {
    var a = document.createElement('a');
    a.setAttribute('href', 'http://www.naver.com');
    a.appendChild(document.createTextNode(&quot;네이버&quot;));

    document.querySelector('body').appendChild(a);
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;+ 속성 추가하기&lt;/p&gt;
&lt;pre id=&quot;code_1744359691734&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;function createListNode() {
    var a = document.createElement('a');
    
    var attri = document.createAttribute('target');
    var attri2 = document.createAttribute('href');
    
    attri.value = &quot;_blank&quot;;
    attri2.value = &quot;http://www.naver.com&quot;;

    a.setAttributeNode(attri);
    a.setAttributeNode(attri2);

    a.appendChild(document.createTextNode(&quot;네이버&quot;));
    document.querySelector('body').appendChild(a);
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;border-left: 6px solid #00a667; letter-spacing: -1px; padding: 0px 0px 0px 7px; margin: 5px 0px 7px 0px;&quot; data-ke-size=&quot;size15&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;&amp;nbsp;노드끼리 조립하기&lt;/b&gt;&lt;/span&gt;&lt;b&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;노드를 생성했으면 노드를 조합하는 것으로 문서에 추가하는 작업이 가능하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;①&amp;nbsp;appendChild 메소드&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;appendChild 메소드는 추가된 순서대로 제일 마지막 자식 요소로서 지정된 요소를 추가한다. 다음 예시는 &amp;lt;body&amp;gt; 태그 맨 마지막 자식 요소로 a 노드가 추가된다.&lt;/p&gt;
&lt;pre id=&quot;code_1744358912702&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;document.querySelector('body').appendChild(a);&lt;/code&gt;&lt;/pre&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;b&gt;② insertBefore 메소드&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;insertBefore(n1, n2) 메소드는 n2 앞에 n1 노드를 배치한다.&amp;nbsp;&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;예시) parent-btn 요소 앞에 br 태그 배치&lt;/p&gt;
&lt;pre id=&quot;code_1744359220192&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;var br = document.createElement('br');
var btn = document.getElementById('parent-btn');
document.querySelector('body').insertBefore(br, btn);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예시) body 태그의 마지막 자식 요소로 p 태그 배치&lt;/p&gt;
&lt;pre id=&quot;code_1744359318082&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;var p = document.createElement('p');
p.textContent = &quot;HEllo&quot;;
document.querySelector('body').insertBefore(p, null);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예시) body 태그의 첫번째 자식 요소로 p 태그 배치&lt;/p&gt;
&lt;pre id=&quot;code_1744359401262&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;var body = document.querySelector('body');
var p = document.createElement('p');
p.textContent = &quot;HEllo&quot;;

body.insertBefore(p, body.firstChild);&lt;/code&gt;&lt;/pre&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;h4 style=&quot;border-left: 6px solid #00a667; letter-spacing: -1px; padding: 0px 0px 0px 7px; margin: 5px 0px 7px 0px;&quot; data-ke-size=&quot;size15&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;&amp;nbsp;복잡한 콘텐츠를 작성하는 경우 - DocumentFragment 객체&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;복잡한 콘텐츠를 작성하는 경우 DOM 문서에 appendChild 함수를 호출하여 노드를 추가하는 것은 가벼운 작업이 아니기 때문에 자제하는 것이 좋다. 이 때, DocumentFragment 객체에 콘텐츠를 조립한 후 함께 문서 트리에 추가하는 방법이 바람직하다. DocumentFragment 객체는 문서의 조각이며, 조립한 노드를 일시적으로 보관하기 위한 그릇이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;예시) &amp;lt;ul id=&quot;list&quot;&amp;gt; 태그에 목록(li)태그 생성하기&lt;/p&gt;
&lt;pre id=&quot;code_1744360370774&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 페이지 로드시 실행되는 이벤트 리스너를 등록한다.
document.addEventListener('DOMContentLoaded', function() {
    
    createListNode(['치킨', '만두', '라면', '디저트', '커피']);

}, false);

function createListNode(listValue) {
    var frag = document.createDocumentFragment();

    for(var i=0; i&amp;lt;listValue.length; i++) {
        var element = document.createElement('li');

        element.textContent = listValue[i];

        frag.appendChild(element);
    }

    document.getElementById('list').appendChild(frag);
}&lt;/code&gt;&lt;/pre&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;h4 style=&quot;border-left: 6px solid #00a667; letter-spacing: -1px; padding: 0px 0px 0px 7px; margin: 5px 0px 7px 0px;&quot; data-ke-size=&quot;size15&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;&amp;nbsp;노드 치환하기&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;자식 노드를 치환하는 것은 replaceChild 메소드의 역할이다. 두번째 인수의 노드를 첫번째 인수의 노드로 바꾼다.&lt;/p&gt;
&lt;pre id=&quot;code_1744361278469&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 페이지 로드시 실행되는 이벤트 리스너를 등록한다.
document.addEventListener('DOMContentLoaded', function() {
    
    var parent = document.getElementById('bin-ex');
    var after = createNode();

    parent.replaceChild(after, parent.firstChild);
}, false);&lt;/code&gt;&lt;/pre&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;h4 style=&quot;border-left: 6px solid #00a667; letter-spacing: -1px; padding: 0px 0px 0px 7px; margin: 5px 0px 7px 0px;&quot; data-ke-size=&quot;size15&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;&amp;nbsp;노드 삭제하기&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;자식 노드를 삭제하는 것은 removeChild 메소드의 역할이다. 인수로 삭제 대상의 노드 값이 들어간다.&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1744361374014&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;var parent = document.getElementById('bin-ex');
parent.removeChild(parent.firstChild);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>웹/Javascript</category>
      <author>초코초코초코</author>
      <guid isPermaLink="true">https://laustudy.tistory.com/458</guid>
      <comments>https://laustudy.tistory.com/458#entry458comment</comments>
      <pubDate>Fri, 11 Apr 2025 17:50:20 +0900</pubDate>
    </item>
    <item>
      <title>[JavaScript] 폼 요소에 액세스하기</title>
      <link>https://laustudy.tistory.com/457</link>
      <description>&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;h3 style=&quot;padding: 0.4em 1em 0.4em 0.5em; background: #e9efed; margin: 0.5em 0em; color: #000000; border-left: #00a667 10px solid; font-weight: bold; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot; data-ke-size=&quot;size23&quot;&gt;폼 요소에 액세스하기&lt;/h3&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;자바스크립트에서 폼(form)은 사용자의 입력을 받는 대표적인 수단이다. 이러한 폼에서 값을 취득하고 설정하는 방법을 알아본다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;border-left: 6px solid #00a667; letter-spacing: -1px; padding: 0px 0px 0px 7px; margin: 5px 0px 7px 0px;&quot; data-ke-size=&quot;size15&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;&amp;nbsp;입력 상자/선택 상자의 값 취득하기&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;입력 상자/선택 상자의 값을 취득하는 방법은 value 프로퍼티에 액세스하기만 하면 된다. 설정하는 것도 value 프로퍼티의 값을 변경하면 된다.&lt;/p&gt;
&lt;pre id=&quot;code_1744285292720&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;document.addEventListener('DOMContentLoaded', function() {
    document.getElementById('btn').addEventListener('click', function() {
        var name = document.getElementById('name');
        // 입력 상자 값 취득하기
        console.log(name.value);
        // 입력 상자 갑 설정하기
        // name.value = &quot;Hello&quot;;
    }, false);
}, false);&lt;/code&gt;&lt;/pre&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;h4 style=&quot;border-left: 6px solid #00a667; letter-spacing: -1px; padding: 0px 0px 0px 7px; margin: 5px 0px 7px 0px;&quot; data-ke-size=&quot;size15&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;&amp;nbsp;체크 상자의 값 취득하기&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1744285850716&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;div&amp;gt;
    좋아하는 음식은?
    &amp;lt;label&amp;gt;&amp;lt;input type=&quot;checkbox&quot; name=&quot;food&quot; value=&quot;라면&quot;&amp;gt;라면&amp;lt;/label&amp;gt;
    &amp;lt;label&amp;gt;&amp;lt;input type=&quot;checkbox&quot; name=&quot;food&quot; value=&quot;치킨&quot;&amp;gt;치킨&amp;lt;/label&amp;gt;
    &amp;lt;label&amp;gt;&amp;lt;input type=&quot;checkbox&quot; name=&quot;food&quot; value=&quot;초코타르트&quot;&amp;gt;초코타르트&amp;lt;/label&amp;gt;
    &amp;lt;input type=&quot;button&quot; value=&quot;송신&quot; id=&quot;btn&quot;&amp;gt;
&amp;lt;/div&amp;gt;&lt;/code&gt;&lt;/pre&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;
&lt;pre id=&quot;code_1744285833526&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;document.addEventListener('DOMContentLoaded', function() {
    
    document.getElementById('btn').addEventListener('click', function(){
        // 선택값 보관을 위한 배열
        let result = [];
        var foodsNode = document.getElementsByName('food');

        // 체크 박스 검색하여 체크 상태가 있는지 확인
        for(var i=0; i &amp;lt; foodsNode.length; i++) {
            var food = foodsNode.item(i);

            if(food.checked) {
                result.push(food.value);
            }
        }

        window.alert(result.toString());
    }, false);

}, false);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;border-left: 6px solid #00a667; letter-spacing: -1px; padding: 0px 0px 0px 7px; margin: 5px 0px 7px 0px;&quot; data-ke-size=&quot;size15&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;&amp;nbsp;라디오 버튼의 값 취득하기&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1744286250560&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;div&amp;gt;
    좋아하는 음식은?
    &amp;lt;label&amp;gt;&amp;lt;input type=&quot;radio&quot; name=&quot;food&quot; value=&quot;라면&quot;&amp;gt;라면&amp;lt;/label&amp;gt;
    &amp;lt;label&amp;gt;&amp;lt;input type=&quot;radio&quot; name=&quot;food&quot; value=&quot;치킨&quot;&amp;gt;치킨&amp;lt;/label&amp;gt;
    &amp;lt;label&amp;gt;&amp;lt;input type=&quot;radio&quot; name=&quot;food&quot; value=&quot;초코타르트&quot;&amp;gt;초코타르트&amp;lt;/label&amp;gt;
    &amp;lt;input type=&quot;button&quot; value=&quot;송신&quot; id=&quot;btn&quot;&amp;gt;
&amp;lt;/div&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;라디오 버튼의 값 취득은 체크 박스에서 값을 취득하는 것과 비슷하다.&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1744286208297&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;document.addEventListener('DOMContentLoaded', function() {
    
    var getRadioValue = function() {
        // 선택값 보관을 위한 배열
        let result = '';
        var foodsNode = document.getElementsByName('food');

        // 체크 박스 검색하여 체크 상태가 있는지 확인
        for(var i=0; i &amp;lt; foodsNode.length; i++) {
            var food = foodsNode.item(i);

            if(food.checked) {
                result = food.value;
            }
        }
        return result;
    }

    // 버튼 클릭시 getRadioValue 함수 실행
    document.getElementById('btn').addEventListener('click', function(){
        window.alert(getRadioValue());
    }, false);

}, false);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;border-left: 6px solid #00a667; letter-spacing: -1px; padding: 0px 0px 0px 7px; margin: 5px 0px 7px 0px;&quot; data-ke-size=&quot;size15&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;&amp;nbsp;라디오 버튼/체크 상자의 값 설정하기&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;라디오 버튼과 체크 상자의 초기값을 설정하는 것은 for 루프에서 개별 요소에 액세스하여 초기값에 해당하는 요소에 checked 표로퍼티를 true 로 설정하면 된다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;① 라디오 버튼 값 설정하기&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1744351118850&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;div&amp;gt;
    좋아하는 음식은?
    &amp;lt;label&amp;gt;&amp;lt;input type=&quot;radio&quot; name=&quot;food&quot; value=&quot;치킨&quot;&amp;gt;치킨&amp;lt;/label&amp;gt;
    &amp;lt;label&amp;gt;&amp;lt;input type=&quot;radio&quot; name=&quot;food&quot; value=&quot;만두&quot;&amp;gt;만두&amp;lt;/label&amp;gt;
    &amp;lt;label&amp;gt;&amp;lt;input type=&quot;radio&quot; name=&quot;food&quot; value=&quot;음료수&quot;&amp;gt;음료수&amp;lt;/label&amp;gt;
&amp;lt;/div&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;동일 이름의 라디오 버튼에서는 그중 하나를 체크 상태로 하면 다른 버튼의 체크는 해제된다. 따라서 일치된 요소가 발견된 곳에서 for 루프를 탈출해도 무방하다.&lt;/p&gt;
&lt;pre id=&quot;code_1744351095668&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 페이지 로드시 실행되는 이벤트 리스너를 등록한다.
document.addEventListener('DOMContentLoaded', function() {
    
    var setRadioValue = function(name, value) {
        var element = document.getElementsByName(name);

        for(var i=0; i&amp;lt;element.length; i++) {
            var elem = element.item(i);

            if(elem.value === value) {
                elem.checked = true;
                break;
            }
        }
    }
    
    setRadioValue('food', '치킨');
}, false);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;② 체크 상자의 값 설정하기&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1744351314750&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;div&amp;gt;
    좋아하는 음식은?
    &amp;lt;label&amp;gt;&amp;lt;input type=&quot;checkbox&quot; name=&quot;food&quot; value=&quot;치킨&quot;&amp;gt;치킨&amp;lt;/label&amp;gt;
    &amp;lt;label&amp;gt;&amp;lt;input type=&quot;checkbox&quot; name=&quot;food&quot; value=&quot;만두&quot;&amp;gt;만두&amp;lt;/label&amp;gt;
    &amp;lt;label&amp;gt;&amp;lt;input type=&quot;checkbox&quot; name=&quot;food&quot; value=&quot;음료수&quot;&amp;gt;음료수&amp;lt;/label&amp;gt;
&amp;lt;/div&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1744351294529&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 페이지 로드시 실행되는 이벤트 리스너를 등록한다.
document.addEventListener('DOMContentLoaded', function() {
    
    var setCheckValue = function(name, value) {
        var element = document.getElementsByName(name);

        for(var i=0; i&amp;lt;element.length; i++) {
            var elem = element.item(i);

            if(value.indexOf(elem.value) &amp;gt; -1) {
                elem.checked = true;
            }
        }
    }
    
    setCheckValue('food', ['치킨', '음료수']);
}, false);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;border-left: 6px solid #00a667; letter-spacing: -1px; padding: 0px 0px 0px 7px; margin: 5px 0px 7px 0px;&quot; data-ke-size=&quot;size15&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;&amp;nbsp;복수 선택 리스트 상자의 값 취득하기/설정하기&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1744351859135&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;div&amp;gt;
    &amp;lt;label for=&quot;food&quot;&amp;gt;좋아하는 음식은?&amp;lt;/label&amp;gt;
    &amp;lt;select id=&quot;food&quot; multiple&amp;gt;
        &amp;lt;option value=&quot;라면&quot;&amp;gt;라면&amp;lt;/option&amp;gt;
        &amp;lt;option value=&quot;만두&quot;&amp;gt;만두&amp;lt;/option&amp;gt;
        &amp;lt;option value=&quot;디저트&quot;&amp;gt;디저트&amp;lt;/option&amp;gt;
    &amp;lt;/select&amp;gt;
    &amp;lt;input type=&quot;button&quot; value=&quot;송신&quot; id=&quot;btn&quot; /&amp;gt;
&amp;lt;/div&amp;gt;&lt;/code&gt;&lt;/pre&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;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;① 리스트 선택 상자의 값 취득하기&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1744351842510&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 페이지 로드시 실행되는 이벤트 리스너를 등록한다.
document.addEventListener('DOMContentLoaded', function() {
    
    var getSelectValue = function(name) {
        var result = [];
        var opts = document.getElementById(name).options;

        for(var i=0; i&amp;lt;opts.length; i++) {
            var opt = opts.item(i);

            if(opt.selected) {
                result.push(opt.value);
            }
        }
        
        return result;
    }
    
    document.getElementById('btn').addEventListener('click', function() {
        window.alert(getSelectValue('food'));
    }, false);
}, false);&lt;/code&gt;&lt;/pre&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;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;② 리스트 선택 상자의 값 설정하기&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1744352144518&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 페이지 로드시 실행되는 이벤트 리스너를 등록한다.
document.addEventListener('DOMContentLoaded', function() {
    
    var setSelectValue = function(name, value) {
        var opts = document.getElementById(name).options;

        for(var i=0; i&amp;lt;opts.length; i++) {
            var opt = opts.item(i);

            if(value.indexOf(opt.value) &amp;gt; -1) {
                opt.selected = true;
            }
        }
    }
    
    setSelectValue('food', ['라면', '만두'])
}, false);&lt;/code&gt;&lt;/pre&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;h4 style=&quot;border-left: 6px solid #00a667; letter-spacing: -1px; padding: 0px 0px 0px 7px; margin: 5px 0px 7px 0px;&quot; data-ke-size=&quot;size15&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;&amp;nbsp;업로드된 파일의 정보 취득하기&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1744354885898&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;form&amp;gt;
    &amp;lt;label for=&quot;file&quot;&amp;gt;파일: &amp;lt;/label&amp;gt;
    &amp;lt;input type=&quot;file&quot; name=&quot;file&quot; id=&quot;file&quot; multiple /&amp;gt;
&amp;lt;/form&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1744354869289&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 페이지 로드시 실행되는 이벤트 리스너를 등록한다.
document.addEventListener('DOMContentLoaded', function() {
    
    document.getElementById('file').addEventListener('change', function() {
        var inputs = document.getElementById('file').files;

        for(var i=0; i&amp;lt;inputs.length; i++) {
            var input = inputs[i];

            console.log(`파일 명 : ${input.name}`);
            console.log(`종류 : ${input.type}`);
            console.log(`사이즈 : ${input.size / 1024} KB`);
            console.log(`최종갱신일 : ${input.lastModifiedDate}`);
        }
    }, true);
}, false);&lt;/code&gt;&lt;/pre&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;</description>
      <category>웹/Javascript</category>
      <author>초코초코초코</author>
      <guid isPermaLink="true">https://laustudy.tistory.com/457</guid>
      <comments>https://laustudy.tistory.com/457#entry457comment</comments>
      <pubDate>Thu, 10 Apr 2025 21:00:15 +0900</pubDate>
    </item>
    <item>
      <title>[JavaScript] 속성값 취득/설정하기</title>
      <link>https://laustudy.tistory.com/456</link>
      <description>&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;h3 style=&quot;padding: 0.4em 1em 0.4em 0.5em; background: #e9efed; margin: 0.5em 0em; color: #000000; border-left: #00a667 10px solid; font-weight: bold; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot; data-ke-size=&quot;size23&quot;&gt;속성값 컨트롤하기&lt;/h3&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;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;border-left: 6px solid #00a667; letter-spacing: -1px; padding: 0px 0px 0px 7px; margin: 5px 0px 7px 0px;&quot; data-ke-size=&quot;size15&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;&amp;nbsp;요소 노드 속 같은 이름의 프로퍼티로 액세스 가능&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;대부분의 요소 노드에 액세스했다면 속성값에 액세스하는 것은 간단하다. 대부분의 속성은 요소 노드 속의 동일한 이름의 프로퍼티로 액세스가 가능하기 때문이다.&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1744278194637&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;var naver = document.getElementsByClassName('naver');
// 속성값 취득
console.log(naver[0].href);

// 속성값 변경
naver[0].href = &quot;http://www.google.com&quot;;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 그렇지 않은 경우도 있다. CSS 클래스를 나타내는 속성명은 'class' 이지만 DOM 프로퍼티는 'className'이다.&lt;/p&gt;
&lt;pre id=&quot;code_1744278366867&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;var naver = document.getElementsByClassName('naver');
// 속성값 취득
console.log(naver[0].className);

// 속성값 변경
naver[0].className = &quot;banana&quot;;&lt;/code&gt;&lt;/pre&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;h4 style=&quot;border-left: 6px solid #00a667; letter-spacing: -1px; padding: 0px 0px 0px 7px; margin: 5px 0px 7px 0px;&quot; data-ke-size=&quot;size15&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;&amp;nbsp;속성명과 프로퍼티의 차이를 고려하지 않고 속성값에 접근하기(getAttribute/setAttribute)&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;속성과 프로퍼티의 이름의 차이를 의식하지 않고 싶다면 getAttribute/setAttribute 메소드를 사용하면 된다.&lt;/p&gt;
&lt;pre id=&quot;code_1744281401164&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;var naver = document.getElementsByClassName('naver');

var target = naver[0].getAttribute('target');
console.log(target);   // _blank

naver[0].setAttribute('href', &quot;http://www.naver.com&quot;);&lt;/code&gt;&lt;/pre&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;h4 style=&quot;border-left: 6px solid #00a667; letter-spacing: -1px; padding: 0px 0px 0px 7px; margin: 5px 0px 7px 0px;&quot; data-ke-size=&quot;size15&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;&amp;nbsp;불특정 속성 취득하기&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;특정 요소 노드에 속하느 모든 속성을 취득하고 싶은 경우에는 attributes 프로퍼티를 사용한다. 꺼낸 속성의&lt;/p&gt;
&lt;pre id=&quot;code_1744281772043&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;var node = document.querySelector('[value=&quot;english&quot;]');

var attrs = node.attributes;

// 모든 속성 검색
for(var i=0; i&amp;lt;attrs.length; i++) {
    var attr = attrs.item(i);
    console.log(`${attr.name} : ${attr.value}`);
}&lt;/code&gt;&lt;/pre&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;h4 style=&quot;border-left: 6px solid #00a667; letter-spacing: -1px; padding: 0px 0px 0px 7px; margin: 5px 0px 7px 0px;&quot; data-ke-size=&quot;size15&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;&amp;nbsp;텍스트 취득 및 설정하기&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;요소 아래의 텍스트를 취득 및 설정하려면 innerHTML/textContent 속성을 이용한다. innerHTML 속성은 HTML로 텍스트를 삽입하고 textContent 는 모든 텍스트를 문자열로 인식하는 것이 차이점이다.&lt;/p&gt;
&lt;pre id=&quot;code_1744284536116&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;var node = document.querySelector('.button');
var node2 = document.querySelector('.button2');

node.textContent = &quot;&amp;lt;i&amp;gt;버튼&amp;lt;/i&amp;gt;&quot;;    // 문자열 그대로 반영
node2.innerHTML = &quot;&amp;lt;i&amp;gt;버튼&amp;lt;/i&amp;gt;&quot;;     // 이텔릭 체로 버튼 텍스트만 반영&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문자열을 취득하는 과정에서도 innerHTML 프로퍼티는 대상 요소 아래를 HTML 문자열로 반환한다. 반면 textContent 속성은 자식 요소 각각에서 텍스트만 추출하여 연결한 것을 반환한다.&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;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;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;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;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;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;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;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;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;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>웹/Javascript</category>
      <author>초코초코초코</author>
      <guid isPermaLink="true">https://laustudy.tistory.com/456</guid>
      <comments>https://laustudy.tistory.com/456#entry456comment</comments>
      <pubDate>Thu, 10 Apr 2025 20:33:47 +0900</pubDate>
    </item>
    <item>
      <title>[JavaScript] DOM의 기본과 클라이언트 측 JavaScript 의 기본 지식</title>
      <link>https://laustudy.tistory.com/455</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;padding: 0.4em 1em 0.4em 0.5em; background: #e9efed; margin: 0.5em 0em; color: #000000; border-left: #00a667 10px solid; font-weight: bold; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot; data-ke-size=&quot;size23&quot;&gt;DOM&lt;/h3&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;외부 서비스에서 어떤 입력을 받아 이를 처리한 결과를 페이지에 반영시킨다는 흐름이 자바스크립트의 흐름이다. 결과를 페이지에 반영시킨다는 것은 HTML을 JavaScript에서 편집한다는 뜻이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;DOM 은 마크업 언어로 작성된 문서에 액세스하기 위한 표준적인 구조로 JavaScript에 한정하지 않고 현재 주로 사용되는 언어의 대부분에서 지원하고 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;DOM 은 문서를 문서 트리로서 취급한다. DOM 이라는 이름처럼 문서에 포함되는 요소나 속성, 텍스트를 각각 객체로 보기 때문에 객체의 집합(계층 관계)이 문서라고 생각한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;문서를 구성하는 요소나 속성, 텍스트 등의 객체를 노드라고 부른다. 종류에 따라 요소 노드, 속성 노드, 텍스트 노드 등으로 부른다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;DOM 은 노드를 추출, 추가, 치환, 삭제하기 위한 범용적인 수단을 제공하는 API라고 할 수 있다. 각각의 노드는 트리상에서의 상하 관계에 따라 루트 노드, 부모 노드, 자식노드, 형제노드로 불리기도 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;padding: 0.4em 1em 0.4em 0.5em; background: #e9efed; margin: 0.5em 0em; color: #000000; border-left: #00a667 10px solid; font-weight: bold; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot; data-ke-size=&quot;size23&quot;&gt;JavaScript 사전 지식&lt;/h3&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;자바스크립트에서 가장 먼저 파악해야할 부분은 요소 노드 취득, 문서 트리 간의 왕래, 이벤트 구동 모델이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;border-left: 6px solid #00a667; letter-spacing: -1px; padding: 0px 0px 0px 7px; margin: 5px 0px 7px 0px;&quot; data-ke-size=&quot;size15&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;&amp;nbsp;요소 노드 취득하기&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;border-radius: 15px 15px 15px 0; border-bottom: 5px solid #00a667; padding: 13px; background: #ddf9ee; font-weight: bold;&quot;&gt;ID값을 키값으로 노드 취득하기(getElementById 메소드)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;취득하고 싶은 요소가 명확한 경우 getElementById 메소드를 이용한 방법이 가장 간단하다.&lt;/p&gt;
&lt;pre id=&quot;code_1744203921783&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;span id=&quot;result&quot;&amp;gt;사랑해&amp;lt;/span&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;자바스크립트에서 ID 값에 접근하기&lt;/p&gt;
&lt;pre id=&quot;code_1744206022926&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;const result = document.getElementById('result');
result.textContent = &quot;Hello&quot;;&lt;/code&gt;&lt;/pre&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;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;border-radius: 15px 15px 15px 0; border-bottom: 5px solid #00a667; padding: 13px; background: #ddf9ee; font-weight: bold;&quot;&gt;태그명으로 키값으로 노드 취득하기(getElementsByTagName 메소드)&lt;/span&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;태그명으로 값을 가져오는 것은 복수의 요속 서로 일치할 가능성이 있기 때문에 getElementsByTagName 메소드의 반환값은 요소의 집합이 된다. 인수 name 부분에 *를 지정하면 모든 요소를 겁색할 수 있게 된다.&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;lt;a&amp;gt;태그를 모두 가져오는 예시이다. length 멤버로 가져온 태그의 개수를 알 수 있고 item(i) 벱어로 노드를 취득할 수 있다.&lt;/p&gt;
&lt;pre id=&quot;code_1744206412713&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;var alist = document.getElementsByTagName('a');

for(var i=0; i &amp;lt; alist.length; i++) {
    console.log(alist.item(i).href);
    // 대괄호로도 구분 가능하다
    console.log(alist[i].href);
}&lt;/code&gt;&lt;/pre&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;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;border-radius: 15px 15px 15px 0; border-bottom: 5px solid #00a667; padding: 13px; background: #ddf9ee; font-weight: bold;&quot;&gt;name 속성을 키로 요소 취득하기(getElementsByName 메소드)&lt;/span&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;name 속성을 키로 요소를 취득하는 메소드는 getElemetsByName 메소드이다. 일반적으로 &amp;lt;input&amp;gt; 태그나 &amp;lt;select&amp;gt; 태그와 같은 폼 요소에서의 액세스에서 이용한다.&amp;nbsp;&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;/p&gt;
&lt;pre id=&quot;code_1744206855790&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;html&quot;&gt;&lt;code&gt;&amp;lt;input type=&quot;text&quot; size=&quot;10&quot; id=&quot;time&quot; name=&quot;time-ex&quot;/&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1744206825357&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;var current = new Date();
var nam = document.getElementsByName('time-ex');
nam[0].value = current.toLocaleTimeString();&lt;/code&gt;&lt;/pre&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;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;border-radius: 15px 15px 15px 0; border-bottom: 5px solid #00a667; padding: 13px; background: #ddf9ee; font-weight: bold;&quot;&gt;class 속성을 키로 요소 취득하기(getElementsByClassName 메소드)&lt;/span&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;class 속성을 키로 하여 요소에 접근할 수 있다.&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;/p&gt;
&lt;pre id=&quot;code_1744212695238&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;ul&amp;gt;
    &amp;lt;li&amp;gt;&amp;lt;p class=&quot;ex&quot;&amp;gt;Hello&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;
    &amp;lt;li&amp;gt;&amp;lt;p class=&quot;ex strong&quot;&amp;gt;Hello2&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;
    &amp;lt;li&amp;gt;&amp;lt;p class=&quot;ex&quot;&amp;gt;Hello3&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1744212663800&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;var alist = document.getElementsByClassName('ex');
// var alist = document.getElementsByClassName('ex strong');

for(var i=0; i &amp;lt; alist.length; i++) {
    console.log(alist.item(i).textContent);
    // 대괄호로도 구분 가능하다
    console.log(alist[i].textContent);
}&lt;/code&gt;&lt;/pre&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;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;border-radius: 15px 15px 15px 0; border-bottom: 5px solid #00a667; padding: 13px; background: #ddf9ee; font-weight: bold;&quot;&gt;셀렉터 식에 일치하는 요소 취득하기(querySelector / querySelectorAll 메소드&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;특정 이름/속성값을 키로 HTML 요소를 검색하는 것보다 복잡한 조건으로 검색할 수 있다. 단, 속도가 느리다. querySelector 메소드는 조건에 맞는 처음의 하나 요소를 가져오고 querySelectorAll 메소드는 전부다 가져온다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;사용할 수 있는 셀렉터 식&lt;/b&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style14&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 25.1938%;&quot;&gt;셀렉터&lt;/td&gt;
&lt;td style=&quot;width: 41.4728%;&quot;&gt;개요&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;예&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 25.1938%;&quot;&gt;*&lt;/td&gt;
&lt;td style=&quot;width: 41.4728%;&quot;&gt;모든 요소 취득&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;*&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 25.1938%;&quot;&gt;#id&lt;/td&gt;
&lt;td style=&quot;width: 41.4728%;&quot;&gt;지정한 ID의 요소 취득&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;#main&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 25.1938%;&quot;&gt;.class&lt;/td&gt;
&lt;td style=&quot;width: 41.4728%;&quot;&gt;지정한 클래스명의 요소 취득&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;.external&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 25.1938%;&quot;&gt;elem&lt;/td&gt;
&lt;td style=&quot;width: 41.4728%;&quot;&gt;지정한 태그명 요소 취득&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;li&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 25.1938%;&quot;&gt;select1, select2, selectX&lt;/td&gt;
&lt;td style=&quot;width: 41.4728%;&quot;&gt;해당하는 셀렉터에 일치하는 요소 모두 취득&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;#main, li&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 25.1938%;&quot;&gt;parent &amp;gt; child&lt;/td&gt;
&lt;td style=&quot;width: 41.4728%;&quot;&gt;parent 요소의 자식 요소 child 취득&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;#main &amp;gt; div&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 25.1938%;&quot;&gt;ancestor descendant&lt;/td&gt;
&lt;td style=&quot;width: 41.4728%;&quot;&gt;ancestor 요소의 자식 요소 descendant 모두 취득&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;#list li&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 25.1938%;&quot;&gt;[attr]&lt;/td&gt;
&lt;td style=&quot;width: 41.4728%;&quot;&gt;지정한 속성을 가진 요소 취득&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;input[type]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 25.1938%;&quot;&gt;[attr = value]&lt;/td&gt;
&lt;td style=&quot;width: 41.4728%;&quot;&gt;속성이 value 값과 동등한 요소 취득&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;input[type=&quot;button&quot;]&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;예시)&lt;/p&gt;
&lt;pre id=&quot;code_1744213228153&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;var list = document.querySelectorAll('#list p');
var only = document.querySelector('.strong');

for(var i=0; i &amp;lt; list.length; i++) {
    console.log(list.item(i).textContent);
    // 대괄호로도 구분 가능하다
    console.log(list[i].textContent);
}

console.log(only.textContent);&lt;/code&gt;&lt;/pre&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;h4 style=&quot;border-left: 6px solid #00a667; letter-spacing: -1px; padding: 0px 0px 0px 7px; margin: 5px 0px 7px 0px;&quot; data-ke-size=&quot;size15&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;&amp;nbsp;문서 트리 사이 오가기 - 노드 워킹&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;문서 전체에서 원하는 요소를 검색하는 것은 낭비가 심하기 때문에 성능 저하의 원인이 될 수 있다. 따라서 DOM 에서는 노드를 기점으로 상대적인 위치 관계에서 노드를 검색할 수도 있다. 트리 모양이 된 노드 사이를 가지를 따라 이동하는 모습 때문에 노드 워킹이라고도 불린다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기본 예시의 다음 코드는 다음과 같다. childNodes 로 자식 노드들을 가져온다.&lt;/p&gt;
&lt;pre id=&quot;code_1744213887486&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;/**
    &amp;lt;ul id=&quot;list&quot;&amp;gt;
        &amp;lt;li&amp;gt;Hello&amp;lt;/li&amp;gt;
        &amp;lt;li&amp;gt;Hello2&amp;lt;/li&amp;gt;
        &amp;lt;li&amp;gt;Hello3&amp;lt;/li&amp;gt;
    &amp;lt;/ul&amp;gt;
 */

// &amp;lt;ul id=&quot;list&quot;&amp;gt;&amp;lt;/ul&amp;gt; 취득
var list = document.getElementById(&quot;list&quot;);

// list 의 자식 노드 취득득
var listOption = list.childNodes;

for(var i=0; i &amp;lt; listOption.length; i++) {
    var option = listOption[i];
    // 자식 요소가 노드인 경우에만 값을 표시한다.
    if(option.nodeType === 1) {
        console.log(option.textContent);
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;개행이나 공백은 텍스트 노드로 간주된다. 따라서 childNodes 로 가져온 노드들 중에는 텍스트 노드와 요소 노드가 섞여 취득할 가능성이 있다. 요소 노드만 접근하고 싶은 경우에는 가져온 노드가 요소 노드인지 확인할 필요가 있다.&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;b&gt;노드의 종류&lt;/b&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style2&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 25%;&quot;&gt;반환값&lt;/td&gt;
&lt;td style=&quot;width: 25%;&quot;&gt;개요&lt;/td&gt;
&lt;td style=&quot;width: 25%;&quot;&gt;반환값&lt;/td&gt;
&lt;td style=&quot;width: 25%;&quot;&gt;개요&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 25%;&quot;&gt;1&lt;/td&gt;
&lt;td style=&quot;width: 25%;&quot;&gt;요소 노드&lt;/td&gt;
&lt;td style=&quot;width: 25%;&quot;&gt;6&lt;/td&gt;
&lt;td style=&quot;width: 25%;&quot;&gt;실제 선언 노드&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 25%;&quot;&gt;2&lt;/td&gt;
&lt;td style=&quot;width: 25%;&quot;&gt;속성 &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;노드&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 25%;&quot;&gt;7&lt;/td&gt;
&lt;td style=&quot;width: 25%;&quot;&gt;처리 명령 노드&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 25%;&quot;&gt;3&lt;/td&gt;
&lt;td style=&quot;width: 25%;&quot;&gt;텍스트 &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;노드&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 25%;&quot;&gt;8&lt;/td&gt;
&lt;td style=&quot;width: 25%;&quot;&gt;주석 노드&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 25%;&quot;&gt;4&lt;/td&gt;
&lt;td style=&quot;width: 25%;&quot;&gt;CDATA 섹션&lt;/td&gt;
&lt;td style=&quot;width: 25%;&quot;&gt;9&lt;/td&gt;
&lt;td style=&quot;width: 25%;&quot;&gt;문서 노드&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 25%;&quot;&gt;5&lt;/td&gt;
&lt;td style=&quot;width: 25%;&quot;&gt;실제 참조 노드&lt;/td&gt;
&lt;td style=&quot;width: 25%;&quot;&gt;10&lt;/td&gt;
&lt;td style=&quot;width: 25%;&quot;&gt;문서형 선언 노드&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 25%;&quot;&gt;11&lt;/td&gt;
&lt;td style=&quot;width: 25%;&quot;&gt;문서의 단편&lt;/td&gt;
&lt;td style=&quot;width: 25%;&quot;&gt;12&lt;/td&gt;
&lt;td style=&quot;width: 25%;&quot;&gt;가변 선언 노드&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;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;예시) firstChild 와 nextSibling 프러퍼티&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1744214275290&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// &amp;lt;ul id=&quot;list&quot;&amp;gt;&amp;lt;/ul&amp;gt; 취득
var list = document.getElementById(&quot;list&quot;);

// list 의 자식 노드 취득득
var child = list.firstChild;

while(child) {
    if(child.nodeType === 1) {
        console.log(child.textContent);
    }

    // 다음의 자식 노드를 취득
    child = child.nextSibling;
}&lt;/code&gt;&lt;/pre&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;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;예시) firstElementChild 와 nextElementSibling 프로퍼티&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;firstElementChild 프로퍼티는 밑의 자식 요소를 반환하고 nextElementSibling 프로퍼티는 다음 형제 요소를 반환한다. 반환값이 Element(요소)이기 대문에 nodeType 판정 과정이 불필요하다.&lt;/p&gt;
&lt;pre id=&quot;code_1744214436043&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// &amp;lt;ul id=&quot;list&quot;&amp;gt;&amp;lt;/ul&amp;gt; 취득
var list = document.getElementById(&quot;list&quot;);

// list 의 자식 노드 취득득
var child = list.firstElementChild;

while(child) {
    console.log(child.textContent);
    // 다음의 자식 노드를 취득
    child = child.nextElementSibling;
}&lt;/code&gt;&lt;/pre&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;h4 style=&quot;border-left: 6px solid #00a667; letter-spacing: -1px; padding: 0px 0px 0px 7px; margin: 5px 0px 7px 0px;&quot; data-ke-size=&quot;size15&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;&amp;nbsp;이벤트 트리거로 한 처리 실행하기 - 이벤트 구동 모델&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;브라우저로 표시되는 페이지상에서는 다양한 이벤트가 발생한다. 버튼이 클릭되거나 마우스 포인터가 문자열 위에 있거나 텍스트 박스의 내용이 변경되거나 등이 있다. 클라이언트 측 JavaScript 에서는 해당 이벤트에 따라 실행하는 코드를 작성하는 것이 특징이다. 이 프로그래밍 모델을 이벤트 드리븐 모델(이벤트 구동 모델)이라고 부른다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;1. 태그 내의 속성으로 선언하기(이벤트 핸들러)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;HTML 코드 내에서 이벤트 핸들러를 사용한다. 가장 간단한 이벤트 트리거 방법이다.&lt;/p&gt;
&lt;pre id=&quot;code_1744214971471&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;태그명 on이벤트명=&quot;Javascript의 코드&quot;&amp;gt;&lt;/code&gt;&lt;/pre&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;
&lt;pre id=&quot;code_1744215057141&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;input type=&quot;button&quot; value=&quot;다이얼로그&quot; onclick=&quot;javascript:window.alert('Hello')&quot;&amp;gt;&lt;/code&gt;&lt;/pre&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;
&lt;pre id=&quot;code_1744214810374&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;function btn_click() {
    console.log('버튼 클릭됨');
    window.alert('버튼 클릭됨');
}&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1744214896453&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;input type=&quot;button&quot; value=&quot;다이얼로그&quot; onclick=&quot;btn_click()&quot;&amp;gt;&lt;/code&gt;&lt;/pre&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;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. 요소 객체의 프로퍼티로 선언하기(이벤트 핸들러)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;개별 요소의 이벤트 핸들러는 onload 이벤트 핸들러 아래에 기술해야한다.&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1744215244433&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 페이지 로드가 되었을 때 실행한다.
window.onload = function() {
    document.getElementById(&quot;alert&quot;).onclick = function() {
        window.alert('Hello!');
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;+ 페이지 로드 전에 getElementById 메소드를 호출할 경우 원하는 요소를 가져올 수 없다.&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;b&gt;3. addEventListener 메소드로 선언하기(이벤트 리스너)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이벤트 리스너는 동일 요소의 동일 이벤트에 관해 복수로 연관시킬 수 있는 이벤트 핸들러이다.&lt;/p&gt;
&lt;pre id=&quot;code_1744215580036&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 페이지 로드시 실행되는 이벤트 리스너를 등록한다.
document.addEventListener('DOMContentLoaded', function() {
    // 버튼 클릭시 실행되는 이벤트 리스너 등록하기
    document.getElementById(&quot;alert&quot;).addEventListener('click', function() {
        window.alert('버튼 클릭');
    }, false);
}, false);&lt;/code&gt;&lt;/pre&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;b&gt; onload 이벤트 핸들러와 DOMContentLoaded 이벤트 리스너의 차이점&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;onload 이벤트 핸들러는 콘텐츠 본체와 모든 이미지가 로드된 후에 실행되고 DOMContentLoaded 이벤트 리스너는 콘텐츠 본체가 로드된 후에 실행되지만 이미지의 로드를 기다리지 않는다. 대개의 처리는 이미지의 로드를 기다릴 필요가 없으므로 DOMContentLoaded 이벤트 리스너를 이용하여 스크립트의 시작 타밍을 앞당길 수 있다.(기본)&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;</description>
      <category>웹/Javascript</category>
      <author>초코초코초코</author>
      <guid isPermaLink="true">https://laustudy.tistory.com/455</guid>
      <comments>https://laustudy.tistory.com/455#entry455comment</comments>
      <pubDate>Thu, 10 Apr 2025 01:21:48 +0900</pubDate>
    </item>
    <item>
      <title>반응형 웹 디자인과 그리드 레이아웃</title>
      <link>https://laustudy.tistory.com/454</link>
      <description>&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;h3 style=&quot;padding: 0.4em 1em 0.4em 0.5em; background: #e9efed; margin: 0.5em 0em; color: #000000; border-left: #00a667 10px solid; font-weight: bold; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot; data-ke-size=&quot;size23&quot;&gt;반응형 웹 디자인&lt;/h3&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;웹 사이트의 내용을 그대로 유지하면서 다양한 화면 크기에 맞게 웹 사이트를 표시하는 방법이다. 다양한 화면 크기의 모바일 기기들의 웹 사이트를 표시하면 화면 디스플레이 값이 다양해지고 있는 때에 화면 크기에 반응해 화면 요소들을 자동으로 바꾸어 사이트를 구현하는 것이 바로 반응형 웹 디자인이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;단, 반응형 웹 기술이 최신 웹 표준인 CSS3의 일부 최신 모던 웹 브라우저에서만 지원된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;border-left: 6px solid #00a667; letter-spacing: -1px; padding: 0px 0px 0px 7px; margin: 5px 0px 7px 0px;&quot; data-ke-size=&quot;size15&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;&amp;nbsp;뷰포트(viewPort)&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;뷰포트란 실제 내용이 표시되는 영역을 뜻한다. PC 화면과 모바일 화면의 픽셀 표시 방법이 다르기 때문에 모바일 화면에서 의도한대로 표시되지 않는다. 뷰포트를 지정하면 기기 화면에 맞춰 확대/축소해서 내용을 표시한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;border-radius: 15px 15px 15px 0; border-bottom: 5px solid #00a667; padding: 13px; background: #ddf9ee; font-weight: bold;&quot;&gt;뷰포트 지정하기&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;&amp;lt;head&amp;gt; 태그 안에서 &amp;lt;meta&amp;gt; 태그를 이용해 뷰포트를 지정한다.&lt;/p&gt;
&lt;pre id=&quot;code_1744122797269&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;meta name=&quot;viewport&quot; content=&quot;&amp;lt;속성1=값&amp;gt;, &amp;lt;속성2=값&amp;gt;&quot;&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;사용할 수 있는 속성값&lt;/b&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 123px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style14&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 25%; height: 21px;&quot;&gt;속성&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 21px;&quot;&gt;설명&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 21px;&quot;&gt;사용 가능한 값&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 21px;&quot;&gt;기본 값&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 25%; height: 17px;&quot;&gt;width&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 17px;&quot;&gt;뷰포트 너비&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 17px;&quot;&gt;device-width 또는 크기&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 17px;&quot;&gt;브라우저 기본 값&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 25%; height: 17px;&quot;&gt;height&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 17px;&quot;&gt;뷰포트 높이&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 17px;&quot;&gt;device-height 또는 크기&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 17px;&quot;&gt;브라우저 기본 값&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 25%; height: 17px;&quot;&gt;user-scalable&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 17px;&quot;&gt;확대/축소 가능 여부&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 17px;&quot;&gt;yes 또는 no&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 17px;&quot;&gt;yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 25%; height: 17px;&quot;&gt;initial-scale&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 17px;&quot;&gt;초기 확대/축소 값&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 17px;&quot;&gt;1~10&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 17px;&quot;&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 25%; height: 17px;&quot;&gt;minimum-scale&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 17px;&quot;&gt;최소 확대/축소 값&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 17px;&quot;&gt;0~10&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 17px;&quot;&gt;0.25&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 25%; height: 17px;&quot;&gt;maximum-scale&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 17px;&quot;&gt;최대 확대/축소 값&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 17px;&quot;&gt;0~10&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 17px;&quot;&gt;1.6&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;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;일반적인 사용법&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1744123097194&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1&quot;&amp;gt;&lt;/code&gt;&lt;/pre&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;h4 style=&quot;border-left: 6px solid #00a667; letter-spacing: -1px; padding: 0px 0px 0px 7px; margin: 5px 0px 7px 0px;&quot; data-ke-size=&quot;size15&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;&amp;nbsp;그리드 시스템(grid system)&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;화면을 여러 개의 칼럼(column)으로 나누어, 필요할 때마다 칼럼들을 묶어 배치하는 방법이다. 화면 너비 값에 따라 '960 그리드 시스템', '1200 그리드 시스템' 등으로 나뉜다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;칼렘 개수에 따라 '12 칼럼 그리드 스시템', '16 칼럼 그리드 시스템', '24 칼럼 그리드 시스템' 등으로 나뉜다. 주로 960 픽셀 12칼럼의 그리드 시스템을 사용한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;고정 그리드 : 화면 너비를 일정하게 고정하고 레이아웃을 만든다.&lt;/li&gt;
&lt;li&gt;가변 그리드 : 화면 너비를 % 같은 가변 값으로 지정한다.&amp;nbsp;&lt;/li&gt;
&lt;/ol&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;
&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;h4 style=&quot;border-left: 6px solid #00a667; letter-spacing: -1px; padding: 0px 0px 0px 7px; margin: 5px 0px 7px 0px;&quot; data-ke-size=&quot;size15&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;&amp;nbsp;고정 그리드 레이아웃&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문서의 맨 바깥 부분을 #wrapper 요소로 묶고 너비를 960px로 지정한다. 헤더와 본문, 사이드바, 퓨터를 배치하고 이때 너비는 px 값으로 지정한다. 화면 너비가 좁아질 경우 내용의 일부가 가려질 수 있다. 스크롤에 따라(화면 너비 값에 따라) 요소들이 가변적으로 변하지 않기 때문에 가려지는 부분이 생긴다.&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;/p&gt;
&lt;pre id=&quot;code_1744124472022&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#wrapper {
    width: 960px;
    margin: 0 auto;
}

header {
    width: 960px;
    height: 120px;
    background-color: cornflowerblue;
}

.content {
    float: left;
    width: 600px;
    padding: 15px;
    height: 400px;
    background-color: burlywood;
}

.right-side {
    float: right;
    width: 300px;
    padding: 15px;
    height: 400px;
    background-color: aquamarine;
}

footer {
    clear: both;
    width: 960px;
    height: 120px;
    background-color: brown;
}&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1744124517167&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;div id=&quot;wrapper&quot;&amp;gt;
    &amp;lt;header&amp;gt;고정 그리드&amp;lt;/header&amp;gt;
    &amp;lt;section class=&quot;content&quot;&amp;gt;
        본문
    &amp;lt;/section&amp;gt;
    &amp;lt;aside class=&quot;right-side&quot;&amp;gt;
        오른쪽 사이드
    &amp;lt;/aside&amp;gt;
    &amp;lt;footer&amp;gt;
        footer
    &amp;lt;/footer&amp;gt;
&amp;lt;/div&amp;gt;&lt;/code&gt;&lt;/pre&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;h4 style=&quot;border-left: 6px solid #00a667; letter-spacing: -1px; padding: 0px 0px 0px 7px; margin: 5px 0px 7px 0px;&quot; data-ke-size=&quot;size15&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;&amp;nbsp;가변 그리드 레이아웃&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;전체를 감싸는 요소의 너비를 %로 변환한다. 화면에 꽉 차게 하고 싶다면 100%로 지정하고 여유를 두려면 적당히 지정한다. 전체를 감싸는 요소의 너비를 기준으로 각 요소의 너비를 계산한다.&lt;/p&gt;
&lt;pre id=&quot;code_1744124642968&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;(요소의 너비 / 콘텐츠 전체를 감싸는 요소의 너비) * 100&lt;/code&gt;&lt;/pre&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;p data-ke-size=&quot;size16&quot;&gt;예시)&lt;/p&gt;
&lt;pre id=&quot;code_1744124832900&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#wrapper {
    width: 96%;
    margin: 0 auto;
}

header {
    width: 100%;
    height: 120px;
    background-color: cornflowerblue;
}

.content {
    float: left;
    width: 62.5%;
    padding: 1.56%;
    height: 400px;
    background-color: burlywood;
}

.right-side {
    float: right;
    width: 31.25%;
    padding: 1.56%;
    height: 400px;
    background-color: aquamarine;
}

footer {
    clear: both;
    width: 100%;
    height: 120px;
    background-color: brown;
}&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1744124853576&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;div id=&quot;wrapper&quot;&amp;gt;
    &amp;lt;header&amp;gt;고정 그리드&amp;lt;/header&amp;gt;
    &amp;lt;section class=&quot;content&quot;&amp;gt;
        본문
    &amp;lt;/section&amp;gt;
    &amp;lt;aside class=&quot;right-side&quot;&amp;gt;
        오른쪽 사이드
    &amp;lt;/aside&amp;gt;
    &amp;lt;footer&amp;gt;
        footer
    &amp;lt;/footer&amp;gt;
&amp;lt;/div&amp;gt;&lt;/code&gt;&lt;/pre&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;h4 style=&quot;border-left: 6px solid #00a667; letter-spacing: -1px; padding: 0px 0px 0px 7px; margin: 5px 0px 7px 0px;&quot; data-ke-size=&quot;size15&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt; 가변 그리드 레이아웃에 따른 가변 글꼴 사용하기&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;화면이 가변적으로 표시될 때 글꼴은 어떻게 사용해야 하는지 알아야 한다. 픽셀크기는 PC 브라우저에서와 모바일에 표시되는 크기가 달라진다. 따라서 픽셀이 아닌 em 단위나 rem 단위를 사용해야한다.&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;h4 style=&quot;border-left: 6px solid #00a667; letter-spacing: -1px; padding: 0px 0px 0px 7px; margin: 5px 0px 7px 0px;&quot; data-ke-size=&quot;size15&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;&amp;nbsp;가변 그리드 레이아웃에 따른 가변 이미지 사용하기&lt;/b&gt;&lt;/span&gt;&lt;/h4&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;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;border-radius: 15px 15px 15px 0; border-bottom: 5px solid #00a667; padding: 13px; background: #ddf9ee; font-weight: bold;&quot;&gt;&lt;b&gt;가변 이미지 CSS를 이용하여 표시하기&lt;/b&gt; &lt;/span&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;이미지를 감싸고 있는 부모 요소만큼만 커지거나 작아지도록 max-width 속성 값을 100% 지정한다. 이 방법은 고해상도로 지정하면 PC에서나 모바일에서나 같은 파일 크기를 가지기 때문에 추천하는 방법은 아니다.&lt;/p&gt;
&lt;pre id=&quot;code_1744125165377&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;.content img {
    max-width: 100%;
    height: auto;
}&lt;/code&gt;&lt;/pre&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;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;border-radius: 15px 15px 15px 0; border-bottom: 5px solid #00a667; padding: 13px; background: #ddf9ee; font-weight: bold;&quot;&gt;&amp;lt;img&amp;gt; 태그와 srcset 속성으로 가변 이미지 표시하기&lt;/span&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;화면 너비 값이나 픽셀 밀도에 따라 고해상도의 이미지 파일을 지정할 수 있다.&lt;/p&gt;
&lt;pre id=&quot;code_1744125360032&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 픽셀 밀도가 2배인 화면(고해상도의 화면)일 경우 pencil-hd.jpg 이미지를 표시한다. 
&amp;lt;img scr=&quot;image/pencil.jpg&quot; srcset=&quot;image/pencil-hd.jpg 2x&quot;&amp;gt;&lt;/code&gt;&lt;/pre&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;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;border-radius: 15px 15px 15px 0; border-bottom: 5px solid #00a667; padding: 13px; background: #ddf9ee; font-weight: bold;&quot;&gt;&amp;lt;picture&amp;gt; 태그와 &amp;lt;source&amp;gt; 태그로 가변 이미지 표시하기&lt;/span&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;화면 해상도뿐만 아니라 화면 너비에 따라 다른 이미지 파일을 표시한다.&lt;/p&gt;
&lt;pre id=&quot;code_1744125488089&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;picture&amp;gt;
    &amp;lt;source srcset=&quot;image/ex-large.jpg&quot; media=&quot;(mid-width: 1024px)&quot;&amp;gt;
    &amp;lt;source srcset=&quot;image/ex-medium.jpg&quot; media=&quot;(mid-width: 760px)&quot;&amp;gt;
    &amp;lt;source srcset=&quot;image/ex-small.jpg&quot; media=&quot;(mid-width: 320px)&quot;&amp;gt;
    &amp;lt;img src=&quot;image/ex.jpg&quot; alt=&quot;fill with coffee&quot; style=&quot;width: 100%;&quot;&amp;gt;
&amp;lt;/picture&amp;gt;&lt;/code&gt;&lt;/pre&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;h4 style=&quot;border-left: 6px solid #00a667; letter-spacing: -1px; padding: 0px 0px 0px 7px; margin: 5px 0px 7px 0px;&quot; data-ke-size=&quot;size15&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;가변 그리드 레이아웃에 따른 가변 비디오 사용하기&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;가변 비디오는 CSS를 사용해 max-width 속성을 100%로 지정한다.&lt;/p&gt;
&lt;pre id=&quot;code_1744125758008&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;style&amp;gt;
    video { max-width: 100%; }
&amp;lt;/style&amp;gt;

&amp;lt;video autoplay loop src=&quot;assets/cars.mp4&quot;&amp;gt; &amp;lt;/video&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>웹/HTML + CSS</category>
      <author>초코초코초코</author>
      <guid isPermaLink="true">https://laustudy.tistory.com/454</guid>
      <comments>https://laustudy.tistory.com/454#entry454comment</comments>
      <pubDate>Wed, 9 Apr 2025 00:22:49 +0900</pubDate>
    </item>
    <item>
      <title>CSS 애니메이션</title>
      <link>https://laustudy.tistory.com/453</link>
      <description>&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;h3 style=&quot;padding: 0.4em 1em 0.4em 0.5em; background: #e9efed; margin: 0.5em 0em; color: #000000; border-left: #00a667 10px solid; font-weight: bold; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot; data-ke-size=&quot;size23&quot;&gt;CSS 애니메이션&lt;/h3&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;변형(transform) 이란 특정 요소의 크기나 형태 등 스타일이 바뀌는 것을 말한다. 2차원 변형은 수평이나 수직으로 웹 요소가 변형되는 것으로 크기나 각도만 지정하면 된다. 2차원 좌표를 사용한다. 3차원 변형은 x축과 y축에 원근감을 추가한다. z축은 앞뒤로 이동하고 보는 사람쪽으로 다가올수록 값이 더 커진다.&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;h4 style=&quot;border-left: 6px solid #00a667; letter-spacing: -1px; padding: 0px 0px 0px 7px; margin: 5px 0px 7px 0px;&quot; data-ke-size=&quot;size15&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;&amp;nbsp;translate 함수&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;지정한 방향으로 이동할 거리를 지정하면 해당 요소를 이동시킨다.&lt;/p&gt;
&lt;pre id=&quot;code_1743754435080&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;transform:translate(tx, ty) : x축 방향으로 tx만큼, y축 방향으로 ty만큼 이동한다. 
transform:translate3d(tx, ty, tz) : x축 방향으로 tx만큼, y 축 방향으로 ty만큼, z축 방향으로 tz만큼 이동
transform:translateX(tx) : x축 방향으로 tx만큼 이동
transform:translateY(ty) : y축 방향으로 ty만큼 이동
transform:translateZ(tz) : z축 방향으로 tz만큼 이동&lt;/code&gt;&lt;/pre&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;
&lt;pre id=&quot;code_1743754675877&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;h4:hover { transform: translateX(20px); }
p:hover { transform: translate(10px, 20px); }&lt;/code&gt;&lt;/pre&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;h4 style=&quot;border-left: 6px solid #00a667; letter-spacing: -1px; padding: 0px 0px 0px 7px; margin: 5px 0px 7px 0px;&quot; data-ke-size=&quot;size15&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;&amp;nbsp;Scale 함수&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;지정한 크기만큼 요소를 확대하거나 축소한다.&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1743754783835&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;transform: scale(tx, ty) : x축 방향으로 tx만큼, y축 방향으로 ty만큼 확대한다. 
transform: scale3d(tx, ty, tz) : x축 방향으로 tx만큼, y 축 방향으로 ty만큼, z축 방향으로 tz만큼 확대
transform: scaleX(tx) : x축 방향으로 tx만큼 확대
transform: scaleY(ty) : y축 방향으로 ty만큼 확대
transform: scaleZ(tz) : z축 방향으로 tz만큼 확대&lt;/code&gt;&lt;/pre&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;
&lt;pre id=&quot;code_1743755248870&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;.scale1 img:hover {
    transform: scaleX(1.2);
}

.scale2 img:hover {
    transform: scale(0.7);
}&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1743755262485&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;div class=&quot;scale1&quot;&amp;gt;
    &amp;lt;img src=&quot;img/cake.jpg&quot; alt=&quot;케이크&quot; width=&quot;300px&quot;&amp;gt;
&amp;lt;/div&amp;gt;

&amp;lt;div class=&quot;scale2&quot;&amp;gt;
    &amp;lt;img src=&quot;img/background.jpg&quot; alt=&quot;배경&quot; width=&quot;300px&quot;&amp;gt;
&amp;lt;/div&amp;gt;&lt;/code&gt;&lt;/pre&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;h4 style=&quot;border-left: 6px solid #00a667; letter-spacing: -1px; padding: 0px 0px 0px 7px; margin: 5px 0px 7px 0px;&quot; data-ke-size=&quot;size15&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;&amp;nbsp;rotate 함수&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;각도만큼 웹 요소를 시계 방향이나 시계 반대 방향으로 회전한다. 일반 각도(degree)나 radian 값을 사용한다.&lt;/p&gt;
&lt;pre id=&quot;code_1743755344395&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;transform: rotate(각도)
transform: rotate3d(rx, ry, 각도)
transdorm: rotateX(각도)
transdorm: rotateY(각도)
transdorm: rotateZ(각도)&lt;/code&gt;&lt;/pre&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;p data-ke-size=&quot;size16&quot;&gt;예시)&lt;/p&gt;
&lt;pre id=&quot;code_1743755581201&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;.rotate1 img:hover {
    transform: rotate(-40deg);
}

.rotate2 img:hover {
    transform: rotate(20deg);
}

.rotate3 img:hover {
    transform: rotate3d(2.5, 1.2, -1.5, 45deg);
}&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1743755600303&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;div class=&quot;rotate1&quot;&amp;gt;
    &amp;lt;img src=&quot;img/cake.jpg&quot; alt=&quot;케이크&quot; width=&quot;300px&quot;&amp;gt;
&amp;lt;/div&amp;gt;

&amp;lt;div class=&quot;rotate2&quot;&amp;gt;
    &amp;lt;img src=&quot;img/background.jpg&quot; alt=&quot;배경&quot; width=&quot;300px&quot;&amp;gt;
&amp;lt;/div&amp;gt;

&amp;lt;div class=&quot;rotate3&quot;&amp;gt;
    &amp;lt;img src=&quot;img/cake.jpg&quot; alt=&quot;배경&quot; width=&quot;300px&quot;&amp;gt;
&amp;lt;/div&amp;gt;&lt;/code&gt;&lt;/pre&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;h4 style=&quot;border-left: 6px solid #00a667; letter-spacing: -1px; padding: 0px 0px 0px 7px; margin: 5px 0px 7px 0px;&quot; data-ke-size=&quot;size15&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;&amp;nbsp;skew 함수&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;요소를 지정한 각도만큼 비틀어 왜곡시킨다.&lt;/p&gt;
&lt;pre id=&quot;code_1743755711337&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;transform: skew(ax, ay) : 첫번째 각도는 x축을 따라 당기고 두번째 각도는 y축을 따라 당기는 각도이다.
transform: skewX(ax) : x축을 따라 비튼다.
transform: skewY(ay) : y축을 따라 비튼다.&lt;/code&gt;&lt;/pre&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;p data-ke-size=&quot;size16&quot;&gt;예시)&lt;/p&gt;
&lt;pre id=&quot;code_1743755793350&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;style&amp;gt;
    .skew1 img:hover {
        transform: skew(30deg);
    }
&amp;lt;/style&amp;gt;

&amp;lt;div class=&quot;skew1&quot;&amp;gt;
    &amp;lt;img src=&quot;img/cake.jpg&quot; alt=&quot;케이크&quot; width=&quot;300px&quot;&amp;gt;
&amp;lt;/div&amp;gt;&lt;/code&gt;&lt;/pre&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;h4 style=&quot;border-left: 6px solid #00a667; letter-spacing: -1px; padding: 0px 0px 0px 7px; margin: 5px 0px 7px 0px;&quot; data-ke-size=&quot;size15&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;&amp;nbsp;transform-origin 속성&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;특정 지점을 변형의 기준으로 설정한다.&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1743755970765&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;transform-origin: &amp;lt;x축&amp;gt; &amp;lt;y축&amp;gt; &amp;lt;z축&amp;gt; | initial | inherit;

/*
&amp;lt;x축&amp;gt; : 원점 기준의 x좌표값으로 길이 값이나 백분율, left, center, right 중 하나를 사용할 수 있다.
&amp;lt;y축&amp;gt; : 원점 기준의 y좌표값으로 길이 값이나 백분육, top, center, bottom 중에서 선택할 수 있다.
&amp;lt;z축&amp;gt; : 원점 기준의 z좌표값으로 길이 값만 사용할 수 있다.
*/&lt;/code&gt;&lt;/pre&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;
&lt;pre id=&quot;code_1743756146520&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;.origin-x img:hover {
    transform-origin: left top;
    transform: rotateZ(10deg);
}

.origin-y img:hover {
    transform-origin: right top;
    transform: rotateZ(10deg);
}&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1743756158256&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;div class=&quot;origin-y&quot;&amp;gt;
    &amp;lt;img src=&quot;img/cake.jpg&quot; alt=&quot;케이크&quot; width=&quot;300px&quot;&amp;gt;
&amp;lt;/div&amp;gt;

&amp;lt;div class=&quot;origin-x&quot;&amp;gt;
    &amp;lt;img src=&quot;img/cake.jpg&quot; alt=&quot;배경&quot; width=&quot;300px&quot;&amp;gt;
&amp;lt;/div&amp;gt;&lt;/code&gt;&lt;/pre&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;h4 style=&quot;border-left: 6px solid #00a667; letter-spacing: -1px; padding: 0px 0px 0px 7px; margin: 5px 0px 7px 0px;&quot; data-ke-size=&quot;size15&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;&amp;nbsp;perspective 속성&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;perspective 속성은 원근감을 갖게 하는 속성이다. 속성은 0보다 크며 값이 클수록 사용자부터 멀어진다.&lt;/p&gt;
&lt;pre id=&quot;code_1743757291725&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;perspective: &amp;lt;크기&amp;gt; | none;

/*
&amp;lt;크기&amp;gt; : 원래 위치에서 사용자가 있는 방향으로 얼마나 이동하는지를 픽셀 크기로 지정한다.
none : perspective 를 지정하지 않는다. 기본값이다.
*/&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;border-left: 6px solid #00a667; letter-spacing: -1px; padding: 0px 0px 0px 7px; margin: 5px 0px 7px 0px;&quot; data-ke-size=&quot;size15&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;&amp;nbsp;perspective-origin 속성&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;입체적으로 표현할 요소의 아랫부분(bottom) 위치를 지정한다. 좀 더 높은 곳에서 원근을 조절하는 듯한 느낌을 갖게 한다.&lt;/p&gt;
&lt;pre id=&quot;code_1743757552717&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;perspective-origin: &amp;lt;x축값&amp;gt; | &amp;lt;y축값&amp;gt;;

/*
&amp;lt;x축값&amp;gt; : 웹 요소가 x 축에서 어디에 위치하는지를 지정한다. 사용할 수 있는 값은 길이 값이나 백분율,
left, right, center 이다. 기본값은 50%.
&amp;lt;y축값&amp;gt; : 웹 요소가 y 축에서 어디에 위치하는지를 지정한다. 길이 값이나 백분율, 
top, bottom, center 값ㅇ르 사용할 수 있다. 기본값은 50% 이다.
*/&lt;/code&gt;&lt;/pre&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;h4 style=&quot;border-left: 6px solid #00a667; letter-spacing: -1px; padding: 0px 0px 0px 7px; margin: 5px 0px 7px 0px;&quot; data-ke-size=&quot;size15&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;&amp;nbsp;transform-style 속성&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;부모 요소에 적용한 3D 변형을 하위 요소에도 적용한다.&lt;/p&gt;
&lt;pre id=&quot;code_1743757634941&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;transform-style: flat | preserve-3d;

/* 
flat : 하위 요소를 평면으로 처리한다.
preserve-3d : 하위 요소들에 3D 효과를 적용한다.
*/&lt;/code&gt;&lt;/pre&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;h4 style=&quot;border-left: 6px solid #00a667; letter-spacing: -1px; padding: 0px 0px 0px 7px; margin: 5px 0px 7px 0px;&quot; data-ke-size=&quot;size15&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;&amp;nbsp;backface-visibility 속성&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;요소의 뒷면 즉 반대쪽 면을 표시할 것인지 결정한다. 요소가 회전하거는 등 애니메이션 처리될 때에 뒷면까지 보여지게 될 경우 뒷면을 표시할 것인지 표시하지 않을 것인지 결정할 수 있다. 기본값은 뒷면을&amp;nbsp; 표시한다.(visible)&lt;/p&gt;
&lt;pre id=&quot;code_1743757754361&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;backface-visibility: visible | hidden&lt;/code&gt;&lt;/pre&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;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;border-radius: 15px 15px 15px 0; border-bottom: 5px solid #00a667; padding: 13px; background: #ddf9ee; font-weight: bold;&quot;&gt;두 개 이상의 변형을 동시에 사용할 경우&lt;/span&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;transform 속성에 변형 함수를 나열해서 사용하면 두 개 이상의 변형을 동시에 사용할 수 있다.&lt;/p&gt;
&lt;pre id=&quot;code_1743757863474&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;p:hover {
    transform: scale(2) rotateX(100deg);
}&lt;/code&gt;&lt;/pre&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;h3 style=&quot;padding: 0.4em 1em 0.4em 0.5em; background: #e9efed; margin: 0.5em 0em; color: #000000; border-left: #00a667 10px solid; font-weight: bold; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot; data-ke-size=&quot;size23&quot;&gt;트랜지션&lt;/h3&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;트랜지션은 어떤 특정 조건을 주었을 때 일정한 시간동안 웹 요소의 스타일이 자연스럽게 조금씩 바뀌는 것을 말한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;border-left: 6px solid #00a667; letter-spacing: -1px; padding: 0px 0px 0px 7px; margin: 5px 0px 7px 0px;&quot; data-ke-size=&quot;size15&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;&amp;nbsp;transition-property 속성&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;트랜지션을 적용할 속성을 선택한다. 이 속성을 지정하지 않으면 모든 속성이 트랜지션 대상이 된다. 글자 색상, 배경 등 지정한 속성만 트랜지션 대상이 된다.&lt;/p&gt;
&lt;pre id=&quot;code_1743758142294&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;transition-property: all | none | &amp;lt;속성이름&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;예시)&lt;/p&gt;
&lt;pre id=&quot;code_1743758241902&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;transition-property: all; /*모든 요소의 모든 속성에 트랜지션을 적용한다.*/
transition-property: color; /*헤당 요소의 글자 색상에 트랜지션을 적용한다. */
transition-property: width, height; /*해당 요소의 너비와 높이에 트랜지션을 적용한다.*/&lt;/code&gt;&lt;/pre&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;h4 style=&quot;border-left: 6px solid #00a667; letter-spacing: -1px; padding: 0px 0px 0px 7px; margin: 5px 0px 7px 0px;&quot; data-ke-size=&quot;size15&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;&amp;nbsp;transition-duration 속성&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;트랜지션 진행 시간을 지정한다. 시간 단위는 초 도는 밀리초이다. 트랜지션이 여러 개라면 쉼표로 구분해 진행 시간을 지정할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;예시)&amp;nbsp; width 속성과 height 속성이 각각 3초, 1초동안 애니메이션을 지속한다.&lt;/p&gt;
&lt;pre id=&quot;code_1744029358498&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;.transition img {
    width: 100px;
    height: 100px;
    transition-duration: 3s, 1s;
    transition-property: width, height;
}

.transition img:hover {
    width: 150px;
    height: 150px;
}&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1744029419140&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;div class=&quot;transition&quot;&amp;gt;
    &amp;lt;img src=&quot;img/cake.jpg&quot; alt=&quot;케이크&quot; width=&quot;300px&quot;&amp;gt;
&amp;lt;/div&amp;gt;&lt;/code&gt;&lt;/pre&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;h4 style=&quot;border-left: 6px solid #00a667; letter-spacing: -1px; padding: 0px 0px 0px 7px; margin: 5px 0px 7px 0px;&quot; data-ke-size=&quot;size15&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;&amp;nbsp;transition-timing-function 속성&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;트랜시션의 시작과 중간, 끝에서의 속도를 지정한다.&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 123px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style14&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 20.3488%; height: 21px;&quot;&gt;속성 값&lt;/td&gt;
&lt;td style=&quot;width: 79.6512%; height: 21px;&quot;&gt;설명&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 20.3488%; height: 17px;&quot;&gt;linear&lt;/td&gt;
&lt;td style=&quot;width: 79.6512%; height: 17px;&quot;&gt;시작부터 끝까지 똑같은 속도로 트랜지션을 진행한다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 20.3488%; height: 17px;&quot;&gt;ease&lt;/td&gt;
&lt;td style=&quot;width: 79.6512%; height: 17px;&quot;&gt;처음에는 천천히 시작하고 점점 빨라지다가 마지막에는 천천히 끝낸다. 기본 값이다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 20.3488%; height: 17px;&quot;&gt;ease-in&lt;/td&gt;
&lt;td style=&quot;width: 79.6512%; height: 17px;&quot;&gt;시작을 느리게 한다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 20.3488%; height: 17px;&quot;&gt;ease-out&lt;/td&gt;
&lt;td style=&quot;width: 79.6512%; height: 17px;&quot;&gt;느리게 끝낸다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 20.3488%; height: 17px;&quot;&gt;ease-in-out&lt;/td&gt;
&lt;td style=&quot;width: 79.6512%; height: 17px;&quot;&gt;느리게 시작하고 느리게 끝낸다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 20.3488%; height: 17px;&quot;&gt;cubic-bezier(n,n,n,n)&lt;/td&gt;
&lt;td style=&quot;width: 79.6512%; height: 17px;&quot;&gt;배지 함수를 직접 정의해 사용한다.&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;
&lt;p data-ke-size=&quot;size16&quot;&gt;예시)&lt;/p&gt;
&lt;pre id=&quot;code_1744029635010&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;.transition {
    transition-timing-function: linear;
}&lt;/code&gt;&lt;/pre&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;h4 style=&quot;border-left: 6px solid #00a667; letter-spacing: -1px; padding: 0px 0px 0px 7px; margin: 5px 0px 7px 0px;&quot; data-ke-size=&quot;size15&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;&amp;nbsp;transition-dely 속성&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;트랜지션이 언제부터 시작될지 지연 시간을 지정한다. 시간 단위는 초 또는 밀리초이며 기본값은 0이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;예시)&lt;/p&gt;
&lt;pre id=&quot;code_1744029901846&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;.transition img {
    width: 100px;
    height: 100px;
    transition-duration: 3s, 1s;
    transition-delay: 1s;
    transition-property: width, height;
}

.transition img:hover {
    width: 150px;
    height: 150px;
}&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1744029918851&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;div class=&quot;transition&quot;&amp;gt;
    &amp;lt;img src=&quot;img/cake.jpg&quot; alt=&quot;케이크&quot; width=&quot;300px&quot;&amp;gt;
&amp;lt;/div&amp;gt;&lt;/code&gt;&lt;/pre&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;h3 style=&quot;padding: 0.4em 1em 0.4em 0.5em; background: #e9efed; margin: 0.5em 0em; color: #000000; border-left: #00a667 10px solid; font-weight: bold; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot; data-ke-size=&quot;size23&quot;&gt;CSS와 애니메이션&lt;/h3&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;웹 요소에 애니메이션을 추가할 수 있다. 애니메이션을 시작해 끝내는 동안 원하는 곳 어디서든 스타일을 바꾸며 애니메이션을 정의할수 있다. 인터넷 익스플로러 10 이상과 최신 모던 브라우저에서 지원하며 이전 버전을 고려하려면 접두사를 붙여야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;+ 키 프레임(keyframe) : 애니메이션 중간에 스타일이 바뀌는 지점&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;h4 style=&quot;border-left: 6px solid #00a667; letter-spacing: -1px; padding: 0px 0px 0px 7px; margin: 5px 0px 7px 0px;&quot; data-ke-size=&quot;size15&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;@keyframes 속성&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;애니메이션의 시작과 끝을 비롯해 상태가 바뀌는 지점을 설정한다. '이름'으로 애니메이션을 구별한다. 시작 위치는 0%, 끝 위치를 100%로 놓고 위치를 지정한다. 시작과 끝 위치만 사용한다면 from, to 키워드를 사용 가능하다. @-webkit-keyframes 혹은 @-moz-keyframes 처럼 브라우저 접두사를 붙여야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;예시)&lt;/p&gt;
&lt;pre id=&quot;code_1744030443206&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;.transition img {
    width: 100px;
    height: 100px;

    animation-name: change-ex;
    animation-duration: 3s;
}

@keyframes change-ex {
    from {
        width: 100px;
        height: 100px;
    }
    to {
        width: 200px;
        height: 150px;
    }
}&lt;/code&gt;&lt;/pre&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;h4 style=&quot;border-left: 6px solid #00a667; letter-spacing: -1px; padding: 0px 0px 0px 7px; margin: 5px 0px 7px 0px;&quot; data-ke-size=&quot;size15&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;&amp;nbsp;animation 관련 속성&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;① animation-name 속성&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;@keyframes 속성에서 만든 애니메이션 이름을 사용한다.&amp;nbsp;&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;b&gt;② animation-duration 속성&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;애니메이션 실행 시간을 설정한다. 기본값은 0이다. 사용 가능한 값은 초(s) 혹은 밀리초(ms)이다.&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;b&gt; ③ animation-direction 속성&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;애니메이션이 끝난 후 원래 위치(normal)로 돌아가거나 반대 방향(alternate)으로 애니메이션이 실행하도록 지정한다.&lt;/p&gt;
&lt;pre id=&quot;code_1744031024692&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;animation-direction: normal | alternate&lt;/code&gt;&lt;/pre&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;b&gt;③ animation-iteration-count 속성&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;애니메이션 반복 횟수를 지정한다. 기본 숫자를 지정하거나 infinite 로 속성값을 지정하면 무한 반복한다.&lt;/p&gt;
&lt;pre id=&quot;code_1744030891301&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;animation-iteration-count: &amp;lt;숫자&amp;gt; | infinite&lt;/code&gt;&lt;/pre&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;b&gt;④ animation-timing-function 속성&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;애니메이션 속도 곡선을 지정한다.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 123px;&quot; border=&quot;1&quot; data-ke-style=&quot;style14&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 20.3488%;height: 21px;&quot;&gt;속성 값&lt;/td&gt;
&lt;td style=&quot;width: 79.6512%;height: 21px;&quot;&gt;설명&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 20.3488%;height: 17px;&quot;&gt;linear&lt;/td&gt;
&lt;td style=&quot;width: 79.6512%;height: 17px;&quot;&gt;시작부터 끝까지 똑같은 속도로 트랜지션을 진행한다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 20.3488%;height: 17px;&quot;&gt;ease&lt;/td&gt;
&lt;td style=&quot;width: 79.6512%;height: 17px;&quot;&gt;처음에는 천천히 시작하고 점점 빨라지다가 마지막에는 천천히 끝낸다. 기본 값이다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 20.3488%;height: 17px;&quot;&gt;ease-in&lt;/td&gt;
&lt;td style=&quot;width: 79.6512%;height: 17px;&quot;&gt;시작을 느리게 한다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 20.3488%;height: 17px;&quot;&gt;ease-out&lt;/td&gt;
&lt;td style=&quot;width: 79.6512%;height: 17px;&quot;&gt;느리게 끝낸다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 20.3488%;height: 17px;&quot;&gt;ease-in-out&lt;/td&gt;
&lt;td style=&quot;width: 79.6512%;height: 17px;&quot;&gt;느리게 시작하고 느리게 끝낸다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 20.3488%;height: 17px;&quot;&gt;cubic-bezier(n,n,n,n)&lt;/td&gt;
&lt;td style=&quot;width: 79.6512%;height: 17px;&quot;&gt;배지 함수를 직접 정의해 사용한다.&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;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;border-radius: 15px 15px 15px 0; border-bottom: 5px solid #00a667; padding: 13px; background: #ddf9ee; font-weight: bold;&quot;&gt;animation 속성 한번에 표현하기&lt;/span&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;여러개의 애니메이션 속성을 하나의 속성으로 줄여서 사용할 수 있다. 지정하지 않은 속성은 기본값을 사용하지만 animation-duration 속성 값은 반드시 지정해야 한다.&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;예시) animation 속성을 사용하지 않을 경우&lt;/p&gt;
&lt;pre id=&quot;code_1744032582529&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;.transition img {
    width: 200px;
    animation: rotate 1.5s infinite, background-ex 1.5s infinite alternate;
}

@keyframes background-ex {
    form { background: red; }
    50% { background: green; }
    to { background: burlywood; }
}

@keyframes rotate {
    from { transform: perspective(120px) rotateX(0deg) rotateY(0deg); }
    50% { transform: perspective(120px) rotateX(-180deg) rotateY(0deg); }
    to { transform: perspective(120px) rotateX(-180deg) rotateY(-180deg); }
}&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1744032614931&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;div class=&quot;transition&quot;&amp;gt;
    &amp;lt;img src=&quot;img/cake.jpg&quot; alt=&quot;케이크&quot; width=&quot;300px&quot;&amp;gt;
&amp;lt;/div&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>웹/HTML + CSS</category>
      <author>초코초코초코</author>
      <guid isPermaLink="true">https://laustudy.tistory.com/453</guid>
      <comments>https://laustudy.tistory.com/453#entry453comment</comments>
      <pubDate>Mon, 7 Apr 2025 22:30:28 +0900</pubDate>
    </item>
    <item>
      <title>CSS3 선택자</title>
      <link>https://laustudy.tistory.com/452</link>
      <description>&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;h3 style=&quot;padding: 0.4em 1em 0.4em 0.5em; background: #e9efed; margin: 0.5em 0em; color: #000000; border-left: #00a667 10px solid; font-weight: bold; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot; data-ke-size=&quot;size23&quot;&gt;CSS3 선택자&lt;/h3&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;h4 style=&quot;border-left: 6px solid #00a667; letter-spacing: -1px; padding: 0px 0px 0px 7px; margin: 5px 0px 7px 0px;&quot; data-ke-size=&quot;size15&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;&amp;nbsp;연결 선택자&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;선택자와 선택자를 연결해 적용 대상을 한정하는 선택자이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;① 하위 선택자&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;상위 요소인 section 요소 안에 있는 모든 p 요소의 글자 색을 파란색으로 바꾼다는 의미가 된다.&lt;/p&gt;
&lt;pre id=&quot;code_1743666397650&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;section p {color: blue;}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;② 자식 선택자&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;자식 요소에 스타일을 적용하는 선택자이다. 두 요소 사이에 '&amp;gt;'를 표시해 부모 요소와 자식 요소를 구분한다.&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1743666742870&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#container &amp;gt; p { color: blue; }&lt;/code&gt;&lt;/pre&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_1743666971455&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;div id=&quot;container&quot;&amp;gt;
    &amp;lt;p&amp;gt;제목 색상은 파란색&amp;lt;/p&amp;gt;
    &amp;lt;div&amp;gt;
        &amp;lt;p&amp;gt;내용은 기본 색상&amp;lt;/p&amp;gt;
    &amp;lt;/div&amp;gt;
    &amp;lt;p&amp;gt;끝 내용 색상&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자식 선택자의 경우) container 의 하위 요소인 p 요소에만 스타일이 적용된다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;212&quot; data-origin-height=&quot;128&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ebqzAq/btsM5Vyhe9g/45nyY9UpiqPvd9zDoBGaVk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ebqzAq/btsM5Vyhe9g/45nyY9UpiqPvd9zDoBGaVk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ebqzAq/btsM5Vyhe9g/45nyY9UpiqPvd9zDoBGaVk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FebqzAq%2FbtsM5Vyhe9g%2F45nyY9UpiqPvd9zDoBGaVk%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;212&quot; height=&quot;128&quot; data-origin-width=&quot;212&quot; data-origin-height=&quot;128&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1743667079112&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#container &amp;gt; p { color: blue; }&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하위 선택자의 경우) container 의 모든 p 요소에 스타일이 적용된다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;198&quot; data-origin-height=&quot;127&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/NMppd/btsM6dR4e2O/eBCk5syncvOnjhx6R6FDHk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/NMppd/btsM6dR4e2O/eBCk5syncvOnjhx6R6FDHk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/NMppd/btsM6dR4e2O/eBCk5syncvOnjhx6R6FDHk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FNMppd%2FbtsM6dR4e2O%2FeBCk5syncvOnjhx6R6FDHk%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;198&quot; height=&quot;127&quot; data-origin-width=&quot;198&quot; data-origin-height=&quot;127&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1743667235937&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#container p { color: blue; }&lt;/code&gt;&lt;/pre&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;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;③ 인접 형제 선택자&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;같은 부모를 가진 형제 요소 중 첫번째 동생 요소에만 스타일이 적용된다. (선착순 하나) 다음 예시로 설명하자면 p 요소와 h1 은 같은 레벨 요소이면서 p 요소 이후 맨 먼저 오는 h1 요소에 스타일을 적용한다.&lt;/p&gt;
&lt;pre id=&quot;code_1743667724165&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;p + h1 { color: blue; }&lt;/code&gt;&lt;/pre&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;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;306&quot; data-origin-height=&quot;181&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rbdZm/btsM5SO6mMM/NDsCjQv2iLHEdkiOG9jJo1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rbdZm/btsM5SO6mMM/NDsCjQv2iLHEdkiOG9jJo1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rbdZm/btsM5SO6mMM/NDsCjQv2iLHEdkiOG9jJo1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrbdZm%2FbtsM5SO6mMM%2FNDsCjQv2iLHEdkiOG9jJo1%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;306&quot; height=&quot;181&quot; data-origin-width=&quot;306&quot; data-origin-height=&quot;181&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1743667991114&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;div id=&quot;container&quot;&amp;gt;
    &amp;lt;p&amp;gt;제목 색상은 파란색&amp;lt;/p&amp;gt;
    &amp;lt;h1&amp;gt;끝 내용의 색상&amp;lt;/h1&amp;gt;
    &amp;lt;h1&amp;gt;끝 내용의 색상2&amp;lt;/h1&amp;gt;
&amp;lt;/div&amp;gt;&lt;/code&gt;&lt;/pre&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;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;④ 형제 선택자&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;형제 요소들의 모든 요소들에 스타일을 적용한다. 인접 형제 선택자와 다른 점은 모든 형제 요소에 다 적용된다는 것이다.&lt;/p&gt;
&lt;pre id=&quot;code_1743668246759&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;p ~ h1 { color: blue; }&lt;/code&gt;&lt;/pre&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;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;292&quot; data-origin-height=&quot;175&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cjRtt4/btsM6IrG9Aq/lMK3JJmEaHEWuaT3pW1gF0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cjRtt4/btsM6IrG9Aq/lMK3JJmEaHEWuaT3pW1gF0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cjRtt4/btsM6IrG9Aq/lMK3JJmEaHEWuaT3pW1gF0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcjRtt4%2FbtsM6IrG9Aq%2FlMK3JJmEaHEWuaT3pW1gF0%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;292&quot; height=&quot;175&quot; data-origin-width=&quot;292&quot; data-origin-height=&quot;175&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1743668257635&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;div id=&quot;container&quot;&amp;gt;
    &amp;lt;p&amp;gt;제목 색상은 파란색&amp;lt;/p&amp;gt;
    &amp;lt;h1&amp;gt;끝 내용의 색상&amp;lt;/h1&amp;gt;
    &amp;lt;h1&amp;gt;끝 내용의 색상2&amp;lt;/h1&amp;gt;
&amp;lt;/div&amp;gt;&lt;/code&gt;&lt;/pre&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;h4 style=&quot;border-left: 6px solid #00a667; letter-spacing: -1px; padding: 0px 0px 0px 7px; margin: 5px 0px 7px 0px;&quot; data-ke-size=&quot;size15&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;&amp;nbsp;속성 선택자&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;지정한 속성을 가진 요소를 찾아 스타일을 적용된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;① [속성] 선택자&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;지정한 속성을 가진 요소를 찾아 스타일을 적용한다.&lt;/p&gt;
&lt;pre id=&quot;code_1743671141798&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;a[target] {
    background-color: aquamarine;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;예시)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;117&quot; data-origin-height=&quot;138&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/HRr91/btsM7WCPGNT/pcYKyo5Cj5dzQNDXmobDVK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/HRr91/btsM7WCPGNT/pcYKyo5Cj5dzQNDXmobDVK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/HRr91/btsM7WCPGNT/pcYKyo5Cj5dzQNDXmobDVK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHRr91%2FbtsM7WCPGNT%2FpcYKyo5Cj5dzQNDXmobDVK%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;117&quot; height=&quot;138&quot; data-origin-width=&quot;117&quot; data-origin-height=&quot;138&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1743671193365&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;ul&amp;gt;
    &amp;lt;li&amp;gt;&amp;lt;a href=&quot;http://www.naver.com&quot; target=&quot;_blank&quot;&amp;gt;메뉴1&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
    &amp;lt;li&amp;gt;&amp;lt;a href=&quot;http://www.naver.com&quot; target=&quot;_top&quot;&amp;gt;메뉴2&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
    &amp;lt;li&amp;gt;&amp;lt;a href=&quot;http://www.naver.com&quot;&amp;gt;메뉴3&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;② [속성 = 값] 선택자&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;주어진 속성과 속성 값이 일치하는 요소를 찾아 스타일을 적용한다.&lt;/p&gt;
&lt;pre id=&quot;code_1743671263367&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;a[target=&quot;_blank&quot;] {
    background-color: aquamarine;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;예시)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;120&quot; data-origin-height=&quot;128&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tx28u/btsM6WJ5wE0/4pgKOnoBuukHz2F176BSH0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tx28u/btsM6WJ5wE0/4pgKOnoBuukHz2F176BSH0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tx28u/btsM6WJ5wE0/4pgKOnoBuukHz2F176BSH0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Ftx28u%2FbtsM6WJ5wE0%2F4pgKOnoBuukHz2F176BSH0%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;120&quot; height=&quot;128&quot; data-origin-width=&quot;120&quot; data-origin-height=&quot;128&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1743671290349&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;ul&amp;gt;
    &amp;lt;li&amp;gt;&amp;lt;a href=&quot;http://www.naver.com&quot; target=&quot;_blank&quot;&amp;gt;메뉴1&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
    &amp;lt;li&amp;gt;&amp;lt;a href=&quot;http://www.naver.com&quot; target=&quot;_top&quot;&amp;gt;메뉴2&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
    &amp;lt;li&amp;gt;&amp;lt;a href=&quot;http://www.naver.com&quot;&amp;gt;메뉴3&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;③&amp;nbsp;[속성 ~= 값] 선택자&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;여러 속성 값 중에 해당 값이 포함되어 있는 요소를 찾아 스타일이 적용된다.&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1743671604956&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[class ~= &quot;button&quot;] {
    background-color: aquamarine;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예시) class 속성 중에 button 이라는 단어가 있는 요소 모두 적용됨&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;118&quot; data-origin-height=&quot;135&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/yM1xa/btsM8kXvU9B/L3MvL2HDRZD7DqdgQ2W6ok/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/yM1xa/btsM8kXvU9B/L3MvL2HDRZD7DqdgQ2W6ok/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yM1xa/btsM8kXvU9B/L3MvL2HDRZD7DqdgQ2W6ok/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FyM1xa%2FbtsM8kXvU9B%2FL3MvL2HDRZD7DqdgQ2W6ok%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;118&quot; height=&quot;135&quot; data-origin-width=&quot;118&quot; data-origin-height=&quot;135&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1743671641226&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;ul&amp;gt;
    &amp;lt;li&amp;gt;&amp;lt;a href=&quot;http://www.naver.com&quot; target=&quot;_blank&quot;&amp;gt;메뉴1&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
    &amp;lt;li&amp;gt;&amp;lt;a href=&quot;http://www.naver.com&quot; class=&quot;button&quot;&amp;gt;메뉴2&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
    &amp;lt;li&amp;gt;&amp;lt;a href=&quot;http://www.naver.com&quot; class=&quot;button flat&quot;&amp;gt;메뉴3&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;&lt;/code&gt;&lt;/pre&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;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;④&amp;nbsp;[속성 |= 값] 선택자&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특정 값이 포함된 속성을 가진 요소를 찾아 스타일이 적용된다. 하이픈으로 연결해 한 단어 값을 이루는 요소에도 모두 적용된다.&lt;/p&gt;
&lt;pre id=&quot;code_1743672070788&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[class |= &quot;button&quot;] {
    background-color: aquamarine;
}&lt;/code&gt;&lt;/pre&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;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;102&quot; data-origin-height=&quot;135&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eiW9eZ/btsM6vGkLdj/xJTQq607G92IXjt839OzX0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eiW9eZ/btsM6vGkLdj/xJTQq607G92IXjt839OzX0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eiW9eZ/btsM6vGkLdj/xJTQq607G92IXjt839OzX0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeiW9eZ%2FbtsM6vGkLdj%2FxJTQq607G92IXjt839OzX0%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;102&quot; height=&quot;135&quot; data-origin-width=&quot;102&quot; data-origin-height=&quot;135&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1743672002350&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;ul&amp;gt;
    &amp;lt;li&amp;gt;&amp;lt;a href=&quot;http://www.naver.com&quot; class=&quot;button-flat&quot;&amp;gt;메뉴1&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
    &amp;lt;li&amp;gt;&amp;lt;a href=&quot;http://www.naver.com&quot; class=&quot;buttons&quot;&amp;gt;메뉴2&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
    &amp;lt;li&amp;gt;&amp;lt;a href=&quot;http://www.naver.com&quot; class=&quot;button flat&quot;&amp;gt;메뉴3&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;&lt;/code&gt;&lt;/pre&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;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;⑤ [속성 ^= 값] 선택자&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특정 값으로 시작하는 속성을 가진 요소를 찾아 스타일을 적용한다.&lt;/p&gt;
&lt;pre id=&quot;code_1743672351757&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;a[title ^= &quot;me&quot;] {
    background-color: aquamarine;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예시) title 속성 중 me 로 시작하는 요소를 찾아 스타일이 적용된다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;121&quot; data-origin-height=&quot;135&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/sXlPx/btsM6JjVgxy/AaKQJLTANOHxVopE4anat0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/sXlPx/btsM6JjVgxy/AaKQJLTANOHxVopE4anat0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/sXlPx/btsM6JjVgxy/AaKQJLTANOHxVopE4anat0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsXlPx%2FbtsM6JjVgxy%2FAaKQJLTANOHxVopE4anat0%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;121&quot; height=&quot;135&quot; data-origin-width=&quot;121&quot; data-origin-height=&quot;135&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1743672366265&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;ul&amp;gt;
    &amp;lt;li&amp;gt;&amp;lt;a href=&quot;http://www.naver.com&quot; title=&quot;menu1&quot;&amp;gt;메뉴1&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
    &amp;lt;li&amp;gt;&amp;lt;a href=&quot;http://www.naver.com&quot; title=&quot;hidden-menu&quot;&amp;gt;메뉴2&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
    &amp;lt;li&amp;gt;&amp;lt;a href=&quot;http://www.naver.com&quot; title=&quot;menu3&quot;&amp;gt;메뉴3&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;&lt;/code&gt;&lt;/pre&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;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;⑥ [속성 $= 값] 선택자&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특정 값으로 끝나는 속성을 가진 요소를 찾아 스타일을 적용한다.&lt;/p&gt;
&lt;pre id=&quot;code_1743672442879&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;a[href $= &quot;xls&quot;] {
    background-color: aquamarine;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예시) herf 속성 중 xls 단어를 가진 요소만 스타일이 적용된다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;125&quot; data-origin-height=&quot;131&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bKeGXW/btsM69I0iLO/u3ysXJPf8iY0t5AbaovGQ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bKeGXW/btsM69I0iLO/u3ysXJPf8iY0t5AbaovGQ1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bKeGXW/btsM69I0iLO/u3ysXJPf8iY0t5AbaovGQ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbKeGXW%2FbtsM69I0iLO%2Fu3ysXJPf8iY0t5AbaovGQ1%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;125&quot; height=&quot;131&quot; data-origin-width=&quot;125&quot; data-origin-height=&quot;131&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1743672422357&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;ul&amp;gt;
    &amp;lt;li&amp;gt;&amp;lt;a href=&quot;http://www.naver.com&quot; title=&quot;menu1&quot;&amp;gt;메뉴1&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
    &amp;lt;li&amp;gt;&amp;lt;a href=&quot;intro.xls&quot; title=&quot;hidden-menu&quot;&amp;gt;메뉴2&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
    &amp;lt;li&amp;gt;&amp;lt;a href=&quot;http://www.naver.com&quot; title=&quot;menu3&quot;&amp;gt;메뉴3&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;&lt;/code&gt;&lt;/pre&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;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;⑦ [속성 *= 값] 선택자&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;값의 일부가 일치하는 속성을 가진 요소를 찾아 스타일을 적용된다. 앞이든 뒤든 상관없이 값만 포함되면 된다.&lt;/p&gt;
&lt;pre id=&quot;code_1743672646535&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;a[href *= &quot;naver&quot;] {
    background-color: aquamarine;
}&lt;/code&gt;&lt;/pre&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;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;117&quot; data-origin-height=&quot;132&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Cm55W/btsM6bHOiiF/pERqdW3SNYolYztKmMjlbK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Cm55W/btsM6bHOiiF/pERqdW3SNYolYztKmMjlbK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Cm55W/btsM6bHOiiF/pERqdW3SNYolYztKmMjlbK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCm55W%2FbtsM6bHOiiF%2FpERqdW3SNYolYztKmMjlbK%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;117&quot; height=&quot;132&quot; data-origin-width=&quot;117&quot; data-origin-height=&quot;132&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1743672663875&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;ul&amp;gt;
    &amp;lt;li&amp;gt;&amp;lt;a href=&quot;http://www.naver.com&quot; title=&quot;menu1&quot;&amp;gt;메뉴1&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
    &amp;lt;li&amp;gt;&amp;lt;a href=&quot;intro.xls&quot; title=&quot;hidden-menu&quot;&amp;gt;메뉴2&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
    &amp;lt;li&amp;gt;&amp;lt;a href=&quot;http://www.naver.com&quot; title=&quot;menu3&quot;&amp;gt;메뉴3&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;border-left: 6px solid #00a667; letter-spacing: -1px; padding: 0px 0px 0px 7px; margin: 5px 0px 7px 0px;&quot; data-ke-size=&quot;size15&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;&amp;nbsp;가상 클래스&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;연결 선택자나 속성 선택자는 HTML 마크업 안에 포함되어 있는 값들을 직접 확인하고 지정할 수 있었지만 가상 요소와 가상 클래스는 말 그대로 보이지 않는 부분을 특정할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;① 사용자 동작에 반응하는 가상 클래스&lt;/b&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 120px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style14&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 19.5349%; height: 20px;&quot;&gt;&lt;b&gt;표기&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 80.4651%; height: 20px;&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: 19.5349%; height: 20px;&quot;&gt;:link&lt;/td&gt;
&lt;td style=&quot;width: 80.4651%; height: 20px;&quot;&gt;방문하지 않은 링크에 스타일을 지정할 수 있다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 19.5349%; height: 20px;&quot;&gt;:visited&lt;/td&gt;
&lt;td style=&quot;width: 80.4651%; height: 20px;&quot;&gt;방문한 링크에 스타일을 적용할 수 있다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 19.5349%; height: 20px;&quot;&gt;:active&lt;/td&gt;
&lt;td style=&quot;width: 80.4651%; height: 20px;&quot;&gt;웹 요소를 활성화했을 때의 스타일을 적용할 수 있다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 19.5349%; height: 20px;&quot;&gt;:hover&lt;/td&gt;
&lt;td style=&quot;width: 80.4651%; height: 20px;&quot;&gt;웹 요소에 마우스 커서를 올려놓을 때의 스타일을 적용할 수 있다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 19.5349%; height: 20px;&quot;&gt;:focus&lt;/td&gt;
&lt;td style=&quot;width: 80.4651%; height: 20px;&quot;&gt;웹 요소에 초점이 맞추어졌을 때 스타일을 적용할 수 있다. (Tab 키)&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;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;② UI 요소 상태에 따른 가상 클래스&lt;/b&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 69px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style14&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 19.8837%; height: 20px;&quot;&gt;표기&lt;/td&gt;
&lt;td style=&quot;width: 80.1163%; height: 20px;&quot;&gt;설명&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 33px;&quot;&gt;
&lt;td style=&quot;width: 19.8837%; height: 33px;&quot;&gt;:enabled,&lt;br /&gt;:disabled&lt;/td&gt;
&lt;td style=&quot;width: 80.1163%; height: 33px;&quot;&gt;요소를 사용할 수 있을 때와 없을 때의 스타일을 지정한다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 16px;&quot;&gt;
&lt;td style=&quot;width: 19.8837%; height: 16px;&quot;&gt;:checked&lt;/td&gt;
&lt;td style=&quot;width: 80.1163%; height: 16px;&quot;&gt;라디오 박스나 체크 박스에서 항목을 선택했을 때의 스타일 지정 할 수 있다.&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;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;예시)&lt;/b&gt; 라디오 박스 체크했을 때의 스타일 지정&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;161&quot; data-origin-height=&quot;45&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b0Qbna/btsM8ZetnDG/azlezLYnN8Rp5smRw6Bti0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b0Qbna/btsM8ZetnDG/azlezLYnN8Rp5smRw6Bti0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b0Qbna/btsM8ZetnDG/azlezLYnN8Rp5smRw6Bti0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb0Qbna%2FbtsM8ZetnDG%2FazlezLYnN8Rp5smRw6Bti0%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;161&quot; height=&quot;45&quot; data-origin-width=&quot;161&quot; data-origin-height=&quot;45&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1743680419278&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;input:checked + span {
    color: blue;
}&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1743680395876&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;label&amp;gt;
    &amp;lt;input type=&quot;radio&quot; name=&quot;subject&quot; value=&quot;english&quot;&amp;gt;&amp;lt;span&amp;gt;영어&amp;lt;/span&amp;gt;
&amp;lt;/label&amp;gt;
&amp;lt;label&amp;gt;
    &amp;lt;input type=&quot;radio&quot; name=&quot;subject&quot; value=&quot;math&quot;&amp;gt;&amp;lt;span&amp;gt;수학&amp;lt;/span&amp;gt;
&amp;lt;/label&amp;gt;
&amp;lt;label&amp;gt;
    &amp;lt;input type=&quot;radio&quot; name=&quot;subject&quot; value=&quot;speaking&quot;&amp;gt;&amp;lt;span&amp;gt;회화&amp;lt;/span&amp;gt;
&amp;lt;/label&amp;gt;&lt;/code&gt;&lt;/pre&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;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;예시)&lt;/b&gt; 선택 박스에 마우스를 올려놓을 때의 스타일 지정&lt;/p&gt;
&lt;pre id=&quot;code_1743681164338&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;.button {
    text-align: center;
    width: 100px;
    padding: 5px;
    background-color: brown;
    color: beige;
}

.button:hover {
    background-color: chocolate;
}&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1743681199267&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;div class=&quot;button&quot;&amp;gt;
    &amp;lt;p&amp;gt;메인 메뉴&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;&lt;/code&gt;&lt;/pre&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;h4 style=&quot;border-left: 6px solid #00a667; letter-spacing: -1px; padding: 0px 0px 0px 7px; margin: 5px 0px 7px 0px;&quot; data-ke-size=&quot;size15&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;&amp;nbsp;구조 가상 클래스&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;① :nth-child(n) 과 :nth-last-child(n)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size20&quot;&gt;:nth-child(n) 은 앞에서부터 n 번째 자식 요소에 스타일을 적용한다. :nth-last-child(n) 은 뒤에서부터 n 번재 자식 요소에 스타일을 적용한다. n 은 위치를 나타내는 곳으로 an+b 처럼 수식을 사용할 수도 있다. n 은 0부터이다.&lt;/p&gt;
&lt;pre id=&quot;code_1743681533071&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;/* div 요소 안에서 네 번째 자식 요소인 p요소에 스타일을 지정한다. */
div p:nth-child(4) { background: blue; }

/* div 요소 안에서 홀수 번째로 나타나는 자식 요소인 p 요소에 스타일을 지정한다. */
div p:nth-child(odd) { background: blue; }

/* div 요소 안에서 홀수 번째로 나타나는 자식 요소인 tr요소에 스타일을 지정한다. */
div tr:nth-child(2n+1) { background: blue; }

/* div 요소 안에서 짝수 번째로 나타나는 자식 요소인 p요소에 스타일을 지정한다. */
div p:nth-child(even) { background: blue; }

/* table 요소 안에서 짝수 번째로 나타나는 자식 요소인 tr요소에 스타일을 지정한다. */
table tr:nth-child(2n) { background: blue; }

/* class가 container 인 요소 안에서 뒤에서 두번째 자식 요소인 p 요소에 스타일을 지정한다. */
.container p:nth-last-child(2) { background: blue; }&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예시) nth-child(2n+1)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;92&quot; data-origin-height=&quot;217&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cUsiz8/btsM8jeEQWQ/xkUIwj9ePjxu3ghDvHCVkK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cUsiz8/btsM8jeEQWQ/xkUIwj9ePjxu3ghDvHCVkK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cUsiz8/btsM8jeEQWQ/xkUIwj9ePjxu3ghDvHCVkK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcUsiz8%2FbtsM8jeEQWQ%2FxkUIwj9ePjxu3ghDvHCVkK%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;92&quot; height=&quot;217&quot; data-origin-width=&quot;92&quot; data-origin-height=&quot;217&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1743749277210&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;style&amp;gt;
    table tr:nth-child(2n+1) {
        background: lightgray;
        color: black;
    }
&amp;lt;/style&amp;gt;

&amp;lt;body&amp;gt;
	&amp;lt;table border=&quot;1&quot;&amp;gt;
		&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;블루베리&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;
		&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;사과&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;
		&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;딸기&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;
		&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;레몬&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;
		&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;배&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;
		&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;유자&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;
	&amp;lt;/table&amp;gt;
&amp;lt;/body&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예시) nth-last-child(3)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;107&quot; data-origin-height=&quot;217&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vBIKI/btsM9DJL30f/qol6yewMxkR9Df6H1vpduk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vBIKI/btsM9DJL30f/qol6yewMxkR9Df6H1vpduk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vBIKI/btsM9DJL30f/qol6yewMxkR9Df6H1vpduk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvBIKI%2FbtsM9DJL30f%2Fqol6yewMxkR9Df6H1vpduk%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;107&quot; height=&quot;217&quot; data-origin-width=&quot;107&quot; data-origin-height=&quot;217&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1743749439332&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;style&amp;gt;
    table tr:nth-last-child(3) {
        background: lightgray;
        color: black;
    }
&amp;lt;/style&amp;gt;

&amp;lt;body&amp;gt;
	&amp;lt;table border=&quot;1&quot;&amp;gt;
		&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;블루베리&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;
		&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;사과&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;
		&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;딸기&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;
		&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;레몬&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;
		&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;배&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;
		&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;유자&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;
	&amp;lt;/table&amp;gt;
&amp;lt;/body&amp;gt;&lt;/code&gt;&lt;/pre&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;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;② :nth-of-type(n) 과 :nth-last-of-type(n)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;:nth-of-type(n) 은 앞에서부터 n 번째 요소에 스타일을 적용한다.&amp;nbsp;&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;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;③ :first-child 와 :last-child&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;:first-child 는 첫번째 자식 요소스타일을 적용하고 last-child 는 마지막 자식 요소에 스타일을 적용한다.&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;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;628&quot; data-origin-height=&quot;72&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eDFK4z/btsM9XgY8KN/VgscQhrdKXWNYNZp4KRkc1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eDFK4z/btsM9XgY8KN/VgscQhrdKXWNYNZp4KRkc1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eDFK4z/btsM9XgY8KN/VgscQhrdKXWNYNZp4KRkc1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeDFK4z%2FbtsM9XgY8KN%2FVgscQhrdKXWNYNZp4KRkc1%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;628&quot; height=&quot;72&quot; data-origin-width=&quot;628&quot; data-origin-height=&quot;72&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1743750602435&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ul.navi li:first-child {
    border-top-left-radius: 1em;
    border-bottom-left-radius: 1em;
}

ul.navi li:last-child {
    border-top-right-radius: 1em;
    border-bottom-right-radius: 1em;
}

.navi li {
    width: 100px;
    list-style-type: none;
    display: inline-block;
    border: 1px solid #000000;
    padding: 10px;
    text-align: center;
}&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1743750615960&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;ul class=&quot;navi&quot;&amp;gt;
    &amp;lt;li&amp;gt;Home&amp;lt;/li&amp;gt;&amp;lt;li&amp;gt;HTML&amp;lt;/li&amp;gt;&amp;lt;li&amp;gt;CSS&amp;lt;/li&amp;gt;&amp;lt;li&amp;gt;JavaScript&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;&lt;/code&gt;&lt;/pre&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;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;④ :first-of-type 와 :last-of-type&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;:first-of-type 은 형제 요소들 중 첫번째 요소에 스타일을 적용한다. :last-of-type 은 형제 요소들 중 마지막 요소에 스타일을 적용한다.&amp;nbsp;&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;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;628&quot; data-origin-height=&quot;72&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eDFK4z/btsM9XgY8KN/VgscQhrdKXWNYNZp4KRkc1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eDFK4z/btsM9XgY8KN/VgscQhrdKXWNYNZp4KRkc1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eDFK4z/btsM9XgY8KN/VgscQhrdKXWNYNZp4KRkc1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeDFK4z%2FbtsM9XgY8KN%2FVgscQhrdKXWNYNZp4KRkc1%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;628&quot; height=&quot;72&quot; data-origin-width=&quot;628&quot; data-origin-height=&quot;72&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1743751692003&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ul.navi li:first-of-type {
    border-top-left-radius: 1em;
    border-bottom-left-radius: 1em;
}

ul.navi li:last-of-type {
    border-top-right-radius: 1em;
    border-bottom-right-radius: 1em;
}

.navi li {
    width: 100px;
    list-style-type: none;
    display: inline-block;
    border: 1px solid #000000;
    padding: 10px;
    text-align: center;
}&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1743751713825&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;ul class=&quot;navi&quot;&amp;gt;
    &amp;lt;li&amp;gt;Home&amp;lt;/li&amp;gt;&amp;lt;li&amp;gt;HTML&amp;lt;/li&amp;gt;&amp;lt;li&amp;gt;CSS&amp;lt;/li&amp;gt;&amp;lt;li&amp;gt;JavaScript&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;&lt;/code&gt;&lt;/pre&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;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;⑤ :only-child 와 :only-of-type&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;:only-child 는 부모 안에 자식 요소가 유일하게 하나일 때 스타일이 적용된다. :only-of-type 은 자신이 유일한 요소일 때 스타일이 적용된다. :only-child 에는 부모 안에 다른 자식 요소가 있으면 안되지만 :only-of-type 은 다른 요소가 있어도 된다. 단, only-of-type 에 대항되는 요소는 단 하나여야 한다.&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;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;122&quot; data-origin-height=&quot;155&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ckh7Ry/btsM9umfGDW/Epz0Jk0JgQn7Vf5Vkjbgpk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ckh7Ry/btsM9umfGDW/Epz0Jk0JgQn7Vf5Vkjbgpk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ckh7Ry/btsM9umfGDW/Epz0Jk0JgQn7Vf5Vkjbgpk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fckh7Ry%2FbtsM9umfGDW%2FEpz0Jk0JgQn7Vf5Vkjbgpk%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;122&quot; height=&quot;155&quot; data-origin-width=&quot;122&quot; data-origin-height=&quot;155&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1743752069328&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;style&amp;gt;
    .container1 p:only-child {
        color: burlywood;
    }

    .container2 p:only-of-type {
        color: cadetblue;
    }
&amp;lt;/style&amp;gt;

&amp;lt;body&amp;gt;
	&amp;lt;div class=&quot;container1&quot;&amp;gt;
		&amp;lt;p&amp;gt;환영합니다.&amp;lt;/p&amp;gt;
	&amp;lt;/div&amp;gt;

	&amp;lt;div class=&quot;container2&quot;&amp;gt;
		&amp;lt;p&amp;gt;홈 트레이닝.&amp;lt;/p&amp;gt;
		&amp;lt;h4&amp;gt;감사합니다.&amp;lt;/h4&amp;gt;
	&amp;lt;/div&amp;gt;
&amp;lt;/body&amp;gt;&lt;/code&gt;&lt;/pre&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;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;⑥ ::before 와 ::after&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;::before 는 특정 요소의 앞에 지정한 내용을 추가한다. 마찬가지로 ::after 는 특정 요소의 뒤에 지정한 내용을 추가한다. 글자, 이미지 등을 넣을 수 있다. 다른 선택자를 통해 내용을 추가할 경우에는 돔이라고 하는 문서에 포함이 되어 자바스크립트에서 접근하여 이용하고 수정할 수 있다. 반면 ::before 와 ::after 는 가상 요소로 돔 문서 안에 존재하는 것이 아니다. 단지 조건에 맞춰 화면에 보여줄 뿐으로 자바스크립트에서 접근할 수 없다.&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;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;212&quot; data-origin-height=&quot;258&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/YVwNu/btsNanlXPBm/kwYvlJsOC2rVvJzU1Kjnj0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/YVwNu/btsNanlXPBm/kwYvlJsOC2rVvJzU1Kjnj0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/YVwNu/btsNanlXPBm/kwYvlJsOC2rVvJzU1Kjnj0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FYVwNu%2FbtsNanlXPBm%2FkwYvlJsOC2rVvJzU1Kjnj0%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;212&quot; height=&quot;258&quot; data-origin-width=&quot;212&quot; data-origin-height=&quot;258&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1743752643701&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;style&amp;gt;
    ul li:nth-child(2n)::after {
        content: &quot;NEW!&quot;;
        font-size: x-small;
        padding: 2px 4px;
        background-color: crimson;
        color: white;
        margin-left: 10px;
    }
&amp;lt;/style&amp;gt;

&amp;lt;body&amp;gt;
	&amp;lt;h4&amp;gt;제목 목록&amp;lt;/h4&amp;gt;
	&amp;lt;ul&amp;gt;
		&amp;lt;li&amp;gt;바나나&amp;lt;/li&amp;gt;
		&amp;lt;li&amp;gt;딸기&amp;lt;/li&amp;gt;
		&amp;lt;li&amp;gt;수박&amp;lt;/li&amp;gt;
		&amp;lt;li&amp;gt;샤인머스켓&amp;lt;/li&amp;gt;
	&amp;lt;/ul&amp;gt;
&amp;lt;/body&amp;gt;&lt;/code&gt;&lt;/pre&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;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;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;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;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;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;</description>
      <category>웹/HTML + CSS</category>
      <author>초코초코초코</author>
      <guid isPermaLink="true">https://laustudy.tistory.com/452</guid>
      <comments>https://laustudy.tistory.com/452#entry452comment</comments>
      <pubDate>Fri, 4 Apr 2025 17:07:59 +0900</pubDate>
    </item>
  </channel>
</rss>