<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>DDODDO LAB</title>
    <link>https://ok-ddoddo.tistory.com/</link>
    <description>AI &amp;times; 웹 퍼블리셔 실무 자동화 기록....
AI로 실무 시간을 줄이는 웹 퍼블리셔 자동화 블로그
반응형 설계, 공공기관 고도화, 실전 프롬프트 정리</description>
    <language>ko</language>
    <pubDate>Wed, 27 May 2026 16:39:45 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>DDODDO_LAB</managingEditor>
    <image>
      <title>DDODDO LAB</title>
      <url>https://tistory1.daumcdn.net/tistory/6441879/attach/5b5fce52b53b4852925382d9125478a8</url>
      <link>https://ok-ddoddo.tistory.com</link>
    </image>
    <item>
      <title>aria-label 언제 사용해야 할까</title>
      <link>https://ok-ddoddo.tistory.com/112</link>
      <description>&lt;h3 data-end=&quot;211&quot; data-start=&quot;194&quot; data-section-id=&quot;1jeh1qx&quot; data-ke-size=&quot;size23&quot;&gt;웹 접근성 실무 기준 정리&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;aria-label vs sr-only 차이 (실무 기준)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;266&quot; data-start=&quot;213&quot; data-ke-size=&quot;size16&quot;&gt;웹 접근성을 고려한 퍼블리싱을 하다 보면&lt;br /&gt;aria-label 속성을 자주 사용하게 된다.&lt;/p&gt;
&lt;p data-end=&quot;296&quot; data-start=&quot;268&quot; data-ke-size=&quot;size16&quot;&gt;하지만 많은 퍼블리셔들이 다음과 같은 고민을 한다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;367&quot; data-start=&quot;298&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;323&quot; data-start=&quot;298&quot; data-section-id=&quot;1s380le&quot;&gt;aria-label은 언제 사용해야 할까?&lt;/li&gt;
&lt;li data-end=&quot;344&quot; data-start=&quot;324&quot; data-section-id=&quot;1okh0s5&quot;&gt;label 태그 대신 써도 될까?&lt;/li&gt;
&lt;li data-end=&quot;367&quot; data-start=&quot;345&quot; data-section-id=&quot;6vh4yr&quot;&gt;sr-only와 어떤 차이가 있을까?&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;426&quot; data-start=&quot;369&quot; data-ke-size=&quot;size16&quot;&gt;이번 글에서는 &lt;b&gt;aria-label을 언제 사용해야 하는지&lt;/b&gt;&lt;br /&gt;퍼블리싱 실무 기준으로 정리해보자.&lt;/p&gt;
&lt;p data-end=&quot;426&quot; data-start=&quot;369&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;revenue_unit_wrap&quot;&gt;
  &lt;div class=&quot;revenue_unit_item adsense responsive&quot;&gt;
    &lt;div class=&quot;revenue_unit_info&quot;&gt;반응형&lt;/div&gt;
    &lt;script src=&quot;//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js&quot; async=&quot;async&quot;&gt;&lt;/script&gt;
    &lt;ins class=&quot;adsbygoogle&quot; style=&quot;display: block;&quot; data-ad-host=&quot;ca-host-pub-9691043933427338&quot; data-ad-client=&quot;ca-pub-8033755675470956&quot; data-ad-format=&quot;auto&quot;&gt;&lt;/ins&gt;
    &lt;script&gt;(adsbygoogle = window.adsbygoogle || []).push({});&lt;/script&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;aria-label 언제 사용해야 할까.png&quot; data-origin-width=&quot;1536&quot; data-origin-height=&quot;1024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b5klHl/dJMcahKlYIr/HaIbt20wc8mdu5scdTFw8K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b5klHl/dJMcahKlYIr/HaIbt20wc8mdu5scdTFw8K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b5klHl/dJMcahKlYIr/HaIbt20wc8mdu5scdTFw8K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb5klHl%2FdJMcahKlYIr%2FHaIbt20wc8mdu5scdTFw8K%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; alt=&quot;aria-label 언제 사용해야 할까&quot; loading=&quot;lazy&quot; width=&quot;1536&quot; height=&quot;1024&quot; data-filename=&quot;aria-label 언제 사용해야 할까.png&quot; data-origin-width=&quot;1536&quot; data-origin-height=&quot;1024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-end=&quot;426&quot; data-start=&quot;369&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-end=&quot;448&quot; data-start=&quot;433&quot; data-section-id=&quot;81ni71&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;aria-label이란?&lt;/b&gt;&lt;/h3&gt;
&lt;p data-end=&quot;551&quot; data-start=&quot;450&quot; data-ke-size=&quot;size16&quot;&gt;aria-label은 &lt;b&gt;ARIA(Accessible Rich Internet Applications)&lt;/b&gt; 속성 중 하나로&lt;br /&gt;요소의 이름을 스크린리더에게 제공하는 역할을 한다.&lt;/p&gt;
&lt;pre id=&quot;code_1772759009119&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!-- HTML --&amp;gt;

&amp;lt;button aria-label=&quot;검색&quot;&amp;gt;
  &amp;lt;span class=&quot;icon-search&quot;&amp;gt;&amp;lt;/span&amp;gt;
&amp;lt;/button&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-end=&quot;680&quot; data-start=&quot;642&quot; data-ke-size=&quot;size16&quot;&gt;이 경우 화면에는 아이콘만 보이지만&lt;br /&gt;스크린리더는 다음처럼 읽는다.&lt;/p&gt;
&lt;blockquote data-end=&quot;691&quot; data-start=&quot;682&quot; data-ke-style=&quot;style2&quot;&gt;
&lt;p data-end=&quot;691&quot; data-start=&quot;684&quot; data-ke-size=&quot;size16&quot;&gt;&quot;검색 버튼&quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-end=&quot;708&quot; data-start=&quot;693&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;708&quot; data-start=&quot;693&quot; data-ke-size=&quot;size16&quot;&gt;즉 aria-label은&lt;/p&gt;
&lt;p data-end=&quot;751&quot; data-start=&quot;710&quot; data-ke-size=&quot;size16&quot;&gt;✔ 화면에 텍스트가 없어도&lt;br /&gt;✔ 접근성 설명을 제공할 수 있는 속성이다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;div&gt;&lt;center&gt;
&lt;script src=&quot;https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-8033755675470956&quot;&gt;&lt;/script&gt;
&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;aria-label을 사용해야 하는 경우&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;1. 아이콘 버튼&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;아이콘만 있는 버튼은&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;스크린리더에서 의미를 알 수 없다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;예를 들어 검색 버튼이 있다고 하자.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;script&gt;     (adsbygoogle = window.adsbygoogle || []).push({});&lt;/script&gt;
&lt;/center&gt;&lt;/div&gt;
&lt;p data-end=&quot;868&quot; data-start=&quot;855&quot; data-section-id=&quot;10chaio&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;접근성 없는 코드&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1772759074742&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!-- HTML --&amp;gt;

&amp;lt;button&amp;gt;
  &amp;lt;span class=&quot;icon-search&quot;&amp;gt;&amp;lt;/span&amp;gt;
&amp;lt;/button&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;b&gt; 접근성 있는 코드 &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1772759082785&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!-- HTML --&amp;gt;

&amp;lt;button aria-label=&quot;검색&quot;&amp;gt;
  &amp;lt;span class=&quot;icon-search&quot;&amp;gt;&amp;lt;/span&amp;gt;
&amp;lt;/button&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-end=&quot;1050&quot; data-start=&quot;1037&quot; data-ke-size=&quot;size16&quot;&gt;이렇게 하면 스크린리더는&lt;/p&gt;
&lt;blockquote data-end=&quot;1059&quot; data-start=&quot;1052&quot; data-ke-style=&quot;style2&quot;&gt;
&lt;p data-end=&quot;1059&quot; data-start=&quot;1054&quot; data-ke-size=&quot;size16&quot;&gt;검색 버튼&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-end=&quot;1069&quot; data-start=&quot;1061&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;1069&quot; data-start=&quot;1061&quot; data-ke-size=&quot;size16&quot;&gt;으로 인식한다.&lt;/p&gt;
&lt;div&gt;&lt;center&gt;
&lt;script src=&quot;https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-8033755675470956&quot;&gt;&lt;/script&gt;
&lt;!-- (디플/반응형) Lab --&gt; &lt;ins class=&quot;adsbygoogle&quot; style=&quot;display: block;&quot; data-ad-client=&quot;ca-pub-8033755675470956&quot; data-ad-slot=&quot;4076574202&quot; data-ad-format=&quot;auto&quot; data-full-width-responsive=&quot;true&quot;&gt;&lt;/ins&gt;
&lt;script&gt;     (adsbygoogle = window.adsbygoogle || []).push({});&lt;/script&gt;
&lt;/center&gt;&lt;/div&gt;
&lt;h4 data-end=&quot;1098&quot; data-start=&quot;1076&quot; data-section-id=&quot;1uq2ca8&quot; data-ke-size=&quot;size20&quot;&gt;2. 텍스트를 추가하기 어려운 UI&lt;/h4&gt;
&lt;p data-end=&quot;1131&quot; data-start=&quot;1100&quot; data-ke-size=&quot;size16&quot;&gt;디자인 때문에&lt;br /&gt;텍스트를 추가할 수 없는 경우가 있다.&lt;/p&gt;
&lt;p data-end=&quot;1135&quot; data-start=&quot;1133&quot; data-ke-size=&quot;size16&quot;&gt;예:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1165&quot; data-start=&quot;1137&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1148&quot; data-start=&quot;1137&quot; data-section-id=&quot;11x7dgw&quot;&gt;모바일 메뉴 버튼&lt;/li&gt;
&lt;li data-end=&quot;1156&quot; data-start=&quot;1149&quot; data-section-id=&quot;1hxfmln&quot;&gt;닫기 버튼&lt;/li&gt;
&lt;li data-end=&quot;1165&quot; data-start=&quot;1157&quot; data-section-id=&quot;8hio5n&quot;&gt;좋아요 버튼&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1772759177775&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!-- HTML --&amp;gt;

&amp;lt;button aria-label=&quot;메뉴 열기&quot;&amp;gt;
  ☰
&amp;lt;/button&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-end=&quot;1069&quot; data-start=&quot;1061&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-end=&quot;1241&quot; data-start=&quot;1227&quot; data-section-id=&quot;xg0x8k&quot; data-ke-size=&quot;size20&quot;&gt;3. 추가 설명 제공&lt;/h4&gt;
&lt;p data-end=&quot;1274&quot; data-start=&quot;1243&quot; data-ke-size=&quot;size16&quot;&gt;요소의 의미를 더 명확하게 설명할 때도 사용할 수 있다.&lt;/p&gt;
&lt;pre id=&quot;code_1772759209903&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!-- HTML --&amp;gt;

&amp;lt;button aria-label=&quot;게시글 삭제&quot;&amp;gt;
  삭제
&amp;lt;/button&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-end=&quot;1274&quot; data-start=&quot;1243&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;1274&quot; data-start=&quot;1243&quot; data-ke-size=&quot;size16&quot;&gt;텍스트가 이미 있지만&lt;br /&gt;스크린리더 사용자에게 더 명확한 설명을 제공한다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-end=&quot;1274&quot; data-start=&quot;1243&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt; aria-label을 사용하면 안 되는 경우 &lt;/b&gt;&lt;/h3&gt;
&lt;h4 data-end=&quot;1434&quot; data-start=&quot;1413&quot; data-section-id=&quot;goj8qd&quot; data-ke-size=&quot;size20&quot;&gt;1. 이미 label이 있는 경우&lt;/h4&gt;
&lt;p data-end=&quot;1475&quot; data-start=&quot;1436&quot; data-ke-size=&quot;size16&quot;&gt;폼 입력 요소에는&lt;br /&gt;&lt;b&gt;label 태그를 사용하는 것이 기본이다.&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1772759259608&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!-- HTML --&amp;gt;

&amp;lt;label for=&quot;email&quot;&amp;gt;이메일&amp;lt;/label&amp;gt;
&amp;lt;input id=&quot;email&quot; type=&quot;email&quot;&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-end=&quot;1274&quot; data-start=&quot;1243&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;1274&quot; data-start=&quot;1243&quot; data-ke-size=&quot;size16&quot;&gt;굳이 다음처럼 작성할 필요는 없다.&lt;/p&gt;
&lt;pre id=&quot;code_1772759277840&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!-- HTML --&amp;gt;

&amp;lt;input type=&quot;email&quot; aria-label=&quot;이메일&quot;&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;div&gt;&lt;center&gt;
&lt;script src=&quot;https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-8033755675470956&quot;&gt;&lt;/script&gt;
&lt;!-- (디플/반응형) Lab --&gt; &lt;ins class=&quot;adsbygoogle&quot; style=&quot;display: block;&quot; data-ad-client=&quot;ca-pub-8033755675470956&quot; data-ad-slot=&quot;4076574202&quot; data-ad-format=&quot;auto&quot; data-full-width-responsive=&quot;true&quot;&gt;&lt;/ins&gt;
&lt;script&gt;     (adsbygoogle = window.adsbygoogle || []).push({});&lt;/script&gt;
&lt;/center&gt;&lt;/div&gt;
&lt;h4 data-end=&quot;1656&quot; data-start=&quot;1637&quot; data-section-id=&quot;1d5l2m9&quot; data-ke-size=&quot;size20&quot;&gt;2. 실제 텍스트가 있는 경우&lt;/h4&gt;
&lt;p data-end=&quot;1695&quot; data-start=&quot;1658&quot; data-ke-size=&quot;size16&quot;&gt;다음처럼 텍스트가 이미 있다면&lt;br /&gt;aria-label은 필요 없다.&lt;/p&gt;
&lt;pre id=&quot;code_1772759306290&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!-- HTML --&amp;gt;

&amp;lt;button&amp;gt;검색&amp;lt;/button&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-end=&quot;1744&quot; data-start=&quot;1730&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;1744&quot; data-start=&quot;1730&quot; data-ke-size=&quot;size16&quot;&gt;이 경우 스크린리더는 이미&lt;/p&gt;
&lt;blockquote data-end=&quot;1753&quot; data-start=&quot;1746&quot; data-ke-style=&quot;style2&quot;&gt;
&lt;p data-end=&quot;1753&quot; data-start=&quot;1748&quot; data-ke-size=&quot;size16&quot;&gt;검색 버튼&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-end=&quot;1765&quot; data-start=&quot;1755&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;1765&quot; data-start=&quot;1755&quot; data-ke-size=&quot;size16&quot;&gt;을 읽을 수 있다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-end=&quot;1795&quot; data-start=&quot;1772&quot; data-section-id=&quot;1kc296z&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;aria-label vs sr-only&lt;/b&gt;&lt;/h3&gt;
&lt;p data-end=&quot;1815&quot; data-start=&quot;1797&quot; data-ke-size=&quot;size16&quot;&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;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;height: 17px; text-align: center;&quot;&gt;&lt;b&gt;방법&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 17px; text-align: center;&quot;&gt;&lt;b&gt;특징&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;aria-label&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;속성으로 설명 제공&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;sr-only&lt;/td&gt;
&lt;td style=&quot;height: 21px;&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;b&gt; aria-label &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1772759408214&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!-- HTML --&amp;gt;

&amp;lt;button aria-label=&quot;검색&quot;&amp;gt;
  &amp;lt;span class=&quot;icon-search&quot;&amp;gt;&amp;lt;/span&amp;gt;
&amp;lt;/button&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;b&gt;sr-only &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1772759419536&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!-- HTML --&amp;gt;

&amp;lt;button&amp;gt;
  &amp;lt;span class=&quot;icon-search&quot;&amp;gt;&amp;lt;/span&amp;gt;
  &amp;lt;span class=&quot;sr-only&quot;&amp;gt;검색&amp;lt;/span&amp;gt;
&amp;lt;/button&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;br /&gt;&lt;b&gt;상황에 맞게 선택하는 것이 중요하다.&lt;/b&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-end=&quot;2191&quot; data-start=&quot;2168&quot; data-section-id=&quot;158vmcb&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;aria-label 사용 시 주의할 점&lt;/b&gt;&lt;/h3&gt;
&lt;h4 data-end=&quot;2219&quot; data-start=&quot;2193&quot; data-section-id=&quot;12ix2ua&quot; data-ke-size=&quot;size20&quot;&gt;1. sr-only와 중복 사용하지 않기&lt;/h4&gt;
&lt;p data-end=&quot;2234&quot; data-start=&quot;2221&quot; data-ke-size=&quot;size16&quot;&gt;다음 코드는 좋지 않다.&lt;/p&gt;
&lt;pre id=&quot;code_1772759470515&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!-- HTMl --&amp;gt;

&amp;lt;button aria-label=&quot;검색&quot;&amp;gt;
  &amp;lt;span class=&quot;icon-search&quot;&amp;gt;&amp;lt;/span&amp;gt;
  &amp;lt;span class=&quot;sr-only&quot;&amp;gt;검색&amp;lt;/span&amp;gt;
&amp;lt;/button&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;b&gt;중복으로 읽을 수 있다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-end=&quot;2409&quot; data-start=&quot;2385&quot; data-section-id=&quot;22xdjy&quot; data-ke-size=&quot;size20&quot;&gt;2. 의미 없는 텍스트 사용하지 않기&lt;/h4&gt;
&lt;p data-end=&quot;2428&quot; data-start=&quot;2411&quot; data-ke-size=&quot;size16&quot;&gt;다음과 같은 라벨은 좋지 않다.&lt;/p&gt;
&lt;p data-end=&quot;2441&quot; data-start=&quot;2430&quot; data-ke-size=&quot;size16&quot;&gt;❌ 버튼&lt;br /&gt;❌ 클릭&lt;/p&gt;
&lt;p data-end=&quot;2445&quot; data-start=&quot;2443&quot; data-ke-size=&quot;size16&quot;&gt;대신&lt;/p&gt;
&lt;p data-end=&quot;2472&quot; data-start=&quot;2447&quot; data-ke-size=&quot;size16&quot;&gt;⭕ 검색&lt;br /&gt;⭕ 메뉴 열기&lt;br /&gt;⭕ 게시글 삭제&lt;/p&gt;
&lt;p data-end=&quot;2497&quot; data-start=&quot;2474&quot; 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;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;h3 data-end=&quot;2508&quot; data-start=&quot;2504&quot; data-section-id=&quot;yim43j&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;정리&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-end=&quot;2541&quot; data-start=&quot;2510&quot; data-ke-size=&quot;size16&quot;&gt;aria-label은 다음 상황에서 사용하는 것이 좋다.&lt;/p&gt;
&lt;p data-end=&quot;2587&quot; data-start=&quot;2543&quot; data-ke-size=&quot;size16&quot;&gt;✔ 아이콘 버튼&lt;br /&gt;✔ 텍스트를 추가하기 어려운 UI&lt;br /&gt;✔ 추가 설명 제공&lt;/p&gt;
&lt;p data-end=&quot;2587&quot; data-start=&quot;2543&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;2607&quot; data-start=&quot;2589&quot; data-ke-size=&quot;size16&quot;&gt;반대로 다음 경우에는 필요 없다.&lt;/p&gt;
&lt;p data-end=&quot;2649&quot; data-start=&quot;2609&quot; data-ke-size=&quot;size16&quot;&gt;❌ 이미 텍스트가 있는 버튼&lt;br /&gt;❌ label 태그가 있는 입력 요소&lt;/p&gt;
&lt;p data-end=&quot;2649&quot; data-start=&quot;2609&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;2708&quot; data-start=&quot;2651&quot; data-ke-size=&quot;size16&quot;&gt;접근성을 고려한 퍼블리싱에서는&lt;br /&gt;&lt;b&gt;적절한 상황에서 aria-label을 사용하는 것이 중요하다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;center&gt;
&lt;script src=&quot;https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-8033755675470956&quot;&gt;&lt;/script&gt;
&lt;!-- (디플/반응형) Lab --&gt; &lt;ins class=&quot;adsbygoogle&quot; style=&quot;display: block;&quot; data-ad-client=&quot;ca-pub-8033755675470956&quot; data-ad-slot=&quot;4076574202&quot; data-ad-format=&quot;auto&quot; data-full-width-responsive=&quot;true&quot;&gt;&lt;/ins&gt;
&lt;script&gt;     (adsbygoogle = window.adsbygoogle || []).push({});&lt;/script&gt;
&lt;/center&gt;&lt;/div&gt;</description>
      <category>퍼블리싱 로그/웹접근성</category>
      <category>a11y</category>
      <category>arialabel</category>
      <category>HTMLCSS</category>
      <category>웹접근성</category>
      <category>웹퍼블리셔</category>
      <category>접근성가이드</category>
      <category>접근성마크업</category>
      <category>퍼블리싱실무</category>
      <author>DDODDO_LAB</author>
      <guid isPermaLink="true">https://ok-ddoddo.tistory.com/112</guid>
      <comments>https://ok-ddoddo.tistory.com/112#entry112comment</comments>
      <pubDate>Sun, 8 Mar 2026 10:14:50 +0900</pubDate>
    </item>
    <item>
      <title>접근성 좋은 버튼 마크업 방법</title>
      <link>https://ok-ddoddo.tistory.com/111</link>
      <description>&lt;h3 data-end=&quot;202&quot; data-start=&quot;186&quot; data-ke-size=&quot;size23&quot;&gt;퍼블리셔 실무 기준 정리&lt;/h3&gt;
&lt;p data-end=&quot;236&quot; data-start=&quot;204&quot; data-ke-size=&quot;size16&quot;&gt;웹 퍼블리싱에서 버튼은 사용자 인터랙션의 핵심 요소다.&lt;/p&gt;
&lt;p data-end=&quot;312&quot; data-start=&quot;238&quot; data-ke-size=&quot;size16&quot;&gt;하지만 단순히 디자인만 고려해서 버튼을 만들면&lt;br /&gt;&lt;b&gt;스크린리더 사용자나 키보드 사용자에게는 사용하기 어려운 UI가 될 수 있다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-end=&quot;349&quot; data-start=&quot;314&quot; data-ke-size=&quot;size16&quot;&gt;그래서 접근성을 고려한 버튼 마크업은 다음 기준을 지켜야 한다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;407&quot; data-start=&quot;351&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;367&quot; data-start=&quot;351&quot;&gt;올바른 HTML 요소 사용&lt;/li&gt;
&lt;li data-end=&quot;380&quot; data-start=&quot;368&quot;&gt;명확한 텍스트 제공&lt;/li&gt;
&lt;li data-end=&quot;392&quot; data-start=&quot;381&quot;&gt;키보드 접근 가능&lt;/li&gt;
&lt;li data-end=&quot;407&quot; data-start=&quot;393&quot;&gt;아이콘 버튼 설명 제공&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;453&quot; data-start=&quot;409&quot; data-ke-size=&quot;size16&quot;&gt;이번 글에서는 &lt;b&gt;접근성 좋은 버튼 마크업 방법&lt;/b&gt;을 실무 기준으로 정리해보자.&lt;/p&gt;
&lt;div&gt;
&lt;script src=&quot;https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-8033755675470956&quot;&gt;&lt;/script&gt;
&lt;!-- display 수 --&gt; &lt;ins class=&quot;adsbygoogle&quot; style=&quot;display: block;&quot; data-ad-client=&quot;ca-pub-8033755675470956&quot; data-ad-slot=&quot;6883997418&quot; data-ad-format=&quot;auto&quot; data-full-width-responsive=&quot;true&quot;&gt;&lt;/ins&gt;
&lt;script&gt;        (adsbygoogle = window.adsbygoogle || []).push({});    &lt;/script&gt;
&lt;/div&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;접근성 좋은 버튼 마크업 방법.png&quot; data-origin-width=&quot;1536&quot; data-origin-height=&quot;1024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bEQzrR/dJMcag5Jo3t/A8VaTzM5H1xwakk2EnsqHK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bEQzrR/dJMcag5Jo3t/A8VaTzM5H1xwakk2EnsqHK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bEQzrR/dJMcag5Jo3t/A8VaTzM5H1xwakk2EnsqHK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbEQzrR%2FdJMcag5Jo3t%2FA8VaTzM5H1xwakk2EnsqHK%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; alt=&quot;접근성 좋은 버튼 마크업 방법&quot; loading=&quot;lazy&quot; width=&quot;1536&quot; height=&quot;1024&quot; data-filename=&quot;접근성 좋은 버튼 마크업 방법.png&quot; data-origin-width=&quot;1536&quot; data-origin-height=&quot;1024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-end=&quot;483&quot; data-start=&quot;460&quot; data-ke-size=&quot;size23&quot;&gt;1. 버튼은 button 태그 사용하기&lt;/h3&gt;
&lt;p data-end=&quot;502&quot; data-start=&quot;485&quot; data-ke-size=&quot;size16&quot;&gt;가장 기본적인 접근성 원칙이다.&lt;/p&gt;
&lt;p data-end=&quot;542&quot; data-start=&quot;504&quot; data-ke-size=&quot;size16&quot;&gt;버튼 기능에는 반드시 &lt;b&gt;button 태그&lt;/b&gt;를 사용하는 것이 좋다.&lt;/p&gt;
&lt;p data-end=&quot;553&quot; data-start=&quot;544&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;553&quot; data-start=&quot;544&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;올바른 예&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1772693469973&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!-- HTML --&amp;gt;

&amp;lt;button type=&quot;button&quot;&amp;gt;확인&amp;lt;/button&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-end=&quot;618&quot; data-start=&quot;602&quot; data-ke-size=&quot;size16&quot;&gt;button 태그는 기본적으로&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;657&quot; data-start=&quot;620&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;631&quot; data-start=&quot;620&quot;&gt;키보드 접근 가능&lt;/li&gt;
&lt;li data-end=&quot;645&quot; data-start=&quot;632&quot;&gt;스크린리더 인식 가능&lt;/li&gt;
&lt;li data-end=&quot;657&quot; data-start=&quot;646&quot;&gt;클릭 이벤트 지원&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;666&quot; data-start=&quot;659&quot; 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;&lt;b&gt;잘못된 예&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1772693501296&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!-- HTMl --&amp;gt;

&amp;lt;div class=&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-end=&quot;747&quot; data-start=&quot;723&quot; data-ke-size=&quot;size16&quot;&gt;div를 버튼처럼 사용하는 것은 좋지 않다.&lt;/p&gt;
&lt;p data-end=&quot;753&quot; data-start=&quot;749&quot; data-ke-size=&quot;size16&quot;&gt;이 경우&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;781&quot; data-start=&quot;755&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;766&quot; data-start=&quot;755&quot;&gt;키보드 접근 불가&lt;/li&gt;
&lt;li data-end=&quot;781&quot; data-start=&quot;767&quot;&gt;스크린리더 인식 어려움&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;792&quot; data-start=&quot;783&quot; data-ke-size=&quot;size16&quot;&gt;문제가 발생한다.&lt;/p&gt;
&lt;div&gt;&lt;center&gt;&lt;/center&gt;
&lt;div&gt;
&lt;script src=&quot;https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-8033755675470956&quot;&gt;&lt;/script&gt;
&lt;!-- display 수 --&gt; &lt;ins class=&quot;adsbygoogle&quot; style=&quot;display: block;&quot; data-ad-client=&quot;ca-pub-8033755675470956&quot; data-ad-slot=&quot;6883997418&quot; data-ad-format=&quot;auto&quot; data-full-width-responsive=&quot;true&quot;&gt;&lt;/ins&gt;
&lt;script&gt;        (adsbygoogle = window.adsbygoogle || []).push({});    &lt;/script&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3 data-end=&quot;816&quot; data-start=&quot;799&quot; data-ke-size=&quot;size23&quot;&gt;2. 링크와 버튼을 구분하기&lt;/h3&gt;
&lt;p data-end=&quot;836&quot; data-start=&quot;818&quot; data-ke-size=&quot;size16&quot;&gt;실무에서 많이 헷갈리는 부분이다.&lt;/p&gt;
&lt;div&gt;
&lt;p data-end=&quot;912&quot; data-start=&quot;906&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;버튼&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;pre id=&quot;code_1772693561157&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!-- HTMl --&amp;gt;

&amp;lt;button type=&quot;submit&quot;&amp;gt;저장&amp;lt;/button&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;967&quot; data-start=&quot;961&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;링크&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1772693579816&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!-- HTML --&amp;gt;

&amp;lt;a href=&quot;/list&quot;&amp;gt;목록 보기&amp;lt;/a&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;1037&quot; data-start=&quot;1008&quot; data-ke-size=&quot;size16&quot;&gt;페이지 이동은 a&lt;br /&gt;기능 실행은 button&lt;/p&gt;
&lt;p data-end=&quot;1050&quot; data-start=&quot;1039&quot; data-ke-size=&quot;size16&quot;&gt;으로 구분해야 한다.&lt;/p&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-end=&quot;1076&quot; data-start=&quot;1057&quot; data-ke-size=&quot;size23&quot;&gt;3. 아이콘 버튼에는 설명 제공&lt;/h3&gt;
&lt;p data-end=&quot;1101&quot; data-start=&quot;1078&quot; data-ke-size=&quot;size16&quot;&gt;아이콘만 있는 버튼은 의미를 알기 어렵다.&lt;/p&gt;
&lt;p data-end=&quot;1123&quot; data-start=&quot;1103&quot; data-ke-size=&quot;size16&quot;&gt;예를 들어 검색 버튼이 있다고 하자.&lt;/p&gt;
&lt;p data-end=&quot;1138&quot; data-start=&quot;1125&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;1138&quot; data-start=&quot;1125&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;접근성 없는 코드&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1772693642799&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!-- HTML --&amp;gt;

&amp;lt;button&amp;gt;
  &amp;lt;span class=&quot;icon-search&quot;&amp;gt;&amp;lt;/span&amp;gt;
&amp;lt;/button&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-end=&quot;1138&quot; data-start=&quot;1125&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;1138&quot; data-start=&quot;1125&quot; data-ke-size=&quot;size16&quot;&gt;스크린리더는 버튼의 의미를 알 수 없다.&lt;/p&gt;
&lt;p data-end=&quot;1138&quot; data-start=&quot;1125&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;1138&quot; data-start=&quot;1125&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; 접근성 있는 코드 &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1772693675816&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!-- HTML --&amp;gt;

&amp;lt;button aria-label=&quot;검색&quot;&amp;gt;
  &amp;lt;span class=&quot;icon-search&quot;&amp;gt;&amp;lt;/span&amp;gt;
&amp;lt;/button&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-end=&quot;1138&quot; data-start=&quot;1125&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;1138&quot; data-start=&quot;1125&quot; data-ke-size=&quot;size16&quot;&gt;또는&lt;/p&gt;
&lt;pre id=&quot;code_1772693690298&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!-- HTML --&amp;gt;

&amp;lt;button&amp;gt;
  &amp;lt;span class=&quot;icon-search&quot;&amp;gt;&amp;lt;/span&amp;gt;
  &amp;lt;span class=&quot;sr-only&quot;&amp;gt;검색&amp;lt;/span&amp;gt;
&amp;lt;/button&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-end=&quot;1138&quot; data-start=&quot;1125&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;center&gt;
&lt;script src=&quot;https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-8033755675470956&quot;&gt;&lt;/script&gt;
&lt;!-- (디플/반응형) Lab --&gt; &lt;ins class=&quot;adsbygoogle&quot; style=&quot;display: block;&quot; data-ad-client=&quot;ca-pub-8033755675470956&quot; data-ad-slot=&quot;4076574202&quot; data-ad-format=&quot;auto&quot; data-full-width-responsive=&quot;true&quot;&gt;&lt;/ins&gt;
&lt;script&gt;     (adsbygoogle = window.adsbygoogle || []).push({});&lt;/script&gt;
&lt;/center&gt;&lt;/div&gt;
&lt;h3 data-end=&quot;1467&quot; data-start=&quot;1447&quot; data-ke-size=&quot;size23&quot;&gt;4. 버튼 텍스트는 명확하게 작성&lt;/h3&gt;
&lt;p data-end=&quot;1490&quot; data-start=&quot;1469&quot; data-ke-size=&quot;size16&quot;&gt;다음과 같은 버튼 텍스트는 좋지 않다.&lt;/p&gt;
&lt;p data-end=&quot;1510&quot; data-start=&quot;1492&quot; data-ke-size=&quot;size16&quot;&gt;❌ 확인&lt;br /&gt;❌ 실행&lt;br /&gt;❌ 클릭&lt;/p&gt;
&lt;p data-end=&quot;1514&quot; data-start=&quot;1512&quot; data-ke-size=&quot;size16&quot;&gt;대신&lt;/p&gt;
&lt;p data-end=&quot;1542&quot; data-start=&quot;1516&quot; data-ke-size=&quot;size16&quot;&gt;⭕ 회원가입&lt;br /&gt;⭕ 검색&lt;br /&gt;⭕ 게시글 등록&lt;/p&gt;
&lt;p data-end=&quot;1571&quot; data-start=&quot;1544&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;1571&quot; data-start=&quot;1544&quot; data-ke-size=&quot;size16&quot;&gt;처럼 &lt;b&gt;버튼 역할이 명확하게 드러나야 한다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-end=&quot;1571&quot; data-start=&quot;1544&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-end=&quot;1597&quot; data-start=&quot;1578&quot; data-ke-size=&quot;size23&quot;&gt;5. 키보드 포커스 스타일 제공&lt;/h3&gt;
&lt;p data-end=&quot;1635&quot; data-start=&quot;1599&quot; data-ke-size=&quot;size16&quot;&gt;키보드 사용자는 &lt;b&gt;포커스 표시&lt;/b&gt;를 통해 현재 위치를 확인한다.&lt;/p&gt;
&lt;pre id=&quot;code_1772693752557&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;/* CSS */

button:focus {
  outline: 2px solid #2a7de1;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-end=&quot;1635&quot; data-start=&quot;1599&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;1635&quot; data-start=&quot;1599&quot; data-ke-size=&quot;size16&quot;&gt;포커스를 제거하는 코드는 좋지 않다.&lt;/p&gt;
&lt;pre id=&quot;code_1772693767755&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;/* CSS */

outline: none;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-end=&quot;1635&quot; data-start=&quot;1599&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;1635&quot; data-start=&quot;1599&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-end=&quot;1798&quot; data-start=&quot;1780&quot; data-ke-size=&quot;size23&quot;&gt;6. 버튼 크기는 충분히 크게&lt;/h3&gt;
&lt;p data-end=&quot;1826&quot; data-start=&quot;1800&quot; data-ke-size=&quot;size16&quot;&gt;접근성 기준에서는 &lt;b&gt;터치 영역&lt;/b&gt;도 중요하다.&lt;/p&gt;
&lt;p data-end=&quot;1850&quot; data-start=&quot;1828&quot; data-ke-size=&quot;size16&quot;&gt;모바일에서는 최소 다음 크기를 권장한다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1865&quot; data-start=&quot;1852&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1865&quot; data-start=&quot;1852&quot;&gt;&lt;b&gt;44px 이상&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1772693794648&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;/* CSS */

button {
  min-height: 44px;
  padding: 10px 16px;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-end=&quot;1635&quot; data-start=&quot;1599&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-end=&quot;1956&quot; data-start=&quot;1937&quot; data-ke-size=&quot;size23&quot;&gt;7. disabled 상태 제공&lt;/h3&gt;
&lt;p data-end=&quot;1986&quot; data-start=&quot;1958&quot; data-ke-size=&quot;size16&quot;&gt;버튼이 비활성 상태라면&lt;br /&gt;명확하게 표시해야 한다.&lt;/p&gt;
&lt;pre id=&quot;code_1772693819260&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!-- HTML --&amp;gt;

&amp;lt;button disabled&amp;gt;
  저장
&amp;lt;/button&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-end=&quot;1635&quot; data-start=&quot;1599&quot; data-ke-size=&quot;size16&quot;&gt;스크린리더는 버튼이 비활성 상태임을 인식할 수 있다.&lt;/p&gt;
&lt;p data-end=&quot;1635&quot; data-start=&quot;1599&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;1635&quot; data-start=&quot;1599&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-end=&quot;2088&quot; data-start=&quot;2070&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;접근성 좋은 버튼 마크업 예시&lt;/b&gt;&lt;/h3&gt;
&lt;p data-end=&quot;2107&quot; data-start=&quot;2090&quot; data-ke-size=&quot;size16&quot;&gt;실무에서 많이 사용하는 구조다.&lt;/p&gt;
&lt;pre id=&quot;code_1772693853381&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!-- HTML --&amp;gt;

&amp;lt;button class=&quot;btn btn-primary&quot;&amp;gt;
  &amp;lt;span class=&quot;icon-search&quot; aria-hidden=&quot;true&quot;&amp;gt;&amp;lt;/span&amp;gt;
  &amp;lt;span class=&quot;btn-text&quot;&amp;gt;검색&amp;lt;/span&amp;gt;
&amp;lt;/button&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-end=&quot;1635&quot; data-start=&quot;1599&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;1635&quot; data-start=&quot;1599&quot; data-ke-size=&quot;size16&quot;&gt;아이콘은&lt;b&gt; aria-hidden=&quot;true&quot;&amp;nbsp;&lt;/b&gt; 를 사용해 스크린리더에서 제외할 수 있다.&lt;/p&gt;
&lt;p data-end=&quot;1635&quot; data-start=&quot;1599&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;h3 data-end=&quot;2327&quot; data-start=&quot;2323&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;정리&lt;/span&gt;&lt;/h3&gt;
&lt;p data-end=&quot;2363&quot; data-start=&quot;2329&quot; data-ke-size=&quot;size16&quot;&gt;접근성 좋은 버튼 마크업을 위해서는 다음 기준을 지켜야 한다.&lt;/p&gt;
&lt;p data-end=&quot;2363&quot; data-start=&quot;2329&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;2489&quot; data-start=&quot;2365&quot; data-ke-size=&quot;size16&quot;&gt;1. button 태그 사용&lt;br /&gt;2. 링크와 버튼 구분&lt;br /&gt;3. 아이콘 버튼 설명 제공&lt;br /&gt;4. 명확한 버튼 텍스트&lt;br /&gt;5. 포커스 스타일 제공&lt;br /&gt;6. 충분한 버튼 크기&lt;br /&gt;7. disabled 상태 제공&lt;/p&gt;
&lt;p data-end=&quot;2519&quot; data-start=&quot;2491&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;2519&quot; data-start=&quot;2491&quot; data-ke-size=&quot;size16&quot;&gt;이 기본 원칙만 지켜도 접근성이 크게 개선된다.&lt;/p&gt;
&lt;p data-end=&quot;2519&quot; data-start=&quot;2491&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;2519&quot; data-start=&quot;2491&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>퍼블리싱 로그/웹접근성</category>
      <category>a11y</category>
      <category>HTMLCSS</category>
      <category>웹접근성</category>
      <category>웹접근성가이드</category>
      <category>웹퍼블리셔</category>
      <category>접근성마크업</category>
      <category>접근성버튼</category>
      <category>퍼블리싱실무</category>
      <author>DDODDO_LAB</author>
      <guid isPermaLink="true">https://ok-ddoddo.tistory.com/111</guid>
      <comments>https://ok-ddoddo.tistory.com/111#entry111comment</comments>
      <pubDate>Sat, 7 Mar 2026 10:59:58 +0900</pubDate>
    </item>
    <item>
      <title>웹 접근성 체크리스트 10가지</title>
      <link>https://ok-ddoddo.tistory.com/110</link>
      <description>&lt;h2 data-end=&quot;139&quot; data-start=&quot;123&quot; data-ke-size=&quot;size26&quot;&gt;퍼블리셔 실무 기준 정리&lt;/h2&gt;
&lt;p data-end=&quot;210&quot; data-start=&quot;141&quot; data-ke-size=&quot;size16&quot;&gt;웹 접근성(A11Y)은 장애가 있는 사용자뿐만 아니라&lt;br /&gt;모든 사용자가 웹을 편하게 이용할 수 있도록 만드는 중요한 요소다.&lt;/p&gt;
&lt;p data-end=&quot;210&quot; data-start=&quot;141&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;266&quot; data-start=&quot;212&quot; data-ke-size=&quot;size16&quot;&gt;특히 공공기관이나 서비스 사이트에서는 &lt;b&gt;웹 접근성 준수 여부가 매우 중요한 기준&lt;/b&gt;이 된다.&lt;/p&gt;
&lt;p data-end=&quot;266&quot; data-start=&quot;212&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;325&quot; data-start=&quot;268&quot; data-ke-size=&quot;size16&quot;&gt;이번 글에서는 퍼블리싱 실무에서 꼭 확인해야 할 &lt;b&gt;웹 접근성 체크리스트 10가지&lt;/b&gt;를 정리해보자.&lt;/p&gt;
&lt;div&gt;
&lt;script src=&quot;https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-8033755675470956&quot;&gt;&lt;/script&gt;
&lt;!-- display 수 --&gt; &lt;ins class=&quot;adsbygoogle&quot; style=&quot;display: block;&quot; data-ad-client=&quot;ca-pub-8033755675470956&quot; data-ad-slot=&quot;6883997418&quot; data-ad-format=&quot;auto&quot; data-full-width-responsive=&quot;true&quot;&gt;&lt;/ins&gt;
&lt;script&gt;        (adsbygoogle = window.adsbygoogle || []).push({});    &lt;/script&gt;
&lt;/div&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;웹접근성 체크 리스트.png&quot; data-origin-width=&quot;1536&quot; data-origin-height=&quot;1024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/X064o/dJMcaflramU/VsFpkxfkf84zjc50UeKtUk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/X064o/dJMcaflramU/VsFpkxfkf84zjc50UeKtUk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/X064o/dJMcaflramU/VsFpkxfkf84zjc50UeKtUk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FX064o%2FdJMcaflramU%2FVsFpkxfkf84zjc50UeKtUk%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;1536&quot; height=&quot;1024&quot; data-filename=&quot;웹접근성 체크 리스트.png&quot; data-origin-width=&quot;1536&quot; data-origin-height=&quot;1024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;center&gt;&lt;/center&gt;
&lt;div&gt;
&lt;script src=&quot;https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-8033755675470956&quot;&gt;&lt;/script&gt;
&lt;!-- display 수 --&gt; &lt;ins class=&quot;adsbygoogle&quot; style=&quot;display: block;&quot; data-ad-client=&quot;ca-pub-8033755675470956&quot; data-ad-slot=&quot;6883997418&quot; data-ad-format=&quot;auto&quot; data-full-width-responsive=&quot;true&quot;&gt;&lt;/ins&gt;
&lt;script&gt;        (adsbygoogle = window.adsbygoogle || []).push({});    &lt;/script&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3 data-end=&quot;354&quot; data-start=&quot;332&quot; data-ke-size=&quot;size23&quot;&gt;1. 이미지에는 대체 텍스트 제공하기&lt;/h3&gt;
&lt;p data-end=&quot;386&quot; data-start=&quot;356&quot; data-ke-size=&quot;size16&quot;&gt;이미지에는 반드시 &lt;b&gt;alt 속성&lt;/b&gt;을 제공해야 한다.&lt;/p&gt;
&lt;pre id=&quot;code_1772675066586&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!-- HTML --&amp;gt;

&amp;lt;img src=&quot;logo.png&quot; alt=&quot;회사 로고&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-end=&quot;481&quot; data-start=&quot;434&quot; data-ke-size=&quot;size16&quot;&gt;스크린리더 사용자는 이미지를 직접 볼 수 없기 때문에 &lt;b&gt;대체 텍스트&lt;/b&gt;가 중요하다.&lt;/p&gt;
&lt;p data-end=&quot;523&quot; data-start=&quot;483&quot; data-ke-size=&quot;size16&quot;&gt;✔ 의미 있는 이미지 &amp;rarr; alt 작성&lt;br /&gt;✔ 장식 이미지 &amp;rarr; alt=&quot;&quot;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-end=&quot;556&quot; data-start=&quot;530&quot; data-ke-size=&quot;size23&quot;&gt;2. 키보드로 모든 기능 사용 가능해야 한다&lt;/h3&gt;
&lt;p data-end=&quot;614&quot; data-start=&quot;558&quot; data-ke-size=&quot;size16&quot;&gt;마우스를 사용하지 못하는 사용자를 위해&lt;br /&gt;&lt;b&gt;키보드만으로도 모든 기능을 사용할 수 있어야 한다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-end=&quot;614&quot; data-start=&quot;558&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;631&quot; data-start=&quot;620&quot;&gt;TAB 이동 가능&lt;/li&gt;
&lt;li data-end=&quot;643&quot; data-start=&quot;632&quot;&gt;버튼 포커스 이동&lt;/li&gt;
&lt;li data-end=&quot;654&quot; data-start=&quot;644&quot;&gt;메뉴 조작 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;revenue_unit_wrap&quot;&gt;
  &lt;div class=&quot;revenue_unit_item adsense responsive&quot;&gt;
    &lt;div class=&quot;revenue_unit_info&quot;&gt;반응형&lt;/div&gt;
    &lt;script src=&quot;//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js&quot; async=&quot;async&quot;&gt;&lt;/script&gt;
    &lt;ins class=&quot;adsbygoogle&quot; style=&quot;display: block;&quot; data-ad-host=&quot;ca-host-pub-9691043933427338&quot; data-ad-client=&quot;ca-pub-8033755675470956&quot; data-ad-format=&quot;auto&quot;&gt;&lt;/ins&gt;
    &lt;script&gt;(adsbygoogle = window.adsbygoogle || []).push({});&lt;/script&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;h3 data-end=&quot;678&quot; data-start=&quot;661&quot; data-ke-size=&quot;size23&quot;&gt;3. 명확한 label 제공&lt;/h3&gt;
&lt;p data-end=&quot;716&quot; data-start=&quot;680&quot; data-ke-size=&quot;size16&quot;&gt;폼 입력 요소에는 반드시 &lt;b&gt;label 태그&lt;/b&gt;를 제공해야 한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1772675077717&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!-- HTML --&amp;gt;

&amp;lt;label for=&quot;email&quot;&amp;gt;이메일&amp;lt;/label&amp;gt;
&amp;lt;input id=&quot;email&quot; type=&quot;email&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;label이 없으면&lt;br /&gt;스크린리더 사용자는 입력 목적을 알기 어렵다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-end=&quot;858&quot; data-start=&quot;839&quot; data-ke-size=&quot;size23&quot;&gt;4. 아이콘 버튼에는 설명 제공&lt;/h3&gt;
&lt;p data-end=&quot;901&quot; data-start=&quot;860&quot; data-ke-size=&quot;size16&quot;&gt;아이콘만 있는 버튼은 의미를 알 수 없기 때문에&lt;br /&gt;설명을 제공해야 한다.&lt;/p&gt;
&lt;pre id=&quot;code_1772675085007&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!-- HTML --&amp;gt;

&amp;lt;button aria-label=&quot;검색&quot;&amp;gt;
  &amp;lt;span class=&quot;icon-search&quot;&amp;gt;&amp;lt;/span&amp;gt;
&amp;lt;/button&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_1772675092929&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!-- HTML --&amp;gt;

&amp;lt;button&amp;gt;
  &amp;lt;span class=&quot;icon-search&quot;&amp;gt;&amp;lt;/span&amp;gt;
  &amp;lt;span class=&quot;sr-only&quot;&amp;gt;검색&amp;lt;/span&amp;gt;
&amp;lt;/button&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;center&gt;
&lt;script src=&quot;https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-8033755675470956&quot;&gt;&lt;/script&gt;
&lt;!-- (디플/반응형) Lab --&gt; &lt;ins class=&quot;adsbygoogle&quot; style=&quot;display: block;&quot; data-ad-client=&quot;ca-pub-8033755675470956&quot; data-ad-slot=&quot;4076574202&quot; data-ad-format=&quot;auto&quot; data-full-width-responsive=&quot;true&quot;&gt;&lt;/ins&gt;
&lt;script&gt;     (adsbygoogle = window.adsbygoogle || []).push({});&lt;/script&gt;
&lt;/center&gt;&lt;/div&gt;
&lt;h3 data-end=&quot;1123&quot; data-start=&quot;1102&quot; data-ke-size=&quot;size23&quot;&gt;5. 색상만으로 정보 전달하지 않기&lt;/h3&gt;
&lt;p data-end=&quot;1165&quot; data-start=&quot;1125&quot; data-ke-size=&quot;size16&quot;&gt;색상만으로 정보를 전달하면&lt;br /&gt;색각 이상 사용자에게 문제가 될 수 있다.&lt;/p&gt;
&lt;p data-end=&quot;1165&quot; data-start=&quot;1125&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;1172&quot; data-start=&quot;1167&quot; data-ke-size=&quot;size16&quot;&gt;예를 들어&lt;/p&gt;
&lt;p data-end=&quot;1204&quot; data-start=&quot;1174&quot; data-ke-size=&quot;size16&quot;&gt;❌ 빨간색 = 오류&lt;br /&gt;⭕ 아이콘 + 텍스트 함께 제공&lt;/p&gt;
&lt;p data-end=&quot;1204&quot; data-start=&quot;1174&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-end=&quot;1227&quot; data-start=&quot;1211&quot; data-ke-size=&quot;size23&quot;&gt;6. 충분한 색 대비 유지&lt;/h3&gt;
&lt;p data-end=&quot;1264&quot; data-start=&quot;1229&quot; data-ke-size=&quot;size16&quot;&gt;텍스트와 배경 사이에는&lt;br /&gt;충분한 &lt;b&gt;명도 대비&lt;/b&gt;가 필요하다.&lt;/p&gt;
&lt;p data-end=&quot;1274&quot; data-start=&quot;1266&quot; data-ke-size=&quot;size16&quot;&gt;웹 접근성 기준&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1320&quot; data-start=&quot;1276&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1299&quot; data-start=&quot;1276&quot;&gt;일반 텍스트 &amp;rarr; &lt;b&gt;4.5:1 이상&lt;/b&gt;&lt;/li&gt;
&lt;li data-end=&quot;1320&quot; data-start=&quot;1300&quot;&gt;큰 텍스트 &amp;rarr; &lt;b&gt;3:1 이상&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;1347&quot; data-start=&quot;1322&quot; data-ke-size=&quot;size16&quot;&gt;색 대비 확인은 다음 도구로 확인할 수 있다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1392&quot; data-start=&quot;1349&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1374&quot; data-start=&quot;1349&quot;&gt;WebAIM Contrast Checker&lt;/li&gt;
&lt;li data-end=&quot;1392&quot; data-start=&quot;1375&quot;&gt;Chrome DevTools&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-end=&quot;1422&quot; data-start=&quot;1399&quot; data-ke-size=&quot;size23&quot;&gt;7. heading 구조 올바르게 사용&lt;/h3&gt;
&lt;p data-end=&quot;1456&quot; data-start=&quot;1424&quot; data-ke-size=&quot;size16&quot;&gt;페이지 구조는 &lt;b&gt;heading 태그&lt;/b&gt;로 구성해야 한다.&lt;/p&gt;
&lt;pre id=&quot;code_1772675096148&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!-- HTML --&amp;gt;

&amp;lt;h1&amp;gt;페이지 제목&amp;lt;/h1&amp;gt;
&amp;lt;h2&amp;gt;섹션 제목&amp;lt;/h2&amp;gt;
&amp;lt;h3&amp;gt;세부 제목&amp;lt;/h3&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_1772675101342&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!-- HTML --&amp;gt;

&amp;lt;h1&amp;gt;
&amp;lt;h4&amp;gt;
&amp;lt;h2&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 순서가 깨지면&lt;br /&gt;스크린리더 사용자가 구조를 이해하기 어렵다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;center&gt;
&lt;script src=&quot;https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-8033755675470956&quot;&gt;&lt;/script&gt;
&lt;!-- (디플/반응형) Lab --&gt; &lt;ins class=&quot;adsbygoogle&quot; style=&quot;display: block;&quot; data-ad-client=&quot;ca-pub-8033755675470956&quot; data-ad-slot=&quot;4076574202&quot; data-ad-format=&quot;auto&quot; data-full-width-responsive=&quot;true&quot;&gt;&lt;/ins&gt;
&lt;script&gt;     (adsbygoogle = window.adsbygoogle || []).push({});&lt;/script&gt;
&lt;/center&gt;&lt;/div&gt;
&lt;h3 data-end=&quot;1618&quot; data-start=&quot;1598&quot; data-ke-size=&quot;size23&quot;&gt;8. 링크 텍스트는 명확하게 작성&lt;/h3&gt;
&lt;p data-end=&quot;1637&quot; data-start=&quot;1620&quot; data-ke-size=&quot;size16&quot;&gt;다음과 같은 링크는 좋지 않다.&lt;/p&gt;
&lt;p data-end=&quot;1654&quot; data-start=&quot;1639&quot; data-ke-size=&quot;size16&quot;&gt;❌ 자세히 보기&lt;br /&gt;❌ 클릭&lt;/p&gt;
&lt;p data-end=&quot;1658&quot; data-start=&quot;1656&quot; data-ke-size=&quot;size16&quot;&gt;대신&lt;/p&gt;
&lt;p data-end=&quot;1692&quot; data-start=&quot;1660&quot; data-ke-size=&quot;size16&quot;&gt;⭕ 웹 접근성 가이드 보기&lt;br /&gt;⭕ 퍼블리싱 체크리스트 확인&lt;/p&gt;
&lt;p data-end=&quot;1725&quot; data-start=&quot;1694&quot; data-ke-size=&quot;size16&quot;&gt;처럼 &lt;b&gt;목적을 알 수 있는 텍스트&lt;/b&gt;를 사용해야 한다.&lt;/p&gt;
&lt;p data-end=&quot;1725&quot; data-start=&quot;1694&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;1725&quot; data-start=&quot;1694&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-end=&quot;1748&quot; data-start=&quot;1732&quot; data-ke-size=&quot;size23&quot;&gt;9. 테이블에는 제목 제공&lt;/h3&gt;
&lt;p data-end=&quot;1779&quot; data-start=&quot;1750&quot; data-ke-size=&quot;size16&quot;&gt;데이터 테이블에는 &lt;b&gt;th 태그&lt;/b&gt;를 사용해야 한다.&lt;/p&gt;
&lt;pre id=&quot;code_1772675106118&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!-- HTML --&amp;gt;

&amp;lt;table&amp;gt;
  &amp;lt;thead&amp;gt;
    &amp;lt;tr&amp;gt;
      &amp;lt;th&amp;gt;이름&amp;lt;/th&amp;gt;
      &amp;lt;th&amp;gt;나이&amp;lt;/th&amp;gt;
    &amp;lt;/tr&amp;gt;
  &amp;lt;/thead&amp;gt;
&amp;lt;/table&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;br /&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;h3 data-end=&quot;1941&quot; data-start=&quot;1924&quot; data-ke-size=&quot;size23&quot;&gt;10. 스킵 네비게이션 제공&lt;/h3&gt;
&lt;p data-end=&quot;1979&quot; data-start=&quot;1943&quot; data-ke-size=&quot;size16&quot;&gt;페이지 상단에는 &lt;b&gt;본문 바로가기 링크&lt;/b&gt;를 제공하는 것이 좋다.&lt;/p&gt;
&lt;pre id=&quot;code_1772675464857&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!-- HTML --&amp;gt;

&amp;lt;a href=&quot;#content&quot; class=&quot;skip-link&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;키보드 사용자들은&lt;br /&gt;메뉴를 반복해서 지나가지 않고&lt;br /&gt;바로 콘텐츠로 이동할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;h3 data-end=&quot;2106&quot; data-start=&quot;2102&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;정리&lt;/span&gt;&lt;/h3&gt;
&lt;p data-end=&quot;2160&quot; data-start=&quot;2108&quot; data-ke-size=&quot;size16&quot;&gt;웹 접근성은 복잡한 기술이 아니라&lt;br /&gt;&lt;b&gt;기본적인 퍼블리싱 원칙을 지키는 것&lt;/b&gt;에서 시작한다.&lt;/p&gt;
&lt;p data-end=&quot;2160&quot; data-start=&quot;2108&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;2197&quot; data-start=&quot;2162&quot; data-ke-size=&quot;size16&quot;&gt;퍼블리싱 실무에서 반드시 확인해야 할 체크리스트는 다음과 같다.&lt;/p&gt;
&lt;p data-end=&quot;2197&quot; data-start=&quot;2162&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;2364&quot; data-start=&quot;2199&quot; data-ke-size=&quot;size16&quot;&gt;1. 이미지 alt 제공&lt;br /&gt;2. 키보드 접근 가능&lt;br /&gt;3. label 제공&lt;br /&gt;4. 아이콘 버튼 설명&lt;br /&gt;5. 색상만으로 정보 전달 금지&lt;br /&gt;6. 충분한 색 대비&lt;br /&gt;7. 올바른 heading 구조&lt;br /&gt;8. 명확한 링크 텍스트&lt;br /&gt;9. 테이블 헤더 제공&lt;br /&gt;10 스킵 네비게이션&lt;/p&gt;
&lt;p data-end=&quot;2364&quot; data-start=&quot;2199&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;2402&quot; data-start=&quot;2366&quot; data-ke-size=&quot;size16&quot;&gt;이 기본 요소만 잘 지켜도 웹 접근성을 크게 개선할 수 있다.&lt;/p&gt;
&lt;p data-end=&quot;2402&quot; data-start=&quot;2366&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>퍼블리싱 로그/웹접근성</category>
      <category>a11y</category>
      <category>HTMLCSS</category>
      <category>웹접근성</category>
      <category>웹접근성체크리스트</category>
      <category>웹퍼블리셔</category>
      <category>접근성가이드</category>
      <category>접근성마크업</category>
      <category>퍼블리싱실무</category>
      <author>DDODDO_LAB</author>
      <guid isPermaLink="true">https://ok-ddoddo.tistory.com/110</guid>
      <comments>https://ok-ddoddo.tistory.com/110#entry110comment</comments>
      <pubDate>Fri, 6 Mar 2026 10:10:43 +0900</pubDate>
    </item>
    <item>
      <title>aria-label vs sr-only 차이</title>
      <link>https://ok-ddoddo.tistory.com/109</link>
      <description>&lt;h3 data-end=&quot;155&quot; data-start=&quot;133&quot; data-ke-size=&quot;size23&quot;&gt;웹 접근성에서 언제 사용해야 할까?&lt;/h3&gt;
&lt;p data-end=&quot;200&quot; data-start=&quot;157&quot; data-ke-size=&quot;size16&quot;&gt;웹 접근성을 고려한 퍼블리싱을 하다 보면 자주 등장하는 두 가지 방법이 있다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;228&quot; data-start=&quot;202&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;216&quot; data-start=&quot;202&quot;&gt;aria-label&lt;/li&gt;
&lt;li data-end=&quot;228&quot; data-start=&quot;217&quot;&gt;sr-only&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;center&gt;
&lt;script src=&quot;https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-8033755675470956&quot;&gt;&lt;/script&gt;
&lt;!-- (디플/반응형) Lab --&gt; &lt;ins class=&quot;adsbygoogle&quot; style=&quot;display: block;&quot; data-ad-client=&quot;ca-pub-8033755675470956&quot; data-ad-slot=&quot;4076574202&quot; data-ad-format=&quot;auto&quot; data-full-width-responsive=&quot;true&quot;&gt;&lt;/ins&gt;
&lt;script&gt;     (adsbygoogle = window.adsbygoogle || []).push({});&lt;/script&gt;
&lt;/center&gt;&lt;/div&gt;
&lt;p data-end=&quot;288&quot; data-start=&quot;230&quot; data-ke-size=&quot;size16&quot;&gt;둘 다 &lt;b&gt;스크린리더 사용자에게 정보를 전달하기 위한 방법&lt;/b&gt;이지만&lt;br /&gt;사용 목적과 상황은 조금 다르다.&lt;/p&gt;
&lt;p data-end=&quot;339&quot; data-start=&quot;290&quot; data-ke-size=&quot;size16&quot;&gt;실무에서 헷갈리기 쉬운 &lt;b&gt;aria-label vs sr-only 차이&lt;/b&gt;를 정리해보자.&lt;/p&gt;
&lt;p data-end=&quot;339&quot; data-start=&quot;290&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;sr-only 차이.png&quot; data-origin-width=&quot;1536&quot; data-origin-height=&quot;1024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bjMRhm/dJMcahwNQ9S/zGebsOUuvnEyKJe0V9l6KK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bjMRhm/dJMcahwNQ9S/zGebsOUuvnEyKJe0V9l6KK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bjMRhm/dJMcahwNQ9S/zGebsOUuvnEyKJe0V9l6KK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbjMRhm%2FdJMcahwNQ9S%2FzGebsOUuvnEyKJe0V9l6KK%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; alt=&quot;aria-label vs sr-only 차이&quot; loading=&quot;lazy&quot; width=&quot;1536&quot; height=&quot;1024&quot; data-filename=&quot;sr-only 차이.png&quot; data-origin-width=&quot;1536&quot; data-origin-height=&quot;1024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-end=&quot;339&quot; data-start=&quot;290&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-end=&quot;361&quot; data-start=&quot;346&quot; data-ke-size=&quot;size23&quot;&gt;aria-label이란?&lt;/h3&gt;
&lt;p data-end=&quot;429&quot; data-start=&quot;363&quot; data-ke-size=&quot;size16&quot;&gt;aria-label은 &lt;b&gt;ARIA 속성 중 하나&lt;/b&gt;로&lt;br /&gt;요소의 이름(라벨)을 스크린리더에게 제공하는 역할을 한다.&lt;/p&gt;
&lt;p data-end=&quot;455&quot; data-start=&quot;431&quot; data-ke-size=&quot;size16&quot;&gt;예를 들어 아이콘 버튼이 있다고 가정해보자.&lt;/p&gt;
&lt;p data-end=&quot;455&quot; data-start=&quot;431&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1772673692025&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!-- HTML --&amp;gt;

&amp;lt;button aria-label=&quot;검색&quot;&amp;gt;
  &amp;lt;span class=&quot;icon-search&quot;&amp;gt;&amp;lt;/span&amp;gt;
&amp;lt;/button&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-end=&quot;574&quot; data-start=&quot;541&quot; data-ke-size=&quot;size16&quot;&gt;화면에는 아이콘만 보이지만&lt;br /&gt;스크린리더는 다음처럼 읽는다.&lt;/p&gt;
&lt;blockquote data-end=&quot;585&quot; data-start=&quot;576&quot; data-ke-style=&quot;style2&quot;&gt;
&lt;p data-end=&quot;585&quot; data-start=&quot;578&quot; data-ke-size=&quot;size16&quot;&gt;&quot;검색 버튼&quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-end=&quot;602&quot; data-start=&quot;587&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;602&quot; data-start=&quot;587&quot; data-ke-size=&quot;size16&quot;&gt;즉 aria-label은&lt;/p&gt;
&lt;p data-end=&quot;639&quot; data-start=&quot;604&quot; data-ke-size=&quot;size16&quot;&gt;✔ 화면에 텍스트가 없어도&lt;br /&gt;✔ 스크린리더에 설명을 제공한다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;div&gt;&lt;center&gt;
&lt;script src=&quot;https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-8033755675470956&quot;&gt;&lt;/script&gt;
&lt;!-- (디플/반응형) Lab --&gt; &lt;ins class=&quot;adsbygoogle&quot; style=&quot;display: block;&quot; data-ad-client=&quot;ca-pub-8033755675470956&quot; data-ad-slot=&quot;4076574202&quot; data-ad-format=&quot;auto&quot; data-full-width-responsive=&quot;true&quot;&gt;&lt;/ins&gt;
&lt;script&gt;     (adsbygoogle = window.adsbygoogle || []).push({});&lt;/script&gt;
&lt;/center&gt;&lt;/div&gt;
&lt;h3 data-end=&quot;657&quot; data-start=&quot;646&quot; data-ke-size=&quot;size23&quot;&gt;sr-only란?&lt;/h3&gt;
&lt;p data-end=&quot;721&quot; data-start=&quot;659&quot; data-ke-size=&quot;size16&quot;&gt;sr-only는 CSS 패턴으로&lt;br /&gt;&lt;b&gt;화면에서는 보이지 않지만 스크린리더에서는 읽히는 텍스트&lt;/b&gt;를 만든다.&lt;/p&gt;
&lt;p data-end=&quot;721&quot; data-start=&quot;659&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1772673900045&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!-- HTML --&amp;gt;

&amp;lt;button&amp;gt;
  &amp;lt;span class=&quot;icon-search&quot;&amp;gt;&amp;lt;/span&amp;gt;
  &amp;lt;span class=&quot;sr-only&quot;&amp;gt;검색&amp;lt;/span&amp;gt;
&amp;lt;/button&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-end=&quot;833&quot; data-start=&quot;830&quot; data-ke-size=&quot;size16&quot;&gt;여기서&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;873&quot; data-start=&quot;835&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;850&quot; data-start=&quot;835&quot;&gt;화면에는 아이콘만 보이고&lt;/li&gt;
&lt;li data-end=&quot;873&quot; data-start=&quot;851&quot;&gt;스크린리더는 &quot;검색 버튼&quot;을 읽는다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;885&quot; data-start=&quot;875&quot; data-ke-size=&quot;size16&quot;&gt;즉 sr-only는&lt;/p&gt;
&lt;blockquote data-end=&quot;919&quot; data-start=&quot;887&quot; data-ke-style=&quot;style2&quot;&gt;
&lt;p data-end=&quot;919&quot; data-start=&quot;889&quot; data-ke-size=&quot;size16&quot;&gt;숨겨진 텍스트를 통해 접근성 정보를 제공하는 방식이다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;aria-label vs sr-only 차이&lt;/h3&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 136px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 16px;&quot;&gt;
&lt;td style=&quot;height: 16px;&quot;&gt;구분&lt;/td&gt;
&lt;td style=&quot;height: 16px;&quot;&gt;aria-label&lt;/td&gt;
&lt;td style=&quot;height: 16px;&quot;&gt;sr-only&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 22px;&quot;&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;방식&lt;/td&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;ARIA 속성&lt;/td&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;숨김 텍스트&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 22px;&quot;&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;실제 텍스트 존재&lt;/td&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;없음&lt;/td&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;있음&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 22px;&quot;&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;CSS 필요&lt;/td&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;없음&lt;/td&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;필요&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 22px;&quot;&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;SEO 텍스트&lt;/td&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;없음&lt;/td&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;있음&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 22px;&quot;&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;접근성 안정성&lt;/td&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;상황에 따라 다름&lt;/td&gt;
&lt;td style=&quot;height: 22px;&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;h3 data-end=&quot;1164&quot; data-start=&quot;1139&quot; data-ke-size=&quot;size23&quot;&gt;언제 aria-label을 사용해야 할까?&lt;/h3&gt;
&lt;p data-end=&quot;1200&quot; data-start=&quot;1166&quot; data-ke-size=&quot;size16&quot;&gt;다음 상황에서는 aria-label을 사용하는 것이 좋다.&lt;/p&gt;
&lt;p data-end=&quot;1200&quot; data-start=&quot;1166&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-end=&quot;1200&quot; data-start=&quot;1166&quot; data-ke-size=&quot;size20&quot;&gt;1. 아이콘 버튼&lt;/h4&gt;
&lt;pre id=&quot;code_1772674125984&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!-- HTML --&amp;gt;

&amp;lt;button aria-label=&quot;검색&quot;&amp;gt;
  &amp;lt;svg&amp;gt;...&amp;lt;/svg&amp;gt;
&amp;lt;/button&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;br /&gt;간단하게 접근성을 추가할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2. 추가 설명이 필요할 때&lt;/h4&gt;
&lt;pre id=&quot;code_1772674131224&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!-- HTML --&amp;gt;

&amp;lt;button aria-label=&quot;메뉴 열기&quot;&amp;gt;
  ☰
&amp;lt;/button&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;br /&gt;설명을 제공할 수 있다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-end=&quot;1460&quot; data-start=&quot;1438&quot; data-ke-size=&quot;size23&quot;&gt;언제 sr-only를 사용해야 할까?&lt;/h3&gt;
&lt;p data-end=&quot;1487&quot; data-start=&quot;1462&quot; data-ke-size=&quot;size16&quot;&gt;다음 상황에서는 sr-only가 더 좋다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1. 실제 텍스트가 필요한 경우&lt;/h4&gt;
&lt;pre id=&quot;code_1772674136764&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!-- HTML --&amp;gt;

&amp;lt;button&amp;gt;
  &amp;lt;span class=&quot;icon-search&quot;&amp;gt;&amp;lt;/span&amp;gt;
  &amp;lt;span class=&quot;sr-only&quot;&amp;gt;검색&amp;lt;/span&amp;gt;
&amp;lt;/button&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;텍스트가 실제 DOM에 존재하기 때문에&lt;br /&gt;접근성 도구에서도 더 안정적으로 인식된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2. 스킵 네비게이션&lt;/h4&gt;
&lt;pre id=&quot;code_1772674143337&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!-- HTML --&amp;gt;

&amp;lt;a href=&quot;#content&quot; class=&quot;sr-only&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;웹 접근성에서 중요한 패턴이다.&lt;/p&gt;
&lt;div class=&quot;revenue_unit_wrap&quot;&gt;
  &lt;div class=&quot;revenue_unit_item adsense responsive&quot;&gt;
    &lt;div class=&quot;revenue_unit_info&quot;&gt;반응형&lt;/div&gt;
    &lt;script src=&quot;//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js&quot; async=&quot;async&quot;&gt;&lt;/script&gt;
    &lt;ins class=&quot;adsbygoogle&quot; style=&quot;display: block;&quot; data-ad-host=&quot;ca-host-pub-9691043933427338&quot; data-ad-client=&quot;ca-pub-8033755675470956&quot; data-ad-format=&quot;auto&quot;&gt;&lt;/ins&gt;
    &lt;script&gt;(adsbygoogle = window.adsbygoogle || []).push({});&lt;/script&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;3. 추가 설명 제공&lt;/h4&gt;
&lt;pre id=&quot;code_1772674153534&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!-- HTML --&amp;gt;

&amp;lt;label&amp;gt;
  이메일
  &amp;lt;span class=&quot;sr-only&quot;&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;스크린리더 사용자에게&lt;br /&gt;추가 정보를 전달할 수 있다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-end=&quot;1928&quot; data-start=&quot;1906&quot; data-ke-size=&quot;size23&quot;&gt;실무에서는 무엇을 더 많이 사용할까?&lt;/h3&gt;
&lt;p data-end=&quot;1957&quot; data-start=&quot;1930&quot; data-ke-size=&quot;size16&quot;&gt;퍼블리싱 실무에서는 보통 다음 기준으로 사용한다.&lt;/p&gt;
&lt;p data-end=&quot;2041&quot; data-start=&quot;1959&quot; data-ke-size=&quot;size16&quot;&gt;✔ &lt;b&gt;아이콘 버튼 &amp;rarr; aria-label&lt;/b&gt;&lt;br /&gt;✔ &lt;b&gt;숨겨진 설명 텍스트 &amp;rarr; sr-only&lt;/b&gt;&lt;br /&gt;✔ &lt;b&gt;접근성 추가 설명 &amp;rarr; sr-only&lt;/b&gt;&lt;/p&gt;
&lt;p data-end=&quot;2044&quot; data-start=&quot;2043&quot; data-ke-size=&quot;size16&quot;&gt;즉&lt;/p&gt;
&lt;blockquote data-end=&quot;2095&quot; data-start=&quot;2046&quot; data-ke-style=&quot;style2&quot;&gt;
&lt;p data-end=&quot;2095&quot; data-start=&quot;2048&quot; data-ke-size=&quot;size16&quot;&gt;aria-label은 속성 기반 설명&lt;br /&gt;sr-only는 숨겨진 텍스트 기반 설명&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-end=&quot;2112&quot; data-start=&quot;2097&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;2112&quot; data-start=&quot;2097&quot; data-ke-size=&quot;size16&quot;&gt;이라고 보면 이해하기 쉽다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-end=&quot;2136&quot; data-start=&quot;2119&quot; data-ke-size=&quot;size23&quot;&gt;두 방법을 같이 써도 될까?&lt;/h3&gt;
&lt;p data-end=&quot;2168&quot; data-start=&quot;2138&quot; data-ke-size=&quot;size16&quot;&gt;일반적으로는 &lt;b&gt;둘 중 하나만 사용하는 것이 좋다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-end=&quot;2189&quot; data-start=&quot;2170&quot; data-ke-size=&quot;size16&quot;&gt;예를 들어 다음 코드는 좋지 않다.&lt;/p&gt;
&lt;p data-end=&quot;2189&quot; data-start=&quot;2170&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1772674401352&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!-- HTML --&amp;gt;

&amp;lt;button aria-label=&quot;검색&quot;&amp;gt;
  &amp;lt;span class=&quot;icon-search&quot;&amp;gt;&amp;lt;/span&amp;gt;
  &amp;lt;span class=&quot;sr-only&quot;&amp;gt;검색&amp;lt;/span&amp;gt;
&amp;lt;/button&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;b&gt;중복으로 읽을 가능성&lt;/b&gt;이 있기 때문이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;h1 data-end=&quot;2352&quot; data-start=&quot;2348&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;정리&lt;/span&gt;&lt;/h1&gt;
&lt;p data-end=&quot;2406&quot; data-start=&quot;2354&quot; data-ke-size=&quot;size16&quot;&gt;웹 접근성에서 aria-label과 sr-only는&lt;br /&gt;같은 목적이지만 방식이 다르다.&lt;/p&gt;
&lt;div&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 120px;&quot; border=&quot;1&quot; data-end=&quot;2532&quot; data-start=&quot;2408&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 16px;&quot;&gt;
&lt;td style=&quot;height: 16px; text-align: center; width: 45.7607%;&quot;&gt;상황&lt;/td&gt;
&lt;td style=&quot;height: 16px; text-align: center; width: 54.007%;&quot;&gt;추천방법&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 22px;&quot; data-end=&quot;2460&quot; data-start=&quot;2437&quot;&gt;
&lt;td style=&quot;height: 22px; width: 45.7607%;&quot; data-col-size=&quot;sm&quot; data-end=&quot;2446&quot; data-start=&quot;2437&quot;&gt;아이콘 버튼&lt;/td&gt;
&lt;td style=&quot;height: 22px; width: 54.007%;&quot; data-col-size=&quot;sm&quot; data-end=&quot;2460&quot; data-start=&quot;2446&quot;&gt;aria-label&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 22px;&quot; data-end=&quot;2481&quot; data-start=&quot;2461&quot;&gt;
&lt;td style=&quot;height: 22px; width: 45.7607%;&quot; data-col-size=&quot;sm&quot; data-end=&quot;2470&quot; data-start=&quot;2461&quot;&gt;숨겨진 설명&lt;/td&gt;
&lt;td style=&quot;height: 22px; width: 54.007%;&quot; data-col-size=&quot;sm&quot; data-end=&quot;2481&quot; data-start=&quot;2470&quot;&gt;sr-only&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 22px;&quot; data-end=&quot;2505&quot; data-start=&quot;2482&quot;&gt;
&lt;td style=&quot;height: 22px; width: 45.7607%;&quot; data-col-size=&quot;sm&quot; data-end=&quot;2494&quot; data-start=&quot;2482&quot;&gt;접근성 추가 정보&lt;/td&gt;
&lt;td style=&quot;height: 22px; width: 54.007%;&quot; data-col-size=&quot;sm&quot; data-end=&quot;2505&quot; data-start=&quot;2494&quot;&gt;sr-only&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 22px;&quot; data-end=&quot;2532&quot; data-start=&quot;2506&quot;&gt;
&lt;td style=&quot;height: 22px; width: 45.7607%;&quot; data-col-size=&quot;sm&quot; data-end=&quot;2518&quot; data-start=&quot;2506&quot;&gt;간단한 라벨 제공&lt;/td&gt;
&lt;td style=&quot;height: 22px; width: 54.007%;&quot; data-col-size=&quot;sm&quot; data-end=&quot;2532&quot; data-start=&quot;2518&quot;&gt;aria-label&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-end=&quot;2573&quot; data-start=&quot;2534&quot; data-ke-size=&quot;size16&quot;&gt;퍼블리싱 실무에서는&lt;br /&gt;두 방법을 상황에 맞게 사용하는 것이 중요하다.&lt;/p&gt;
&lt;p data-end=&quot;2573&quot; data-start=&quot;2534&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;2573&quot; data-start=&quot;2534&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;2573&quot; data-start=&quot;2534&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;sr-only 상용법.png&quot; data-origin-width=&quot;1536&quot; data-origin-height=&quot;1024&quot;&gt;&lt;a href=&quot;https://ok-ddoddo.tistory.com/108&quot; target=&quot;_blank&quot; title=&quot;sr-only 클래스 사용법&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cYs9K5/dJMcaaYJt8K/FMxAEPpnfZzSjpVWSMYkR0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcYs9K5%2FdJMcaaYJt8K%2FFMxAEPpnfZzSjpVWSMYkR0%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; alt=&quot;sr-only 클래스 사용법&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;400&quot; data-filename=&quot;sr-only 상용법.png&quot; data-origin-width=&quot;1536&quot; data-origin-height=&quot;1024&quot;/&gt;&lt;/a&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>퍼블리싱 로그/웹접근성</category>
      <category>a11y</category>
      <category>arialabel</category>
      <category>HTMLCSS</category>
      <category>sronly</category>
      <category>웹접근성</category>
      <category>웹퍼블리셔</category>
      <category>접근성마크업</category>
      <category>퍼블리싱실무</category>
      <author>DDODDO_LAB</author>
      <guid isPermaLink="true">https://ok-ddoddo.tistory.com/109</guid>
      <comments>https://ok-ddoddo.tistory.com/109#entry109comment</comments>
      <pubDate>Thu, 5 Mar 2026 14:35:47 +0900</pubDate>
    </item>
    <item>
      <title>sr-only 클래스 사용법</title>
      <link>https://ok-ddoddo.tistory.com/108</link>
      <description>&lt;h3 data-end=&quot;163&quot; data-start=&quot;138&quot; data-ke-size=&quot;size23&quot;&gt;웹 접근성을 위한 숨김 텍스트 처리 방법&lt;/h3&gt;
&lt;p data-end=&quot;230&quot; data-start=&quot;165&quot; data-ke-size=&quot;size16&quot;&gt;웹 퍼블리싱을 하다 보면 &lt;b&gt;화면에는 보이지 않지만 스크린리더에는 읽히도록 해야 하는 텍스트&lt;/b&gt;가 필요할 때가 있다.&lt;/p&gt;
&lt;p data-end=&quot;254&quot; data-start=&quot;232&quot; data-ke-size=&quot;size16&quot;&gt;대표적인 예가 바로 다음과 같은 경우다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;302&quot; data-start=&quot;256&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;267&quot; data-start=&quot;256&quot;&gt;아이콘 버튼 설명&lt;/li&gt;
&lt;li data-end=&quot;279&quot; data-start=&quot;268&quot;&gt;추가 설명 텍스트&lt;/li&gt;
&lt;li data-end=&quot;291&quot; data-start=&quot;280&quot;&gt;접근성 보조 문구&lt;/li&gt;
&lt;li data-end=&quot;302&quot; data-start=&quot;292&quot;&gt;스킵 네비게이션&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;339&quot; data-start=&quot;304&quot; data-ke-size=&quot;size16&quot;&gt;이럴 때 사용하는 것이 바로 &lt;b&gt;sr-only 클래스&lt;/b&gt;다.&lt;/p&gt;
&lt;p data-end=&quot;339&quot; data-start=&quot;304&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;sr-only 상용법.png&quot; data-origin-width=&quot;1536&quot; data-origin-height=&quot;1024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/URlxK/dJMcafThkGa/7sX87lUgWNp57ycx6yPFL0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/URlxK/dJMcafThkGa/7sX87lUgWNp57ycx6yPFL0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/URlxK/dJMcafThkGa/7sX87lUgWNp57ycx6yPFL0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FURlxK%2FdJMcafThkGa%2F7sX87lUgWNp57ycx6yPFL0%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;1536&quot; height=&quot;1024&quot; data-filename=&quot;sr-only 상용법.png&quot; data-origin-width=&quot;1536&quot; data-origin-height=&quot;1024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;div&gt;&lt;center&gt;
&lt;script src=&quot;https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-8033755675470956&quot;&gt;&lt;/script&gt;
&lt;!-- (디플/반응형) Lab --&gt; &lt;ins class=&quot;adsbygoogle&quot; style=&quot;display: block;&quot; data-ad-client=&quot;ca-pub-8033755675470956&quot; data-ad-slot=&quot;4076574202&quot; data-ad-format=&quot;auto&quot; data-full-width-responsive=&quot;true&quot;&gt;&lt;/ins&gt;
&lt;script&gt;     (adsbygoogle = window.adsbygoogle || []).push({});&lt;/script&gt;
&lt;/center&gt;&lt;/div&gt;
&lt;h3 data-end=&quot;362&quot; data-start=&quot;346&quot; data-ke-size=&quot;size23&quot;&gt;sr-only란 무엇인가?&lt;/h3&gt;
&lt;p data-end=&quot;403&quot; data-start=&quot;364&quot; data-ke-size=&quot;size16&quot;&gt;sr-only는 &lt;b&gt;screen reader only&lt;/b&gt;의 약자다.&lt;/p&gt;
&lt;p data-end=&quot;407&quot; data-start=&quot;405&quot; data-ke-size=&quot;size16&quot;&gt;즉,&lt;/p&gt;
&lt;p data-end=&quot;445&quot; data-start=&quot;409&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-end=&quot;445&quot; data-start=&quot;411&quot; data-ke-style=&quot;style2&quot;&gt;화면에서는 보이지 않지만&lt;br /&gt;스크린리더에서는 읽히는 텍스트&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;465&quot; data-start=&quot;447&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;465&quot; data-start=&quot;447&quot; data-ke-size=&quot;size16&quot;&gt;를 만들기 위한 CSS 패턴이다.&lt;/p&gt;
&lt;p data-end=&quot;487&quot; data-start=&quot;467&quot; data-ke-size=&quot;size16&quot;&gt;예를 들어 이런 버튼이 있다고 하자.&lt;/p&gt;
&lt;pre id=&quot;code_1772672697015&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!-- HTML --&amp;gt;

&amp;lt;button&amp;gt;
  &amp;lt;span class=&quot;icon-search&quot;&amp;gt;&amp;lt;/span&amp;gt;
&amp;lt;/button&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-end=&quot;487&quot; data-start=&quot;467&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;588&quot; data-start=&quot;557&quot; data-ke-size=&quot;size16&quot;&gt;이 경우 스크린리더는 &lt;b&gt;버튼의 의미를 알 수 없다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-end=&quot;610&quot; data-start=&quot;590&quot; data-ke-size=&quot;size16&quot;&gt;그래서 보조 텍스트를 추가해야 한다.&lt;/p&gt;
&lt;pre id=&quot;code_1772672704498&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!-- HTML --&amp;gt;

&amp;lt;button&amp;gt;
  &amp;lt;span class=&quot;icon-search&quot;&amp;gt;&amp;lt;/span&amp;gt;
  &amp;lt;span class=&quot;sr-only&quot;&amp;gt;검색&amp;lt;/span&amp;gt;
&amp;lt;/button&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-end=&quot;720&quot; data-start=&quot;714&quot; data-ke-size=&quot;size16&quot;&gt;이렇게 하면&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;763&quot; data-start=&quot;722&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;737&quot; data-start=&quot;722&quot;&gt;화면에는 아이콘만 보이고&lt;/li&gt;
&lt;li data-end=&quot;763&quot; data-start=&quot;738&quot;&gt;스크린리더는 &lt;b&gt;검색 버튼&lt;/b&gt;으로 읽는다.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-end=&quot;786&quot; data-start=&quot;770&quot; data-ke-size=&quot;size23&quot;&gt;sr-only CSS 코드&lt;/h3&gt;
&lt;p data-end=&quot;811&quot; data-start=&quot;788&quot; data-ke-size=&quot;size16&quot;&gt;웹 접근성에서 많이 사용하는 기본 코드다.&lt;/p&gt;
&lt;pre id=&quot;code_1772672765577&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;/* CSS */

.sr-only {
  position: absolute;
  width: 1px;
  height: 1px;
  padding: 0;
  margin: -1px;
  overflow: hidden;
  clip: rect(0,0,0,0);
  white-space: nowrap;
  border: 0;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;1003&quot; data-start=&quot;998&quot; data-ke-size=&quot;size16&quot;&gt;이 코드는&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1042&quot; data-start=&quot;1005&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1021&quot; data-start=&quot;1005&quot;&gt;화면에서 보이지 않게 하고&lt;/li&gt;
&lt;li data-end=&quot;1042&quot; data-start=&quot;1022&quot;&gt;스크린리더에는 읽히도록 유지한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;div class=&quot;revenue_unit_wrap&quot;&gt;
  &lt;div class=&quot;revenue_unit_item adsense responsive&quot;&gt;
    &lt;div class=&quot;revenue_unit_info&quot;&gt;반응형&lt;/div&gt;
    &lt;script src=&quot;//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js&quot; async=&quot;async&quot;&gt;&lt;/script&gt;
    &lt;ins class=&quot;adsbygoogle&quot; style=&quot;display: block;&quot; data-ad-host=&quot;ca-host-pub-9691043933427338&quot; data-ad-client=&quot;ca-pub-8033755675470956&quot; data-ad-format=&quot;auto&quot;&gt;&lt;/ins&gt;
    &lt;script&gt;(adsbygoogle = window.adsbygoogle || []).push({});&lt;/script&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;sr-only 사용 예시&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1. 아이콘 버튼 접근성&lt;/h4&gt;
&lt;pre id=&quot;code_1772672819950&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!-- HTML --&amp;gt;

&amp;lt;button class=&quot;btn_search&quot;&amp;gt;
  &amp;lt;span class=&quot;icon-search&quot;&amp;gt;&amp;lt;/span&amp;gt;
  &amp;lt;span class=&quot;sr-only&quot;&amp;gt;검색&amp;lt;/span&amp;gt;
&amp;lt;/button&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;br /&gt;스크린리더에서 의미를 알 수 없기 때문에&lt;br /&gt;&lt;b&gt;보조 텍스트를 반드시 제공해야 한다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2. 추가 설명 제공&lt;/h4&gt;
&lt;pre id=&quot;code_1772672877709&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!-- HTML --&amp;gt;

&amp;lt;p&amp;gt;
  회원가입
  &amp;lt;span class=&quot;sr-only&quot;&amp;gt;필수 입력 항목&amp;lt;/span&amp;gt;
&amp;lt;/p&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;br /&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;3. 스킵 네비게이션&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;웹 접근성에서 중요한 패턴이다.&lt;/p&gt;
&lt;pre id=&quot;code_1772672945643&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!-- HTML --&amp;gt;

&amp;lt;a href=&quot;#content&quot; class=&quot;sr-only focusable&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;키보드 사용자는&lt;br /&gt;페이지 시작 시 바로 콘텐츠로 이동할 수 있다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;sr-only 사용 시 주의할 점&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1. display:none 사용하면 안 된다&lt;/h4&gt;
&lt;pre id=&quot;code_1772672950526&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;/* CSS */

display:none;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;1651&quot; data-start=&quot;1645&quot; data-ke-size=&quot;size16&quot;&gt;이렇게 하면&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1686&quot; data-start=&quot;1653&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1666&quot; data-start=&quot;1653&quot;&gt;화면에서도 안 보이고&lt;/li&gt;
&lt;li data-end=&quot;1686&quot; data-start=&quot;1667&quot;&gt;스크린리더에서도 읽히지 않는다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;1707&quot; data-start=&quot;1688&quot; data-ke-size=&quot;size16&quot;&gt;즉 &lt;b&gt;접근성 기능이 사라진다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-end=&quot;1707&quot; data-start=&quot;1688&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-end=&quot;1748&quot; data-start=&quot;1714&quot; data-ke-size=&quot;size20&quot;&gt;2. visibility:hidden도 사용하지 않는다&lt;/h4&gt;
&lt;p data-end=&quot;1771&quot; data-start=&quot;1750&quot; data-ke-size=&quot;size16&quot;&gt;이 역시 스크린리더에서 읽히지 않는다.&lt;/p&gt;
&lt;p data-end=&quot;1812&quot; data-start=&quot;1773&quot; data-ke-size=&quot;size16&quot;&gt;접근성 텍스트는 반드시&lt;br /&gt;&lt;b&gt;sr-only 패턴을 사용해야 한다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-end=&quot;1812&quot; data-start=&quot;1773&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-end=&quot;1843&quot; data-start=&quot;1819&quot; data-ke-size=&quot;size20&quot;&gt;3. 의미 없는 텍스트는 넣지 않는다&lt;/h4&gt;
&lt;p data-end=&quot;1867&quot; data-start=&quot;1845&quot; data-ke-size=&quot;size16&quot;&gt;다음처럼 의미 없는 텍스트는 좋지 않다.&lt;/p&gt;
&lt;pre id=&quot;code_1772673211930&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!-- HTML --&amp;gt;

&amp;lt;span class=&quot;sr-only&quot;&amp;gt;버튼&amp;lt;/span&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-end=&quot;1867&quot; data-start=&quot;1845&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;1867&quot; data-start=&quot;1845&quot; data-ke-size=&quot;size16&quot;&gt;대신&lt;/p&gt;
&lt;p data-end=&quot;1867&quot; data-start=&quot;1845&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1772673270940&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!-- HTML --&amp;gt;

&amp;lt;span class=&quot;sr-only&quot;&amp;gt;검색&amp;lt;/span&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;b&gt;명확한 역할을 설명&lt;/b&gt;해야 한다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-end=&quot;2024&quot; data-start=&quot;1993&quot; data-ke-size=&quot;size23&quot;&gt;sr-only 대신 aria-label을 써도 될까?&lt;/h3&gt;
&lt;p data-end=&quot;2067&quot; data-start=&quot;2026&quot; data-ke-size=&quot;size16&quot;&gt;아이콘 버튼 같은 경우&lt;br /&gt;aria-label을 사용하는 방법도 있다.&lt;/p&gt;
&lt;p data-end=&quot;2067&quot; data-start=&quot;2026&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1772673339133&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!-- HTML --&amp;gt;

&amp;lt;button aria-label=&quot;검색&quot;&amp;gt;
  &amp;lt;span class=&quot;icon-search&quot;&amp;gt;&amp;lt;/span&amp;gt;
&amp;lt;/button&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;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;방법&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;특징&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;aria-label&lt;/td&gt;
&lt;td&gt;속성으로 설명 제공&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;sr-only&lt;/td&gt;
&lt;td&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;br /&gt;&lt;b&gt;텍스트가 있는 것이 더 안정적인 경우가 많다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;h3 data-end=&quot;2310&quot; data-start=&quot;2306&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;정리&lt;/span&gt;&lt;/h3&gt;
&lt;p data-end=&quot;2320&quot; data-start=&quot;2312&quot; data-ke-size=&quot;size16&quot;&gt;sr-only는&lt;/p&gt;
&lt;blockquote data-end=&quot;2370&quot; data-start=&quot;2322&quot; data-ke-style=&quot;style2&quot;&gt;
&lt;p data-end=&quot;2370&quot; data-start=&quot;2324&quot; data-ke-size=&quot;size16&quot;&gt;화면에는 보이지 않지만&lt;br /&gt;스크린리더에게 정보를 전달하기 위한 CSS 패턴이다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-end=&quot;2388&quot; data-start=&quot;2372&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;2388&quot; data-start=&quot;2372&quot; data-ke-size=&quot;size16&quot;&gt;주로 다음 상황에서 사용한다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;2436&quot; data-start=&quot;2390&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;2401&quot; data-start=&quot;2390&quot;&gt;아이콘 버튼 설명&lt;/li&gt;
&lt;li data-end=&quot;2414&quot; data-start=&quot;2402&quot;&gt;접근성 보조 텍스트&lt;/li&gt;
&lt;li data-end=&quot;2425&quot; data-start=&quot;2415&quot;&gt;스킵 네비게이션&lt;/li&gt;
&lt;li data-end=&quot;2436&quot; data-start=&quot;2426&quot;&gt;추가 설명 제공&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;2483&quot; data-start=&quot;2438&quot; data-ke-size=&quot;size16&quot;&gt;웹 접근성을 고려한 퍼블리싱에서는&lt;br /&gt;&lt;b&gt;자주 사용하는 필수 패턴 중 하나다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-end=&quot;2483&quot; data-start=&quot;2438&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;2483&quot; data-start=&quot;2438&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;400&quot;&gt;&lt;a href=&quot;https://ok-ddoddo.tistory.com/109&quot; target=&quot;_blank&quot; title=&quot;aria-label vs sr-only 차이&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/SDHnv/dJMb99Mhbwh/2pirbbumOjtwMEEQubfSK0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FSDHnv%2FdJMb99Mhbwh%2F2pirbbumOjtwMEEQubfSK0%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; alt=&quot;aria-label vs sr-only 차이&quot; loading=&quot;lazy&quot; width=&quot;552&quot; height=&quot;368&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;400&quot;/&gt;&lt;/a&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-end=&quot;2483&quot; data-start=&quot;2438&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>퍼블리싱 로그/웹접근성</category>
      <category>a11y</category>
      <category>HTMLCSS</category>
      <category>sr-only</category>
      <category>웹접근성</category>
      <category>웹퍼블리셔</category>
      <category>접근성가이드</category>
      <category>접근성마크업</category>
      <category>퍼블리싱실무</category>
      <author>DDODDO_LAB</author>
      <guid isPermaLink="true">https://ok-ddoddo.tistory.com/108</guid>
      <comments>https://ok-ddoddo.tistory.com/108#entry108comment</comments>
      <pubDate>Thu, 5 Mar 2026 10:18:19 +0900</pubDate>
    </item>
    <item>
      <title>clamp vs Media Query</title>
      <link>https://ok-ddoddo.tistory.com/107</link>
      <description>&lt;h3 data-end=&quot;155&quot; data-start=&quot;133&quot; data-ke-size=&quot;size23&quot;&gt;반응형 설계에서 무엇을 써야 할까?&lt;/h3&gt;
&lt;p data-end=&quot;184&quot; data-start=&quot;157&quot; data-ke-size=&quot;size16&quot;&gt;반응형 작업을 하다 보면 한 번쯤 고민하게 된다.&lt;/p&gt;
&lt;blockquote data-end=&quot;228&quot; data-start=&quot;186&quot; data-ke-style=&quot;style2&quot;&gt;
&lt;p data-end=&quot;228&quot; data-start=&quot;188&quot; data-ke-size=&quot;size16&quot;&gt;&amp;ldquo;이거 clamp로 처리할까?&lt;br /&gt;아니면 미디어쿼리로 끊어야 할까?&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-end=&quot;324&quot; data-start=&quot;230&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;324&quot; data-start=&quot;230&quot; data-ke-size=&quot;size16&quot;&gt;특히 1920 시안 기반으로 작업하면서&lt;br /&gt;모바일 360, 태블릿 768, PC 1024 이상 대응해야 하는 프로젝트에서는&lt;br /&gt;이 선택이 코드 구조를 완전히 바꿔버린다.&lt;/p&gt;
&lt;p data-end=&quot;346&quot; data-start=&quot;326&quot; data-ke-size=&quot;size16&quot;&gt;오늘은 실무 기준으로 딱 정리해보자.&lt;/p&gt;
&lt;p data-end=&quot;346&quot; data-start=&quot;326&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;클림프 미디어쿼리.png&quot; data-origin-width=&quot;1536&quot; data-origin-height=&quot;1024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/FbeLV/dJMcagYUo1h/pkXwP1O0u4k6XpFCRTkU51/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/FbeLV/dJMcagYUo1h/pkXwP1O0u4k6XpFCRTkU51/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/FbeLV/dJMcagYUo1h/pkXwP1O0u4k6XpFCRTkU51/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFbeLV%2FdJMcagYUo1h%2FpkXwP1O0u4k6XpFCRTkU51%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;1536&quot; height=&quot;1024&quot; data-filename=&quot;클림프 미디어쿼리.png&quot; data-origin-width=&quot;1536&quot; data-origin-height=&quot;1024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-end=&quot;346&quot; data-start=&quot;326&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;346&quot; data-start=&quot;326&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-end=&quot;346&quot; data-start=&quot;326&quot; data-ke-size=&quot;size23&quot;&gt;1, clamp()는 무엇인가?&lt;/h3&gt;
&lt;pre id=&quot;code_1772413423636&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;/* CSS */

font-size: clamp(16px, 1vw, 24px);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-end=&quot;488&quot; data-start=&quot;463&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;488&quot; data-start=&quot;463&quot; data-ke-size=&quot;size16&quot;&gt;구조는 단순하다.&lt;/p&gt;
&lt;blockquote data-end=&quot;488&quot; data-start=&quot;463&quot; data-ke-style=&quot;style3&quot;&gt;코딩:&lt;br /&gt;clamp(최소값, 선호값, 최대값)&lt;/blockquote&gt;
&lt;p data-end=&quot;488&quot; data-start=&quot;463&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;488&quot; data-start=&quot;463&quot; data-ke-size=&quot;size16&quot;&gt;뷰포트에 따라 값이 &lt;b&gt;부드럽게 변화&lt;/b&gt;한다.&lt;/p&gt;
&lt;p data-end=&quot;527&quot; data-start=&quot;490&quot; data-ke-size=&quot;size16&quot;&gt;✔ 브레이크포인트 없이&lt;br /&gt;✔ 단계 없이&lt;br /&gt;✔ 자연스럽게 스케일링&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-end=&quot;527&quot; data-start=&quot;490&quot; data-ke-size=&quot;size23&quot;&gt;2. Media Query는 무엇인가?&lt;/h3&gt;
&lt;pre id=&quot;code_1772413493402&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;/* CSS */

font-size: 16px;

@media (min-width: 768px) {
  font-size: 20px;
}

@media (min-width: 1024px) {
  font-size: 24px;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;717&quot; data-start=&quot;690&quot; data-ke-size=&quot;size16&quot;&gt;화면 크기에 따라 &lt;b&gt;단계적으로 값이 바뀐다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-end=&quot;762&quot; data-start=&quot;719&quot; data-ke-size=&quot;size16&quot;&gt;✔ 명확한 구간 구분&lt;br /&gt;✔ 레이아웃 변경에 강함&lt;br /&gt;✔ 전통적인 반응형 방식&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-end=&quot;762&quot; data-start=&quot;719&quot; data-ke-size=&quot;size26&quot;&gt;3. 핵심 차이점 비교&lt;/h2&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 157px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;height: 21px; text-align: center;&quot;&gt;&lt;b&gt;구분&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 21px; text-align: center;&quot;&gt;&lt;b&gt;clamp()&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 21px; text-align: center;&quot;&gt;&lt;b&gt;media Query&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;변화 방식&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;연속적(부드러움)&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;단계적(점프)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;코드량&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;적음&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;많음&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;레이아웃 변경&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;❌ 부적합&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;✅ 적합&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;폰트/간격 조정&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;✅ 최적&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;가능&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;구조 변경&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;❌&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;유지보수&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;토큰화하면 좋음&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;구간 많으면 복잡&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;4. 언제 clamp를 써야 할까?&lt;/h3&gt;
&lt;h4 data-end=&quot;1051&quot; data-start=&quot;1033&quot; data-ke-size=&quot;size20&quot;&gt;✔ 이런 경우는 clamp&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1102&quot; data-start=&quot;1053&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1060&quot; data-start=&quot;1053&quot;&gt;폰트 크기&lt;/li&gt;
&lt;li data-end=&quot;1073&quot; data-start=&quot;1061&quot;&gt;카드 padding&lt;/li&gt;
&lt;li data-end=&quot;1084&quot; data-start=&quot;1074&quot;&gt;버튼 내부 여백&lt;/li&gt;
&lt;li data-end=&quot;1093&quot; data-start=&quot;1085&quot;&gt;아이콘 크기&lt;/li&gt;
&lt;li data-end=&quot;1102&quot; data-start=&quot;1094&quot;&gt;제목 스케일&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;1106&quot; data-start=&quot;1104&quot; data-ke-size=&quot;size16&quot;&gt;즉,&lt;/p&gt;
&lt;blockquote data-end=&quot;1135&quot; data-start=&quot;1108&quot; data-ke-style=&quot;style2&quot;&gt;
&lt;p data-end=&quot;1135&quot; data-start=&quot;1110&quot; data-ke-size=&quot;size16&quot;&gt;&quot;구조는 그대로 두고 크기만 자연스럽게 조정&quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-end=&quot;1152&quot; data-start=&quot;1137&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;1152&quot; data-start=&quot;1137&quot; data-ke-size=&quot;size16&quot;&gt;이게 clamp의 영역이다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-end=&quot;1185&quot; data-start=&quot;1159&quot; data-ke-size=&quot;size23&quot;&gt;5. 언제 Media Query가 맞을까?&lt;/h3&gt;
&lt;h4 data-end=&quot;1209&quot; data-start=&quot;1187&quot; data-ke-size=&quot;size20&quot;&gt;✔ 이런 경우는 무조건 미디어쿼리&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1274&quot; data-start=&quot;1211&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1223&quot; data-start=&quot;1211&quot;&gt;3열 &amp;rarr; 1열 변경&lt;/li&gt;
&lt;li data-end=&quot;1235&quot; data-start=&quot;1224&quot;&gt;GNB 구조 변경&lt;/li&gt;
&lt;li data-end=&quot;1250&quot; data-start=&quot;1236&quot;&gt;테이블 &amp;rarr; 카드형 변환&lt;/li&gt;
&lt;li data-end=&quot;1260&quot; data-start=&quot;1251&quot;&gt;사이드바 제거&lt;/li&gt;
&lt;li data-end=&quot;1274&quot; data-start=&quot;1261&quot;&gt;모바일 전용 레이아웃&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote data-end=&quot;1302&quot; data-start=&quot;1276&quot; data-ke-style=&quot;style2&quot;&gt;
&lt;p data-end=&quot;1302&quot; data-start=&quot;1278&quot; data-ke-size=&quot;size16&quot;&gt;구조가 바뀌는 순간은 clamp로 해결 불가&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-end=&quot;1330&quot; data-start=&quot;1309&quot; data-ke-size=&quot;size23&quot;&gt;6. 실무에서 가장 좋은 방식은?&lt;/h3&gt;
&lt;p data-end=&quot;1336&quot; data-start=&quot;1332&quot; data-ke-size=&quot;size16&quot;&gt;정답은:&lt;/p&gt;
&lt;p data-end=&quot;1349&quot; data-start=&quot;1338&quot; data-ke-size=&quot;size18&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;&lt;b&gt; 실전 예시 &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1772413683298&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;/* CSS */

/* 폰트는 clamp */
body {
  font-size: clamp(15px, 0.9vw, 18px);
}

/* 구조는 미디어쿼리 */
.layout {
  display: grid;
  grid-template-columns: 1fr;
}

@media (min-width: 1024px) {
  .layout {
    grid-template-columns: 250px 1fr;
  }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-end=&quot;1630&quot; data-start=&quot;1605&quot; data-ke-size=&quot;size16&quot;&gt;✔ 크기는 부드럽게&lt;br /&gt;✔ 구조는 명확하게&lt;/p&gt;
&lt;p data-end=&quot;1647&quot; data-start=&quot;1632&quot; data-ke-size=&quot;size16&quot;&gt;이 조합이 가장 안정적이다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-end=&quot;1674&quot; data-start=&quot;1654&quot; data-ke-size=&quot;size23&quot;&gt;7. 퍼블리셔 실무 기준 선택법&lt;/h3&gt;
&lt;h4 data-end=&quot;1697&quot; data-start=&quot;1676&quot; data-ke-size=&quot;size20&quot;&gt;  clamp를 과하게 쓰면?&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1742&quot; data-start=&quot;1698&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1715&quot; data-start=&quot;1698&quot;&gt;레이아웃 간격이 계속 흔들림&lt;/li&gt;
&lt;li data-end=&quot;1725&quot; data-start=&quot;1716&quot;&gt;정렬감 무너짐&lt;/li&gt;
&lt;li data-end=&quot;1742&quot; data-start=&quot;1726&quot;&gt;접근성 확대 시 깨짐 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-end=&quot;1765&quot; data-start=&quot;1744&quot; data-ke-size=&quot;size20&quot;&gt;  미디어쿼리를 과하게 쓰면?&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1796&quot; data-start=&quot;1766&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1773&quot; data-start=&quot;1766&quot;&gt;코드 폭증&lt;/li&gt;
&lt;li data-end=&quot;1783&quot; data-start=&quot;1774&quot;&gt;유지보수 지옥&lt;/li&gt;
&lt;li data-end=&quot;1796&quot; data-start=&quot;1784&quot;&gt;브레이크포인트 난립&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-end=&quot;1824&quot; data-start=&quot;1803&quot; data-ke-size=&quot;size23&quot;&gt;8. 공공/접근성 프로젝트에서는?&lt;/h3&gt;
&lt;p data-end=&quot;1842&quot; data-start=&quot;1826&quot; data-ke-size=&quot;size16&quot;&gt;특히 접근성 대응 사이트라면:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1889&quot; data-start=&quot;1844&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1857&quot; data-start=&quot;1844&quot;&gt;최소 폰트 크기 보장&lt;/li&gt;
&lt;li data-end=&quot;1871&quot; data-start=&quot;1858&quot;&gt;버튼 최소 높이 보장&lt;/li&gt;
&lt;li data-end=&quot;1889&quot; data-start=&quot;1872&quot;&gt;확대 시 레이아웃 깨짐 방지&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;1899&quot; data-start=&quot;1891&quot; data-ke-size=&quot;size16&quot;&gt;이 조건 때문에&lt;/p&gt;
&lt;blockquote data-end=&quot;1945&quot; data-start=&quot;1901&quot; data-ke-style=&quot;style2&quot;&gt;
&lt;p data-end=&quot;1945&quot; data-start=&quot;1903&quot; data-ke-size=&quot;size16&quot;&gt;구조는 명확하게 Media Query&lt;br /&gt;크기는 최소값 보장한 clamp&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-end=&quot;1961&quot; data-start=&quot;1947&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;1961&quot; data-start=&quot;1947&quot; data-ke-size=&quot;size16&quot;&gt;이 방식이 가장 안전하다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-end=&quot;1961&quot; data-start=&quot;1947&quot; data-ke-size=&quot;size23&quot;&gt;9. 한 줄 요약&lt;/h3&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 101px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;height: 17px; text-align: center;&quot;&gt;&lt;b&gt;상황&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 17px; text-align: center;&quot;&gt;&lt;b&gt;선택&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;크기 스케일&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;clamp&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;구조 변경&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;media query&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;공공기관 고도화&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;둘 다&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;디자인 시스템 구축&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;clamp + 토큰화&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;h3 data-end=&quot;2114&quot; data-start=&quot;2107&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;정리&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-end=&quot;2165&quot; data-start=&quot;2116&quot; data-ke-size=&quot;size16&quot;&gt;clamp는 미디어쿼리를 대체하는 기능이 아니다.&lt;br /&gt;미디어쿼리는 구시대 방식도 아니다.&lt;/p&gt;
&lt;p data-end=&quot;2185&quot; data-start=&quot;2167&quot; data-ke-size=&quot;size16&quot;&gt;둘은 서로 다른 문제를 해결한다.&lt;/p&gt;
&lt;blockquote data-end=&quot;2221&quot; data-start=&quot;2187&quot; data-ke-style=&quot;style2&quot;&gt;
&lt;p data-end=&quot;2221&quot; data-start=&quot;2189&quot; data-ke-size=&quot;size16&quot;&gt;구조는 Media Query&lt;br /&gt;스케일은 clamp&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-end=&quot;2242&quot; data-start=&quot;2223&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;2242&quot; data-start=&quot;2223&quot; data-ke-size=&quot;size16&quot;&gt;이 조합이 실무에서 가장 깔끔하다.&lt;/p&gt;
&lt;p data-end=&quot;2242&quot; data-start=&quot;2223&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;2242&quot; data-start=&quot;2223&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;clamp() 실문 적용시 주의할 점.png&quot; data-origin-width=&quot;1536&quot; data-origin-height=&quot;1024&quot;&gt;&lt;a href=&quot;https://ok-ddoddo.tistory.com/106&quot; target=&quot;_blank&quot; title=&quot;clamp() 실문 적용시 주의할 점&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cH9Qph/dJMcajagO5B/FhxjFrS1Q4IeOirvYFA83k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcH9Qph%2FdJMcajagO5B%2FFhxjFrS1Q4IeOirvYFA83k%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; alt=&quot;clamp() 실문 적용시 주의할 점&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;400&quot; data-filename=&quot;clamp() 실문 적용시 주의할 점.png&quot; data-origin-width=&quot;1536&quot; data-origin-height=&quot;1024&quot;/&gt;&lt;/a&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>반응형 설계 방법</category>
      <category>CLAMP</category>
      <category>clampvsm미어쿼리</category>
      <category>CSS비교</category>
      <category>CSS함수</category>
      <category>mediaquery</category>
      <category>vw단위</category>
      <category>반응형전략</category>
      <category>브레이크포인트</category>
      <category>유동스케일링</category>
      <category>접근성설계</category>
      <author>DDODDO_LAB</author>
      <guid isPermaLink="true">https://ok-ddoddo.tistory.com/107</guid>
      <comments>https://ok-ddoddo.tistory.com/107#entry107comment</comments>
      <pubDate>Tue, 3 Mar 2026 10:20:29 +0900</pubDate>
    </item>
    <item>
      <title>clamp() 실무 적용 시 주의할 점(반응형 설계 관점)</title>
      <link>https://ok-ddoddo.tistory.com/106</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;clamp() 실무 사용법&lt;/h3&gt;
&lt;p data-end=&quot;324&quot; data-start=&quot;177&quot; data-ke-size=&quot;size16&quot;&gt;반응형 작업을 하다 보면 &amp;ldquo;디자이너가 1920 시안을 줬는데 모바일도 대응해야 한다&amp;rdquo; 같은 상황이 흔하다.&lt;/p&gt;
&lt;p data-end=&quot;324&quot; data-start=&quot;177&quot; data-ke-size=&quot;size16&quot;&gt;이때 clamp()는 &lt;b&gt;최소값(min) ~ 최대값(max)&lt;/b&gt; 범위 안에서 &lt;b&gt;뷰포트에 따라 값이 유동적으로 변하게&lt;/b&gt; 만들어 주는 꽤 강력한 도구다.&lt;/p&gt;
&lt;p data-end=&quot;479&quot; data-start=&quot;326&quot; data-ke-size=&quot;size16&quot;&gt;하지만 실무에서는 clamp()를 &amp;ldquo;그냥 다 clamp로 바꾸면 반응형 끝&amp;rdquo;처럼 쓰면 문제가 생긴다.&lt;/p&gt;
&lt;p data-end=&quot;479&quot; data-start=&quot;326&quot; data-ke-size=&quot;size16&quot;&gt;특히 공공/접근성/다중 사이트 운영 같은 환경에서는 더 조심해야 한다.&lt;/p&gt;
&lt;p data-end=&quot;479&quot; data-start=&quot;326&quot; data-ke-size=&quot;size16&quot;&gt;아래 주의 포인트만 잡아도, clamp를 &amp;ldquo;편한 도구&amp;rdquo;에서 &amp;ldquo;안정적인 설계 도구&amp;rdquo;로 쓸 수 있다.&lt;/p&gt;
&lt;div&gt;
&lt;script src=&quot;https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-8033755675470956&quot;&gt;&lt;/script&gt;
&lt;!-- display 수 --&gt; &lt;ins class=&quot;adsbygoogle&quot; style=&quot;display: block;&quot; data-ad-client=&quot;ca-pub-8033755675470956&quot; data-ad-slot=&quot;6883997418&quot; data-ad-format=&quot;auto&quot; data-full-width-responsive=&quot;true&quot;&gt;&lt;/ins&gt;
&lt;script&gt;        (adsbygoogle = window.adsbygoogle || []).push({});    &lt;/script&gt;
&lt;/div&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;클램프 실무적용 주의점.png&quot; data-origin-width=&quot;1536&quot; data-origin-height=&quot;1024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/sY2En/dJMcaiWHr2D/JsdxrwWj58sLS7LrORiA40/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/sY2En/dJMcaiWHr2D/JsdxrwWj58sLS7LrORiA40/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/sY2En/dJMcaiWHr2D/JsdxrwWj58sLS7LrORiA40/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsY2En%2FdJMcaiWHr2D%2FJsdxrwWj58sLS7LrORiA40%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;1536&quot; height=&quot;1024&quot; data-filename=&quot;클램프 실무적용 주의점.png&quot; data-origin-width=&quot;1536&quot; data-origin-height=&quot;1024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-end=&quot;479&quot; data-start=&quot;326&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;479&quot; data-start=&quot;326&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-end=&quot;523&quot; data-start=&quot;486&quot; data-ke-size=&quot;size23&quot;&gt;1. clamp()는 &amp;lsquo;반응형&amp;rsquo;이 아니라 &amp;lsquo;유동 스케일링&amp;rsquo;이다&lt;/h3&gt;
&lt;p data-end=&quot;660&quot; data-start=&quot;525&quot; data-ke-size=&quot;size16&quot;&gt;clamp()는 브레이크포인트를 대체하는 만능이 아니다.&lt;br /&gt;브레이크포인트는 &lt;b&gt;레이아웃 구조가 바뀌는 순간&lt;/b&gt;(그리드 &amp;rarr; 1열, GNB 형태 변경 등)을 다루고, clamp()는 &lt;b&gt;구조는 유지한 채 크기만 매끄럽게 변하게&lt;/b&gt; 한다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;753&quot; data-start=&quot;662&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;704&quot; data-start=&quot;662&quot;&gt;레이아웃이 바뀌어야 하는 구간: 미디어쿼리(또는 컨테이너쿼리)가 더 적합&lt;/li&gt;
&lt;li data-end=&quot;753&quot; data-start=&quot;705&quot;&gt;폰트/간격/컴포넌트 크기처럼 &amp;ldquo;같은 구조에서 자연스러운 스케일&amp;rdquo;: clamp가 적합&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;812&quot; data-start=&quot;755&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;실무 팁:&lt;/b&gt;&lt;br /&gt;&amp;ldquo;구조 변경&amp;rdquo;과 &amp;ldquo;크기 스케일&amp;rdquo;을 분리하면 코드가 안정적이고 유지보수도 쉬워진다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-end=&quot;864&quot; data-start=&quot;819&quot; data-ke-size=&quot;size23&quot;&gt;2. min / preferred / max 값 순서를 반드시 검증해야 한다&lt;/h3&gt;
&lt;p data-end=&quot;911&quot; data-start=&quot;866&quot; data-ke-size=&quot;size16&quot;&gt;clamp(min, preferred, max)에서 가장 흔한 실수는 이거다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1016&quot; data-start=&quot;913&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;960&quot; data-start=&quot;913&quot;&gt;&lt;b&gt;min &amp;gt; max&lt;/b&gt;가 되는 순간, 의도와 다르게 고정되거나 이상하게 동작한다&lt;/li&gt;
&lt;li data-end=&quot;1016&quot; data-start=&quot;961&quot;&gt;preferred(가운데 값)가 계산상 min보다 작아지는 구간이 생기면 기대한 스케일이 깨진다&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;1042&quot; data-start=&quot;1018&quot; data-ke-size=&quot;size16&quot;&gt;예를 들어 이런 식으로 막 넣으면 위험하다:&lt;/p&gt;
&lt;pre id=&quot;code_1772412546834&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;/* CSS */

font-size: clamp(16px, 1vw, 14px); /* max가 더 작음 &amp;rarr; 설계 오류 */&lt;/code&gt;&lt;/pre&gt;
&lt;p data-end=&quot;1127&quot; data-start=&quot;1115&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;1127&quot; data-start=&quot;1115&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;실무 체크리스트&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1248&quot; data-start=&quot;1128&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1148&quot; data-start=&quot;1128&quot;&gt;min &amp;le; max 인지 먼저 확인&lt;/li&gt;
&lt;li data-end=&quot;1196&quot; data-start=&quot;1149&quot;&gt;preferred가 실제 뷰포트 범위에서 min~max 사이로 잘 들어오는지 확인&lt;/li&gt;
&lt;li data-end=&quot;1248&quot; data-start=&quot;1197&quot;&gt;&amp;ldquo;내가 잡은 최소/최대 뷰포트&amp;rdquo; 기준으로 테스트 (예: 320 / 1024 / 1920)&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;script src=&quot;https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-8033755675470956&quot;&gt;&lt;/script&gt;
&lt;!-- display 수 --&gt; &lt;ins class=&quot;adsbygoogle&quot; style=&quot;display: block;&quot; data-ad-client=&quot;ca-pub-8033755675470956&quot; data-ad-slot=&quot;6883997418&quot; data-ad-format=&quot;auto&quot; data-full-width-responsive=&quot;true&quot;&gt;&lt;/ins&gt;
&lt;script&gt;        (adsbygoogle = window.adsbygoogle || []).push({});    &lt;/script&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-end=&quot;1286&quot; data-start=&quot;1255&quot; data-ke-size=&quot;size23&quot;&gt;3. vw만 믿으면 초대형/초소형 화면에서 망가진다&lt;/h3&gt;
&lt;p data-end=&quot;1429&quot; data-start=&quot;1288&quot; data-ke-size=&quot;size16&quot;&gt;vw 기반은 화면이 커질수록 끝없이 커지려는 성질이 있다.&lt;br /&gt;그래서 clamp()가 필요한 건데, &lt;b&gt;max를 너무 크게 잡으면&lt;/b&gt; 4K/울트라와이드에서 글자&amp;middot;여백이 과해진다. 반대로 &lt;b&gt;min을 너무 작게 잡으면&lt;/b&gt; 접근성/가독성이 무너진다.&lt;/p&gt;
&lt;p data-end=&quot;1440&quot; data-start=&quot;1431&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;권장 접근&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1543&quot; data-start=&quot;1441&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1472&quot; data-start=&quot;1441&quot;&gt;폰트는 &amp;ldquo;읽기 가능한 최소치&amp;rdquo;를 먼저 정하고(min)&lt;/li&gt;
&lt;li data-end=&quot;1511&quot; data-start=&quot;1473&quot;&gt;큰 화면에서 &amp;ldquo;디자인이 커 보이지 않는 최대치&amp;rdquo;를 정한다(max)&lt;/li&gt;
&lt;li data-end=&quot;1543&quot; data-start=&quot;1512&quot;&gt;그 사이 스케일링은 preferred로 부드럽게 연결&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1772412584786&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;/* CSS */

/* 본문 텍스트 */
font-size: clamp(15px, 0.9vw, 18px);
line-height: 1.6;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-end=&quot;1678&quot; data-start=&quot;1633&quot; data-ke-size=&quot;size23&quot;&gt;4. 폰트에 clamp 쓰면 line-height를 같이 보지 않으면 깨진다&lt;/h3&gt;
&lt;p data-end=&quot;1698&quot; data-start=&quot;1680&quot; data-ke-size=&quot;size16&quot;&gt;폰트만 커지고 줄간격이 그대로면:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1753&quot; data-start=&quot;1699&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1724&quot; data-start=&quot;1699&quot;&gt;1024~1440 구간에서 답답해 보이거나&lt;/li&gt;
&lt;li data-end=&quot;1753&quot; data-start=&quot;1725&quot;&gt;라벨/버튼 텍스트가 세로로 잘리는 이슈가 생긴다&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;1767&quot; data-start=&quot;1755&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;실무 해결 방식&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1856&quot; data-start=&quot;1768&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1797&quot; data-start=&quot;1768&quot;&gt;텍스트 컴포넌트(본문/보조/타이틀) 단위로 묶어서&lt;/li&gt;
&lt;li data-end=&quot;1856&quot; data-start=&quot;1798&quot;&gt;font-size, line-height, letter-spacing까지 같이 세트로 본다&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1772412612641&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;/* CSS */

.txt-body {
  font-size: clamp(15px, 0.9vw, 18px);
  line-height: 1.6;
}

.txt-title {
  font-size: clamp(20px, 1.6vw, 28px);
  line-height: 1.25;
}&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-end=&quot;2079&quot; data-start=&quot;2027&quot; data-ke-size=&quot;size23&quot;&gt;5. padding/margin을 무작정 clamp로 바꾸면 &amp;ldquo;레이아웃 흔들림&amp;rdquo;이 생긴다&lt;/h3&gt;
&lt;p data-end=&quot;2169&quot; data-start=&quot;2081&quot; data-ke-size=&quot;size16&quot;&gt;간격까지 전부 유동으로 만들면 레이아웃이 부드럽게 변하는 게 아니라,&lt;br /&gt;디바이스 폭이 조금만 달라도 &lt;b&gt;요소 간 간격이 계속 바뀌어&lt;/b&gt; &amp;ldquo;정렬감&amp;rdquo;이 깨진다.&lt;/p&gt;
&lt;p data-end=&quot;2180&quot; data-start=&quot;2171&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;추천 전략&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;2284&quot; data-start=&quot;2181&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;2232&quot; data-start=&quot;2181&quot;&gt;핵심 레이아웃 간격(그리드 gap, 섹션 padding)은 &lt;b&gt;단계형(미디어쿼리)&lt;/b&gt; 로&lt;/li&gt;
&lt;li data-end=&quot;2284&quot; data-start=&quot;2233&quot;&gt;컴포넌트 내부 여백(버튼 padding, 카드 내부 padding)은 &lt;b&gt;clamp&lt;/b&gt;로&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1772412641182&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;/* CSS */

/* 섹션은 단계형 */
.section { padding: 24px; }
@media (min-width: 1024px) {
  .section { padding: 40px; }
}

/* 버튼 내부는 유동 */
.btn {
  padding: clamp(10px, 1.2vw, 14px) clamp(14px, 2vw, 20px);
}&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;div&gt;
&lt;script src=&quot;https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-8033755675470956&quot;&gt;&lt;/script&gt;
&lt;!-- display 수 --&gt; &lt;ins class=&quot;adsbygoogle&quot; style=&quot;display: block;&quot; data-ad-client=&quot;ca-pub-8033755675470956&quot; data-ad-slot=&quot;6883997418&quot; data-ad-format=&quot;auto&quot; data-full-width-responsive=&quot;true&quot;&gt;&lt;/ins&gt;
&lt;script&gt;        (adsbygoogle = window.adsbygoogle || []).push({});    &lt;/script&gt;
&lt;/div&gt;
&lt;h3 data-end=&quot;2534&quot; data-start=&quot;2495&quot; data-ke-size=&quot;size23&quot;&gt;6. 높이(height)에 clamp 쓰는 건 특히 조심해야 한다&lt;/h3&gt;
&lt;p data-end=&quot;2626&quot; data-start=&quot;2536&quot; data-ke-size=&quot;size16&quot;&gt;실무에서 &amp;ldquo;버튼 높이&amp;rdquo;, &amp;ldquo;인풋 높이&amp;rdquo;, &amp;ldquo;헤더 높이&amp;rdquo;에 clamp를 걸면&lt;br /&gt;텍스트 크기/줄바꿈/다국어(국문+영문) 상황에서 &lt;b&gt;세로 잘림&lt;/b&gt;이 생길 수 있다.&lt;/p&gt;
&lt;p data-end=&quot;2650&quot; data-start=&quot;2628&quot; data-ke-size=&quot;size16&quot;&gt;예를 들어 사용자가 예전에 말한 것처럼:&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1772412664717&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;/* CSS */

height: clamp(37px, 2.5vw, 72px);&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;2715&quot; data-start=&quot;2696&quot; data-ke-size=&quot;size16&quot;&gt;이런 스타일은 다음 리스크가 있다:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;2790&quot; data-start=&quot;2716&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;2735&quot; data-start=&quot;2716&quot;&gt;텍스트가 2줄이 되는 순간 잘림&lt;/li&gt;
&lt;li data-end=&quot;2764&quot; data-start=&quot;2736&quot;&gt;폰트 렌더링 차이(윈도우/맥)로 세로 정렬 이슈&lt;/li&gt;
&lt;li data-end=&quot;2790&quot; data-start=&quot;2765&quot;&gt;접근성 확대(브라우저 폰트 확대)에서 깨짐&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;2798&quot; data-start=&quot;2792&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;대안&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;2831&quot; data-start=&quot;2799&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;2831&quot; data-start=&quot;2799&quot;&gt;min-height + padding 조합 추천&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1772412688120&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;/* CSS */

.btn {
  min-height: 44px; /* 터치 타겟 고려 */
  padding: clamp(10px, 1.2vw, 14px) clamp(14px, 2vw, 20px);
  line-height: 1.2;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-end=&quot;3016&quot; data-start=&quot;2973&quot; data-ke-size=&quot;size23&quot;&gt;7. 접근성(특히 글자 확대) 환경에서 clamp는 &amp;ldquo;최소치&amp;rdquo;가 생명이다&lt;/h3&gt;
&lt;p data-end=&quot;3119&quot; data-start=&quot;3018&quot; data-ke-size=&quot;size16&quot;&gt;공공/인증/접근성 대응을 하는 경우, 사용자는 브라우저 확대나 OS 글자 크기 확대를 한다.&lt;br /&gt;이때 clamp가 px로만 꽉 묶여 있으면 사용자 환경 변화에 둔감해질 수 있다.&lt;/p&gt;
&lt;p data-end=&quot;3137&quot; data-start=&quot;3121&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;실무적으로 안전한 방향&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;3225&quot; data-start=&quot;3138&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;3184&quot; data-start=&quot;3138&quot;&gt;최소값(min)은 너무 낮게 잡지 않는다 (본문 14px 미만은 웬만하면 지양)&lt;/li&gt;
&lt;li data-end=&quot;3225&quot; data-start=&quot;3185&quot;&gt;가능하면 텍스트는 rem 기반 설계도 고려(프로젝트 정책에 따라)&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1772412712468&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;/* CSS */

html { font-size: 16px; } /* 기본 */
body { font-size: clamp(0.95rem, 0.9vw, 1.125rem); }&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;(단, 기존 레거시가 px 기반이면 무리하게 rem 전환하지 말고,&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;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-end=&quot;3453&quot; data-start=&quot;3413&quot; data-ke-size=&quot;size23&quot;&gt;8. clamp를 &amp;ldquo;토큰화&amp;rdquo;하지 않으면 운영 단계에서 지옥이 열린다&lt;/h3&gt;
&lt;p data-end=&quot;3549&quot; data-start=&quot;3455&quot; data-ke-size=&quot;size16&quot;&gt;수익형 블로그 관점에서도, 실무 관점에서도 중요한 포인트.&lt;br /&gt;clamp()를 여기저기 박아두면 나중에 디자인이 바뀌거나 기준 뷰포트가 바뀔 때 전체 수정이 어렵다.&lt;/p&gt;
&lt;p data-end=&quot;3570&quot; data-start=&quot;3551&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;추천: CSS 변수로 토큰화&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1772412751060&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;/* CSS */

:root{
  --fs-body: clamp(15px, 0.9vw, 18px);
  --fs-title: clamp(22px, 1.8vw, 32px);

  --space-2: clamp(8px, 1vw, 12px);
  --space-3: clamp(12px, 1.4vw, 18px);
}

body { font-size: var(--fs-body); }
h2 { font-size: var(--fs-title); margin-bottom: var(--space-3); }&lt;/code&gt;&lt;/pre&gt;
&lt;p data-end=&quot;3858&quot; data-start=&quot;3850&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;3858&quot; data-start=&quot;3850&quot; data-ke-size=&quot;size16&quot;&gt;이렇게 해두면:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;3916&quot; data-start=&quot;3859&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;3886&quot; data-start=&quot;3859&quot;&gt;콘텐츠형 페이지(블로그 글)도 톤이 일정해지고&lt;/li&gt;
&lt;li data-end=&quot;3916&quot; data-start=&quot;3887&quot;&gt;프로젝트(다중 사이트) 운영에서도 관리가 쉬워진다&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-end=&quot;3957&quot; data-start=&quot;3923&quot; data-ke-size=&quot;size23&quot;&gt;9. &amp;ldquo;어떤 요소에 clamp를 쓰면 좋은가&amp;rdquo; 실전 기준&lt;/h3&gt;
&lt;p data-end=&quot;3974&quot; data-start=&quot;3959&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;clamp 적극 추천&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;4055&quot; data-start=&quot;3975&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;3986&quot; data-start=&quot;3975&quot;&gt;본문/타이틀 폰트&lt;/li&gt;
&lt;li data-end=&quot;4005&quot; data-start=&quot;3987&quot;&gt;카드/버튼 내부 padding&lt;/li&gt;
&lt;li data-end=&quot;4029&quot; data-start=&quot;4006&quot;&gt;아이콘 크기(텍스트와 비례 유지 목적)&lt;/li&gt;
&lt;li data-end=&quot;4055&quot; data-start=&quot;4030&quot;&gt;섹션 내부 여백(단, 과도한 유동은 주의)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;4069&quot; data-start=&quot;4057&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;clamp 신중&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;4152&quot; data-start=&quot;4070&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;4094&quot; data-start=&quot;4070&quot;&gt;고정 높이(height) 필요한 컴포넌트&lt;/li&gt;
&lt;li data-end=&quot;4126&quot; data-start=&quot;4095&quot;&gt;테이블 행 높이/폼 필드 높이(접근성 확대 시 깨짐)&lt;/li&gt;
&lt;li data-end=&quot;4152&quot; data-start=&quot;4127&quot;&gt;레이아웃 핵심 그리드 간격(정렬감 흔들림)&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;script src=&quot;https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-8033755675470956&quot;&gt;&lt;/script&gt;
&lt;!-- display 수 --&gt; &lt;ins class=&quot;adsbygoogle&quot; style=&quot;display: block;&quot; data-ad-client=&quot;ca-pub-8033755675470956&quot; data-ad-slot=&quot;6883997418&quot; data-ad-format=&quot;auto&quot; data-full-width-responsive=&quot;true&quot;&gt;&lt;/ins&gt;
&lt;script&gt;        (adsbygoogle = window.adsbygoogle || []).push({});    &lt;/script&gt;
&lt;/div&gt;
&lt;h3 data-end=&quot;4186&quot; data-start=&quot;4159&quot; data-ke-size=&quot;size23&quot;&gt;10) 실무 테스트는 &amp;ldquo;3구간&amp;rdquo;만 보면 된다&lt;/h3&gt;
&lt;p data-end=&quot;4245&quot; data-start=&quot;4188&quot; data-ke-size=&quot;size16&quot;&gt;모든 디바이스를 다 볼 필요 없다. clamp()는 특히 아래 3구간만 보면 안정성이 확 올라간다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;4327&quot; data-start=&quot;4247&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;4266&quot; data-start=&quot;4247&quot;&gt;&lt;b&gt;최소 폭&lt;/b&gt;: 320~360&lt;/li&gt;
&lt;li data-end=&quot;4287&quot; data-start=&quot;4267&quot;&gt;&lt;b&gt;중간 폭&lt;/b&gt;: 768~1024&lt;/li&gt;
&lt;li data-end=&quot;4327&quot; data-start=&quot;4288&quot;&gt;&lt;b&gt;최대 폭&lt;/b&gt;: 1440~1920(+ 가능하면 2560도 한 번)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;4342&quot; data-start=&quot;4329&quot; data-ke-size=&quot;size16&quot;&gt;각 구간에서 체크할 것:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;4405&quot; data-start=&quot;4343&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;4364&quot; data-start=&quot;4343&quot;&gt;텍스트가 안 답답한가 / 안 과한가&lt;/li&gt;
&lt;li data-end=&quot;4384&quot; data-start=&quot;4365&quot;&gt;버튼/인풋이 세로로 안 잘리는가&lt;/li&gt;
&lt;li data-end=&quot;4405&quot; data-start=&quot;4385&quot;&gt;카드/섹션 간격이 흔들리지 않는가&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;h3 data-end=&quot;4438&quot; data-start=&quot;4412&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;징리&lt;/span&gt;&lt;/h3&gt;
&lt;h4 data-end=&quot;4438&quot; data-start=&quot;4412&quot; data-ke-size=&quot;size20&quot;&gt;clamp는 &amp;ldquo;적당히&amp;rdquo;가 정답이다&lt;/h4&gt;
&lt;p data-end=&quot;4598&quot; data-start=&quot;4440&quot; data-ke-size=&quot;size16&quot;&gt;clamp()는 반응형을 더 부드럽게 만들지만, 모든 값을 유동화하면 오히려 UI가 불안정해진다.&lt;br /&gt;&lt;b&gt;구조는 브레이크포인트로&lt;/b&gt;, &lt;b&gt;크기는 clamp로&lt;/b&gt;, &lt;b&gt;접근성은 최소치로 방어&lt;/b&gt;&lt;br /&gt;이 3가지만 지켜도 실무에서 clamp 때문에 터지는 이슈를 대부분 막을 수 있다.&lt;/p&gt;
&lt;p data-end=&quot;4598&quot; data-start=&quot;4440&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>반응형 설계 방법</category>
      <category>CLAMP</category>
      <category>CSSclamp</category>
      <category>CSS실무</category>
      <category>반응형css</category>
      <category>반응형설계</category>
      <category>웹퍼블리셔</category>
      <category>접근성체크</category>
      <category>프론트엔드</category>
      <author>DDODDO_LAB</author>
      <guid isPermaLink="true">https://ok-ddoddo.tistory.com/106</guid>
      <comments>https://ok-ddoddo.tistory.com/106#entry106comment</comments>
      <pubDate>Mon, 2 Mar 2026 14:59:09 +0900</pubDate>
    </item>
    <item>
      <title>반응형 테이블 CSS 구현 방법 (스크롤 vs 카드형 비교)</title>
      <link>https://ok-ddoddo.tistory.com/105</link>
      <description>&lt;blockquote data-ke-style=&quot;style2&quot;&gt;깨지지 않는 관리자 화면 만드는 방법&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;162&quot; data-start=&quot;130&quot; data-ke-size=&quot;size16&quot;&gt;반응형 작업에서&lt;br /&gt;가장 난이도가 높은 요소는 테이블이다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;216&quot; data-start=&quot;164&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;181&quot; data-start=&quot;164&quot;&gt;모바일에서 가로 스크롤 발생&lt;/li&gt;
&lt;li data-end=&quot;198&quot; data-start=&quot;182&quot;&gt;컬럼이 줄어들며 의미 손실&lt;/li&gt;
&lt;li data-end=&quot;207&quot; data-start=&quot;199&quot;&gt;버튼이 밀림&lt;/li&gt;
&lt;li data-end=&quot;216&quot; data-start=&quot;208&quot;&gt;정렬이 깨짐&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;257&quot; data-start=&quot;218&quot; data-ke-size=&quot;size16&quot;&gt;테이블은 단순히 줄이는 게 아니라&lt;br /&gt;&lt;b&gt;전략적으로 설계&lt;/b&gt;해야 한다.&lt;/p&gt;
&lt;p data-end=&quot;257&quot; data-start=&quot;218&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;반응형 테이블.png&quot; data-origin-width=&quot;1536&quot; data-origin-height=&quot;1024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Syr88/dJMcajnJKWw/klkIEO8Zs3whbtSkab9ZK1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Syr88/dJMcajnJKWw/klkIEO8Zs3whbtSkab9ZK1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Syr88/dJMcajnJKWw/klkIEO8Zs3whbtSkab9ZK1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FSyr88%2FdJMcajnJKWw%2FklkIEO8Zs3whbtSkab9ZK1%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;1536&quot; height=&quot;1024&quot; data-filename=&quot;반응형 테이블.png&quot; data-origin-width=&quot;1536&quot; data-origin-height=&quot;1024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;div&gt;
&lt;script src=&quot;https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-8033755675470956&quot;&gt;&lt;/script&gt;
&lt;!-- display 수 --&gt; &lt;ins class=&quot;adsbygoogle&quot; style=&quot;display: block;&quot; data-ad-client=&quot;ca-pub-8033755675470956&quot; data-ad-slot=&quot;6883997418&quot; data-ad-format=&quot;auto&quot; data-full-width-responsive=&quot;true&quot;&gt;&lt;/ins&gt;
&lt;script&gt;        (adsbygoogle = window.adsbygoogle || []).push({});    &lt;/script&gt;
&lt;/div&gt;
&lt;h3 data-end=&quot;297&quot; data-start=&quot;264&quot; data-ke-size=&quot;size23&quot;&gt;1. 테이블은 줄이는 게 아니라 &amp;ldquo;방식&amp;rdquo;을 바꿔야 한다&lt;/h3&gt;
&lt;p data-end=&quot;316&quot; data-start=&quot;299&quot; data-ke-size=&quot;size16&quot;&gt;많은 사람들이 이렇게 생각한다.&lt;/p&gt;
&lt;blockquote data-end=&quot;344&quot; data-start=&quot;318&quot; data-ke-style=&quot;style2&quot;&gt;
&lt;p data-end=&quot;344&quot; data-start=&quot;320&quot; data-ke-size=&quot;size16&quot;&gt;&amp;ldquo;모바일에서 width:100%면 되겠지?&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-end=&quot;350&quot; data-start=&quot;346&quot; data-ke-size=&quot;size16&quot;&gt;아니다.&lt;/p&gt;
&lt;p data-end=&quot;350&quot; data-start=&quot;346&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;388&quot; data-start=&quot;352&quot; data-ke-size=&quot;size16&quot;&gt;테이블은 화면 크기에 따라&lt;br /&gt;표현 방식을 바꾸는 것이 핵심이다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-end=&quot;415&quot; data-start=&quot;395&quot; data-ke-size=&quot;size23&quot;&gt;2. 반응형 테이블 3가지&lt;/h3&gt;
&lt;h3 data-end=&quot;415&quot; data-start=&quot;395&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;2-1. 가로 스크롤 유지 (가장 안전)&lt;/h3&gt;
&lt;pre id=&quot;code_1772409546526&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;/* CSS */

.table-wrap {
  overflow-x: auto;
}&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1772409568141&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;/* HTML */

&amp;lt;div class=&quot;table-wrap&quot;&amp;gt;
  &amp;lt;table&amp;gt;
    ...
  &amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-end=&quot;572&quot; data-start=&quot;566&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;572&quot; data-start=&quot;566&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;장점&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;602&quot; data-start=&quot;573&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;580&quot; data-start=&quot;573&quot;&gt;구조 유지&lt;/li&gt;
&lt;li data-end=&quot;589&quot; data-start=&quot;581&quot;&gt;접근성 안전&lt;/li&gt;
&lt;li data-end=&quot;602&quot; data-start=&quot;590&quot;&gt;관리자 화면에 적합&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;610&quot; data-start=&quot;604&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;단점&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;626&quot; data-start=&quot;611&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;626&quot; data-start=&quot;611&quot;&gt;모바일 UX는 다소 불편&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;658&quot; data-start=&quot;628&quot; data-ke-size=&quot;size16&quot;&gt;공공기관 관리자 화면은&lt;br /&gt;이 방식이 가장 현실적이다.&lt;/p&gt;
&lt;p data-end=&quot;658&quot; data-start=&quot;628&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-end=&quot;687&quot; data-start=&quot;665&quot; data-ke-size=&quot;size23&quot;&gt;2-2. 컬럼 숨김 (중요도 기반)&lt;/h3&gt;
&lt;p data-end=&quot;705&quot; data-start=&quot;689&quot; data-ke-size=&quot;size16&quot;&gt;모바일에서 불필요한 컬럼 제거&lt;/p&gt;
&lt;pre id=&quot;code_1772409691333&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;/* CSS */

@media (max-width: 768px) {
  .col-hide {
    display: none;
  }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-end=&quot;792&quot; data-start=&quot;786&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;792&quot; data-start=&quot;786&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;핵심&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;822&quot; data-start=&quot;793&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;808&quot; data-start=&quot;793&quot;&gt;&amp;ldquo;중요도&amp;rdquo; 기준으로 설계&lt;/li&gt;
&lt;li data-end=&quot;822&quot; data-start=&quot;809&quot;&gt;필수 데이터만 남기기&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;script src=&quot;https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-8033755675470956&quot;&gt;&lt;/script&gt;
&lt;!-- display 수 --&gt; &lt;ins class=&quot;adsbygoogle&quot; style=&quot;display: block;&quot; data-ad-client=&quot;ca-pub-8033755675470956&quot; data-ad-slot=&quot;6883997418&quot; data-ad-format=&quot;auto&quot; data-full-width-responsive=&quot;true&quot;&gt;&lt;/ins&gt;
&lt;script&gt;        (adsbygoogle = window.adsbygoogle || []).push({});    &lt;/script&gt;
&lt;/div&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2-3. 카드형 변환 (모바일 전용)&lt;/h3&gt;
&lt;pre id=&quot;code_1772409746659&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;/* CSS */

@media (max-width: 768px) {
  table {
    display: block;
  }
  tr {
    display: block;
    margin-bottom: 16px;
  }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-end=&quot;992&quot; data-start=&quot;986&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;992&quot; data-start=&quot;986&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;장점&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1020&quot; data-start=&quot;993&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1005&quot; data-start=&quot;993&quot;&gt;모바일 가독성 좋음&lt;/li&gt;
&lt;li data-end=&quot;1020&quot; data-start=&quot;1006&quot;&gt;사용자 서비스형에 적합&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;1028&quot; data-start=&quot;1022&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;단점&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1056&quot; data-start=&quot;1029&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1043&quot; data-start=&quot;1029&quot;&gt;관리자 화면에는 부적합&lt;/li&gt;
&lt;li data-end=&quot;1056&quot; data-start=&quot;1044&quot;&gt;접근성 재검토 필요&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-end=&quot;1086&quot; data-start=&quot;1063&quot; data-ke-size=&quot;size23&quot;&gt;3. 공공기관 관리자 화면 추천 전략&lt;/h3&gt;
&lt;p data-end=&quot;1123&quot; data-start=&quot;1088&quot; data-ke-size=&quot;size16&quot;&gt;&amp;gt; 기본은 &amp;ldquo;가로 스크롤 유지&amp;rdquo;&lt;br /&gt;&amp;gt; 필요 시 컬럼 최소화&lt;/p&gt;
&lt;p data-end=&quot;1128&quot; data-start=&quot;1125&quot; data-ke-size=&quot;size16&quot;&gt;이유:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1171&quot; data-start=&quot;1130&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1144&quot; data-start=&quot;1130&quot;&gt;행정 업무는 PC 중심&lt;/li&gt;
&lt;li data-end=&quot;1156&quot; data-start=&quot;1145&quot;&gt;데이터 밀도 중요&lt;/li&gt;
&lt;li data-end=&quot;1171&quot; data-start=&quot;1157&quot;&gt;접근성 구조 유지 필요&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-end=&quot;1200&quot; data-start=&quot;1178&quot; data-ke-size=&quot;size23&quot;&gt;4. 반응형 테이블 설계 체크리스트&lt;/h3&gt;
&lt;p data-end=&quot;1208&quot; data-start=&quot;1202&quot; data-ke-size=&quot;size16&quot;&gt;구조&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1249&quot; data-start=&quot;1209&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1221&quot; data-start=&quot;1209&quot;&gt;caption 존재&lt;/li&gt;
&lt;li data-end=&quot;1238&quot; data-start=&quot;1222&quot;&gt;thead/tbody 구분&lt;/li&gt;
&lt;li data-end=&quot;1249&quot; data-start=&quot;1239&quot;&gt;scope 사용&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;1257&quot; data-start=&quot;1251&quot; data-ke-size=&quot;size16&quot;&gt;UX&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1292&quot; data-start=&quot;1258&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1270&quot; data-start=&quot;1258&quot;&gt;최소 컬럼 수 유지&lt;/li&gt;
&lt;li data-end=&quot;1281&quot; data-start=&quot;1271&quot;&gt;버튼 위치 고정&lt;/li&gt;
&lt;li data-end=&quot;1292&quot; data-start=&quot;1282&quot;&gt;정렬 기준 명확&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;1300&quot; data-start=&quot;1294&quot; data-ke-size=&quot;size16&quot;&gt;기술&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1348&quot; data-start=&quot;1301&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1316&quot; data-start=&quot;1301&quot;&gt;overflow-x 처리&lt;/li&gt;
&lt;li data-end=&quot;1333&quot; data-start=&quot;1317&quot;&gt;white-space 조정&lt;/li&gt;
&lt;li data-end=&quot;1348&quot; data-start=&quot;1334&quot;&gt;min-width 설정&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;script src=&quot;https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-8033755675470956&quot;&gt;&lt;/script&gt;
&lt;!-- display 수 --&gt; &lt;ins class=&quot;adsbygoogle&quot; style=&quot;display: block;&quot; data-ad-client=&quot;ca-pub-8033755675470956&quot; data-ad-slot=&quot;6883997418&quot; data-ad-format=&quot;auto&quot; data-full-width-responsive=&quot;true&quot;&gt;&lt;/ins&gt;
&lt;script&gt;        (adsbygoogle = window.adsbygoogle || []).push({});    &lt;/script&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-end=&quot;1372&quot; data-start=&quot;1355&quot; data-ke-size=&quot;size23&quot;&gt;5. 깨지지 않는 설계 팁&lt;/h3&gt;
&lt;h4 data-end=&quot;1392&quot; data-start=&quot;1374&quot; data-ke-size=&quot;size20&quot;&gt;1) 숫자 컬럼은 nowrap&lt;/h4&gt;
&lt;pre id=&quot;code_1772409817992&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;/* CSS */

td.number {
  white-space: nowrap;
}&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2) 버튼 그룹은 flex로 정렬&lt;/h4&gt;
&lt;pre id=&quot;code_1772409853756&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;/* CSS */

td .btn-area {
  display: flex;
  gap: 4px;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;3) 최소 너비 확보&lt;/h4&gt;
&lt;pre id=&quot;code_1772409915875&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;/* CSS */

table {
  min-width: 800px;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-end=&quot;1628&quot; data-start=&quot;1612&quot; data-ke-size=&quot;size23&quot;&gt;6. 흔한 실수 TOP5&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-end=&quot;1720&quot; data-start=&quot;1630&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li data-end=&quot;1656&quot; data-start=&quot;1630&quot;&gt;모바일에서 강제로 font-size 줄이기&lt;/li&gt;
&lt;li data-end=&quot;1673&quot; data-start=&quot;1657&quot;&gt;width를 %로만 설정&lt;/li&gt;
&lt;li data-end=&quot;1687&quot; data-start=&quot;1674&quot;&gt;버튼을 줄바꿈 허용&lt;/li&gt;
&lt;li data-end=&quot;1702&quot; data-start=&quot;1688&quot;&gt;텍스트 줄바꿈 미제어&lt;/li&gt;
&lt;li data-end=&quot;1720&quot; data-start=&quot;1703&quot;&gt;컬럼 숨김 기준 없이 삭제&lt;/li&gt;
&lt;/ol&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;7. 실무 판단 기준&lt;/h3&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;상황&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;추천 방법&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;사용자 목록&lt;/td&gt;
&lt;td&gt;컬럼 숨김&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;공공 서비스 페이지&lt;/td&gt;
&lt;td&gt;카드형 변환&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;관리자 목록&lt;/td&gt;
&lt;td&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-end=&quot;1870&quot; data-start=&quot;1852&quot; data-ke-size=&quot;size23&quot;&gt;8. ChatGPT 활용 팁&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;프롬프트:&amp;nbsp;&lt;br /&gt;아래 테이블을 모바일에서 가로 스크롤 유지 방식으로 개선해줘. &lt;br /&gt;접근성을 유지하면서 구조는 유지해줘.&lt;/blockquote&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;또는&lt;/div&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;프롬프트:&amp;nbsp;&lt;br /&gt;아래 관리자 테이블에서 모바일에서 숨겨도 되는 컬럼을 분석해줘.&lt;/blockquote&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;h3 data-end=&quot;1996&quot; data-start=&quot;1991&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;정리&lt;/span&gt;&lt;/h3&gt;
&lt;p data-end=&quot;2022&quot; data-start=&quot;1998&quot; data-ke-size=&quot;size16&quot;&gt;반응형 테이블은&lt;br /&gt;&amp;ldquo;줄이는 작업&amp;rdquo;이 아니라&lt;/p&gt;
&lt;blockquote data-end=&quot;2043&quot; data-start=&quot;2024&quot; data-ke-style=&quot;style2&quot;&gt;
&lt;p data-end=&quot;2043&quot; data-start=&quot;2026&quot; data-ke-size=&quot;size16&quot;&gt;데이터 우선순위를 설계하는 작업&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-end=&quot;2048&quot; data-start=&quot;2045&quot; data-ke-size=&quot;size16&quot;&gt;이다.&lt;/p&gt;
&lt;p data-end=&quot;2048&quot; data-start=&quot;2045&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;2089&quot; data-start=&quot;2050&quot; data-ke-size=&quot;size16&quot;&gt;특히 공공기관 고도화에서는&lt;br /&gt;구조 유지 + 접근성 확보가 최우선이다.&lt;/p&gt;
&lt;p data-end=&quot;2089&quot; data-start=&quot;2050&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>
      <category>반응형 설계 방법</category>
      <category>CSS실무</category>
      <category>공공기관고도화</category>
      <category>관리자화면</category>
      <category>반응형설계</category>
      <category>반응형테이블</category>
      <category>웹퍼블리셔</category>
      <category>테이블UI</category>
      <author>DDODDO_LAB</author>
      <guid isPermaLink="true">https://ok-ddoddo.tistory.com/105</guid>
      <comments>https://ok-ddoddo.tistory.com/105#entry105comment</comments>
      <pubDate>Mon, 2 Mar 2026 09:26:00 +0900</pubDate>
    </item>
    <item>
      <title>반응형 이미지 처리 방법: object-fit과 aspect-ratio</title>
      <link>https://ok-ddoddo.tistory.com/104</link>
      <description>&lt;h3 data-end=&quot;112&quot; data-start=&quot;92&quot; data-ke-size=&quot;size23&quot;&gt;반응형 이미지 처리 정리&lt;/h3&gt;
&lt;p data-end=&quot;155&quot; data-start=&quot;113&quot; data-ke-size=&quot;size16&quot;&gt;(object-fit &amp;middot; aspect-ratio &amp;middot; 고정 vs 유동 판단법)&lt;/p&gt;
&lt;p data-end=&quot;155&quot; data-start=&quot;113&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;190&quot; data-start=&quot;157&quot; data-ke-size=&quot;size16&quot;&gt;반응형 작업에서&lt;br /&gt;레이아웃보다 더 많이 깨지는 것이 있다.&lt;/p&gt;
&lt;p data-end=&quot;204&quot; data-start=&quot;192&quot; data-ke-size=&quot;size16&quot;&gt;바로 &lt;b&gt;이미지&lt;/b&gt;다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;271&quot; data-start=&quot;206&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;228&quot; data-start=&quot;206&quot;&gt;PC에서는 예쁜데 모바일에서 잘림&lt;/li&gt;
&lt;li data-end=&quot;239&quot; data-start=&quot;229&quot;&gt;비율이 깨짐&lt;/li&gt;
&lt;li data-end=&quot;256&quot; data-start=&quot;240&quot;&gt;높이가 이상하게 늘어남&lt;/li&gt;
&lt;li data-end=&quot;271&quot; data-start=&quot;257&quot;&gt;콘텐츠 영역이 밀림&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;309&quot; data-start=&quot;273&quot; data-ke-size=&quot;size16&quot;&gt;반응형 이미지 설계는&lt;br /&gt;단순히 width:100%가 아니다.&lt;/p&gt;
&lt;p data-end=&quot;309&quot; data-start=&quot;273&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;반응형 이미지 처리 방법.png&quot; data-origin-width=&quot;1536&quot; data-origin-height=&quot;1024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/KBHY0/dJMcaflnxsD/cAyYhhWse8gglBszUJPdHk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/KBHY0/dJMcaflnxsD/cAyYhhWse8gglBszUJPdHk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/KBHY0/dJMcaflnxsD/cAyYhhWse8gglBszUJPdHk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FKBHY0%2FdJMcaflnxsD%2FcAyYhhWse8gglBszUJPdHk%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;1536&quot; height=&quot;1024&quot; data-filename=&quot;반응형 이미지 처리 방법.png&quot; data-origin-width=&quot;1536&quot; data-origin-height=&quot;1024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-end=&quot;309&quot; data-start=&quot;273&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;309&quot; data-start=&quot;273&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;309&quot; data-start=&quot;273&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-end=&quot;309&quot; data-start=&quot;273&quot; data-ke-size=&quot;size23&quot;&gt;1. 가장 기본 원칙&lt;/h3&gt;
&lt;pre id=&quot;code_1772067384380&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;css&quot;&gt;&lt;code&gt;/* CSS */

img {
  max-width: 100%;
  height: auto;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-end=&quot;309&quot; data-start=&quot;273&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;398&quot; data-start=&quot;387&quot; data-ke-size=&quot;size16&quot;&gt;이건 기본 세팅이다.&lt;/p&gt;
&lt;p data-end=&quot;398&quot; data-start=&quot;387&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;429&quot; data-start=&quot;400&quot; data-ke-size=&quot;size16&quot;&gt;하지만 이것만으로는 모든 상황을 해결할 수 없다.&lt;/p&gt;
&lt;p data-end=&quot;429&quot; data-start=&quot;400&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-end=&quot;462&quot; data-start=&quot;436&quot; data-ke-size=&quot;size23&quot;&gt;2. 고정 이미지 vs 유동 이미지 판단법&lt;/h3&gt;
&lt;p data-end=&quot;486&quot; data-start=&quot;464&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1) 고정 비율 유지가 필요한 경우&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;534&quot; data-start=&quot;488&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;496&quot; data-start=&quot;488&quot;&gt;썸네일 카드&lt;/li&gt;
&lt;li data-end=&quot;501&quot; data-start=&quot;497&quot;&gt;배너&lt;/li&gt;
&lt;li data-end=&quot;512&quot; data-start=&quot;502&quot;&gt;슬라이드 이미지&lt;/li&gt;
&lt;li data-end=&quot;522&quot; data-start=&quot;513&quot;&gt;유튜브 썸네일&lt;/li&gt;
&lt;li data-end=&quot;534&quot; data-start=&quot;523&quot;&gt;뉴스 목록 이미지&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;547&quot; data-start=&quot;536&quot; data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 비율 유지가 중요&lt;/p&gt;
&lt;p data-end=&quot;547&quot; data-start=&quot;536&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;576&quot; data-start=&quot;554&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2) 유동 크기 허용이 가능한 경우&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;609&quot; data-start=&quot;578&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;589&quot; data-start=&quot;578&quot;&gt;본문 삽입 이미지&lt;/li&gt;
&lt;li data-end=&quot;601&quot; data-start=&quot;590&quot;&gt;상세 설명 이미지&lt;/li&gt;
&lt;li data-end=&quot;609&quot; data-start=&quot;602&quot;&gt;단순 사진&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;625&quot; data-start=&quot;611&quot; data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 원본 비율 유지가 중요&lt;/p&gt;
&lt;p data-end=&quot;547&quot; data-start=&quot;536&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-end=&quot;547&quot; data-start=&quot;536&quot; data-ke-size=&quot;size23&quot;&gt;3. aspect-ratio 사용 전략&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;비율 유지용 핵심 속성:&lt;/p&gt;
&lt;pre id=&quot;code_1772067489762&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;/* CSS */

.card-thumb {
  aspect-ratio: 16 / 9;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;756&quot; data-start=&quot;725&quot; data-ke-size=&quot;size16&quot;&gt;이렇게 하면&lt;br /&gt;비율을 유지하면서 공간이 먼저 확보된다.&lt;/p&gt;
&lt;p data-end=&quot;756&quot; data-start=&quot;725&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;764&quot; data-start=&quot;758&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;장점&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;810&quot; data-start=&quot;766&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;778&quot; data-start=&quot;766&quot;&gt;레이아웃 점프 방지&lt;/li&gt;
&lt;li data-end=&quot;797&quot; data-start=&quot;779&quot;&gt;CLS 감소 (퍼포먼스 향상)&lt;/li&gt;
&lt;li data-end=&quot;810&quot; data-start=&quot;798&quot;&gt;디자인 일관성 유지&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;4. object-fit 실전 사용법&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이미지가 박스를 채우는 방식 제어&lt;/p&gt;
&lt;pre id=&quot;code_1772067553270&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;/* CSS */

.card-thumb img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-end=&quot;955&quot; data-start=&quot;946&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;cover&lt;/b&gt;&lt;/p&gt;
&lt;p data-end=&quot;978&quot; data-start=&quot;956&quot; data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 비율 유지 + 꽉 채움 (일부 잘림)&lt;/p&gt;
&lt;p data-end=&quot;991&quot; data-start=&quot;980&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;contain&lt;/b&gt;&lt;/p&gt;
&lt;p data-end=&quot;1015&quot; data-start=&quot;992&quot; data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 비율 유지 + 잘림 없음 (여백 발생)&lt;/p&gt;
&lt;p data-end=&quot;1039&quot; data-start=&quot;1017&quot; data-ke-size=&quot;size16&quot;&gt;실무에서는 대부분 cover를 쓴다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-end=&quot;1039&quot; data-start=&quot;1017&quot; data-ke-size=&quot;size23&quot;&gt;5. 반응형 배너 처리 전략&lt;/h3&gt;
&lt;p data-end=&quot;1039&quot; data-start=&quot;1017&quot; data-ke-size=&quot;size16&quot;&gt;고정 높이 배너는&lt;br /&gt;모바일에서 특히 깨진다.&lt;/p&gt;
&lt;p data-end=&quot;1039&quot; data-start=&quot;1017&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;1039&quot; data-start=&quot;1017&quot; data-ke-size=&quot;size16&quot;&gt;❌ 잘못된 방식&lt;/p&gt;
&lt;pre id=&quot;code_1772067646994&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;/* CSS */

.banner {
  height: 400px;
}&lt;/code&gt;&lt;/pre&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;✅ 추천 방식&lt;/p&gt;
&lt;pre id=&quot;code_1772067691400&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;/* CSS */

.banner {
  aspect-ratio: 1920 / 600;
}&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_1772067710435&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;/* CSS */

height: clamp(200px, 30vw, 400px);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; clamp와 같이 쓰면 더 유연하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;6. background-image vs img 태그 선택 기준&lt;/h3&gt;
&lt;p data-end=&quot;1369&quot; data-start=&quot;1353&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;img를 써야 하는 경우&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1413&quot; data-start=&quot;1371&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1383&quot; data-start=&quot;1371&quot;&gt;콘텐츠 의미가 있음&lt;/li&gt;
&lt;li data-end=&quot;1401&quot; data-start=&quot;1384&quot;&gt;접근성 필요 (alt 필요)&lt;/li&gt;
&lt;li data-end=&quot;1413&quot; data-start=&quot;1402&quot;&gt;SEO 영향 있음&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;1444&quot; data-start=&quot;1415&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;background-image를 써도 되는 경우&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1474&quot; data-start=&quot;1446&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1454&quot; data-start=&quot;1446&quot;&gt;단순 장식용&lt;/li&gt;
&lt;li data-end=&quot;1462&quot; data-start=&quot;1455&quot;&gt;배경 패턴&lt;/li&gt;
&lt;li data-end=&quot;1474&quot; data-start=&quot;1463&quot;&gt;의미 없는 비주얼&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;1512&quot; data-start=&quot;1476&quot; data-ke-size=&quot;size16&quot;&gt;공공기관에서는&lt;br /&gt;의미 있는 이미지는 반드시&lt;b&gt; &amp;lt;img&amp;gt;&lt;/b&gt; 사용.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-end=&quot;1540&quot; data-start=&quot;1519&quot; data-ke-size=&quot;size23&quot;&gt;7. 반응형 이미지 실수 TOP4&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-end=&quot;1626&quot; data-start=&quot;1542&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li data-end=&quot;1557&quot; data-start=&quot;1542&quot;&gt;고정 height 사용&lt;/li&gt;
&lt;li data-end=&quot;1583&quot; data-start=&quot;1558&quot;&gt;object-fit 없이 강제 크기 조정&lt;/li&gt;
&lt;li data-end=&quot;1605&quot; data-start=&quot;1584&quot;&gt;PC 기준으로만 자른 이미지 사용&lt;/li&gt;
&lt;li data-end=&quot;1626&quot; data-start=&quot;1606&quot;&gt;모바일 별도 이미지 고려 안 함&lt;/li&gt;
&lt;/ol&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;8. 모바일 전용 이미지가 필요한 경우&lt;/h3&gt;
&lt;pre id=&quot;code_1772067884329&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!-- HTML --&amp;gt;

&amp;lt;picture&amp;gt;
  &amp;lt;source media=&quot;(max-width: 768px)&quot; srcset=&quot;mobile.jpg&quot;&amp;gt;
  &amp;lt;img src=&quot;desktop.jpg&quot; alt=&quot;설명&quot;&amp;gt;
&amp;lt;/picture&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;공공기관에서는&lt;br /&gt;용량 최적화 + 가독성 확보 위해 종종 필요.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;9. 실무 판단 기준 정리&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;카드 썸네일&lt;/td&gt;
&lt;td&gt;aspect-ratio + object-fit:cover&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;배너&lt;/td&gt;
&lt;td&gt;aspect-ratio 또는 clamp&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;본문 이미지&lt;/td&gt;
&lt;td&gt;max-width:100%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;아이콘&lt;/td&gt;
&lt;td&gt;SVG 권장&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;의미 이미지&lt;/td&gt;
&lt;td&gt;img + alt&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;h3 data-end=&quot;2039&quot; data-start=&quot;2034&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;정리&lt;/span&gt;&lt;/h3&gt;
&lt;p data-end=&quot;2052&quot; data-start=&quot;2041&quot; data-ke-size=&quot;size16&quot;&gt;반응형 이미지 설계는&lt;/p&gt;
&lt;blockquote data-end=&quot;2086&quot; data-start=&quot;2054&quot; data-ke-style=&quot;style1&quot;&gt;
&lt;p data-end=&quot;2086&quot; data-start=&quot;2056&quot; data-ke-size=&quot;size16&quot;&gt;비율을 먼저 설계하고&lt;br /&gt;크기를 나중에 조정하는 것&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-end=&quot;2091&quot; data-start=&quot;2088&quot; data-ke-size=&quot;size16&quot;&gt;이다.&lt;/p&gt;
&lt;p data-end=&quot;2091&quot; data-start=&quot;2088&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;2153&quot; data-start=&quot;2093&quot; data-ke-size=&quot;size16&quot;&gt;aspect-ratio와 object-fit을&lt;br /&gt;기본 도구로 생각하면&lt;br /&gt;레이아웃 안정성이 크게 올라간다.&lt;/p&gt;
&lt;p data-end=&quot;2153&quot; data-start=&quot;2093&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>반응형 설계 방법</category>
      <category>aspectRatio</category>
      <category>CLAMP</category>
      <category>CSS</category>
      <category>반응형설계</category>
      <category>반응형이미지</category>
      <category>웹퍼블리셔</category>
      <author>DDODDO_LAB</author>
      <guid isPermaLink="true">https://ok-ddoddo.tistory.com/104</guid>
      <comments>https://ok-ddoddo.tistory.com/104#entry104comment</comments>
      <pubDate>Sat, 28 Feb 2026 10:06:57 +0900</pubDate>
    </item>
    <item>
      <title>여러 사이트를 동시에 고도화할 때 디렉토리 구조 설계 방법</title>
      <link>https://ok-ddoddo.tistory.com/103</link>
      <description>&lt;p data-end=&quot;202&quot; data-start=&quot;170&quot; data-ke-size=&quot;size16&quot;&gt;공공기관 고도화 프로젝트를 하다 보면 이런 상황이 나온다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;276&quot; data-start=&quot;204&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;222&quot; data-start=&quot;204&quot;&gt;동일한 구조의 사이트 5~9개&lt;/li&gt;
&lt;li data-end=&quot;234&quot; data-start=&quot;223&quot;&gt;공통 소스는 공유&lt;/li&gt;
&lt;li data-end=&quot;246&quot; data-start=&quot;235&quot;&gt;일부는 별도 관리&lt;/li&gt;
&lt;li data-end=&quot;259&quot; data-start=&quot;247&quot;&gt;기존 레거시는 유지&lt;/li&gt;
&lt;li data-end=&quot;276&quot; data-start=&quot;260&quot;&gt;신규 레이아웃은 전면 개편&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;320&quot; data-start=&quot;278&quot; data-ke-size=&quot;size16&quot;&gt;이때 디렉토리 구조를 잘못 잡으면&lt;br /&gt;중반부터 수정 범위가 통제되지 않는다.&lt;/p&gt;
&lt;p data-end=&quot;354&quot; data-start=&quot;322&quot; data-ke-size=&quot;size16&quot;&gt;고도화의 핵심은 &amp;ldquo;코딩&amp;rdquo;이 아니라&lt;br /&gt;&lt;b&gt;구조 설계&lt;/b&gt;다.&lt;/p&gt;
&lt;p data-end=&quot;354&quot; data-start=&quot;322&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;여러 사이트 동시에 고도화 구조설계.png&quot; data-origin-width=&quot;1536&quot; data-origin-height=&quot;1024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Po7Jt/dJMcafTbd5j/u8mQ7Qfrz6pgidKhMCKWGK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Po7Jt/dJMcafTbd5j/u8mQ7Qfrz6pgidKhMCKWGK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Po7Jt/dJMcafTbd5j/u8mQ7Qfrz6pgidKhMCKWGK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FPo7Jt%2FdJMcafTbd5j%2Fu8mQ7Qfrz6pgidKhMCKWGK%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;1536&quot; height=&quot;1024&quot; data-filename=&quot;여러 사이트 동시에 고도화 구조설계.png&quot; data-origin-width=&quot;1536&quot; data-origin-height=&quot;1024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-end=&quot;378&quot; data-start=&quot;361&quot; data-ke-size=&quot;size23&quot;&gt;1. 가장 많이 하는 실수&lt;/h3&gt;
&lt;p data-end=&quot;403&quot; data-start=&quot;380&quot; data-ke-size=&quot;size16&quot;&gt;❌ 기존 폴더 안에 그냥 덮어쓰기&lt;/p&gt;
&lt;p data-end=&quot;424&quot; data-start=&quot;404&quot; data-ke-size=&quot;size16&quot;&gt;❌ v2, v3를 섞어 쓰기&lt;/p&gt;
&lt;p data-end=&quot;452&quot; data-start=&quot;425&quot; data-ke-size=&quot;size16&quot;&gt;❌ 사이트별로 공통 파일을 복사해서 관리&lt;/p&gt;
&lt;p data-end=&quot;461&quot; data-start=&quot;454&quot; data-ke-size=&quot;size16&quot;&gt;이렇게 되면:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;507&quot; data-start=&quot;463&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;478&quot; data-start=&quot;463&quot;&gt;공통 수정 시 9번 수정&lt;/li&gt;
&lt;li data-end=&quot;489&quot; data-start=&quot;479&quot;&gt;QA 반영 누락&lt;/li&gt;
&lt;li data-end=&quot;497&quot; data-start=&quot;490&quot;&gt;배포 충돌&lt;/li&gt;
&lt;li data-end=&quot;507&quot; data-start=&quot;498&quot;&gt;유지보수 지옥&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-end=&quot;541&quot; data-start=&quot;514&quot; data-ke-size=&quot;size23&quot;&gt;2. 기본 전략: &amp;ldquo;공통과 개별을 분리하라&amp;rdquo;&lt;/h3&gt;
&lt;p data-end=&quot;582&quot; data-start=&quot;543&quot; data-ke-size=&quot;size16&quot;&gt;여러 사이트 고도화 시&lt;br /&gt;폴더는 크게 3단계로 나누는 것이 안전하다.&lt;/p&gt;
&lt;blockquote data-end=&quot;354&quot; data-start=&quot;322&quot; data-ke-style=&quot;style3&quot;&gt;/common &lt;br /&gt;/site-a &lt;br /&gt;/site-b &lt;br /&gt;/site-c&lt;/blockquote&gt;
&lt;p data-end=&quot;354&quot; data-start=&quot;322&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;354&quot; data-start=&quot;322&quot; data-ke-size=&quot;size16&quot;&gt;추천 구조 예시&lt;/p&gt;
&lt;blockquote data-end=&quot;354&quot; data-start=&quot;322&quot; data-ke-style=&quot;style3&quot;&gt;/assets &lt;br /&gt;&amp;nbsp; &amp;nbsp; /common &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; /css &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; /scss &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; /js &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; /img &lt;br /&gt;&amp;nbsp; &amp;nbsp; /site-a &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;/css &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;/js &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;/img &lt;br /&gt;&amp;nbsp; &amp;nbsp; /site-b&lt;br /&gt;&amp;nbsp; &amp;nbsp; /site-c&lt;/blockquote&gt;
&lt;p data-end=&quot;776&quot; data-start=&quot;767&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;776&quot; data-start=&quot;767&quot; data-ke-size=&quot;size16&quot;&gt;핵심 원칙&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;842&quot; data-start=&quot;778&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;800&quot; data-start=&quot;778&quot;&gt;공통 컴포넌트는 common에만 존재&lt;/li&gt;
&lt;li data-end=&quot;827&quot; data-start=&quot;801&quot;&gt;사이트 전용 수정은 site 폴더에서만 처리&lt;/li&gt;
&lt;li data-end=&quot;842&quot; data-start=&quot;828&quot;&gt;공통을 복사하지 않는다&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-end=&quot;870&quot; data-start=&quot;849&quot; data-ke-size=&quot;size23&quot;&gt;3. 병행 운영(v2) 구조 설계&lt;/h3&gt;
&lt;p data-end=&quot;890&quot; data-start=&quot;872&quot; data-ke-size=&quot;size16&quot;&gt;고도화는 보통 병행 운영이 많다.&lt;/p&gt;
&lt;p data-end=&quot;897&quot; data-start=&quot;892&quot; data-ke-size=&quot;size16&quot;&gt;이 경우:&lt;/p&gt;
&lt;blockquote data-end=&quot;897&quot; data-start=&quot;892&quot; data-ke-style=&quot;style3&quot;&gt;/v1 (기존) &lt;br /&gt;/v2 (고도화) &lt;br /&gt;/common&lt;/blockquote&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;권장 방식&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;990&quot; data-start=&quot;948&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;962&quot; data-start=&quot;948&quot;&gt;v1은 건드리지 않는다&lt;/li&gt;
&lt;li data-end=&quot;977&quot; data-start=&quot;963&quot;&gt;v2는 새 구조로 설계&lt;/li&gt;
&lt;li data-end=&quot;990&quot; data-start=&quot;978&quot;&gt;공통은 점진적 통합&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-end=&quot;1020&quot; data-start=&quot;997&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-end=&quot;1020&quot; data-start=&quot;997&quot; data-ke-size=&quot;size23&quot;&gt;4. CSS/SCSS 구조 통일 전략&lt;/h3&gt;
&lt;p data-end=&quot;1036&quot; data-start=&quot;1022&quot; data-ke-size=&quot;size16&quot;&gt;공통 SCSS 구조 예시:&lt;/p&gt;
&lt;blockquote data-end=&quot;1036&quot; data-start=&quot;1022&quot; data-ke-style=&quot;style3&quot;&gt;/common/scss &lt;br /&gt;&amp;nbsp; &amp;nbsp; _variables.scss &lt;br /&gt;&amp;nbsp; &amp;nbsp; _mixins.scss &lt;br /&gt;&amp;nbsp; &amp;nbsp; /components &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; _button.scss &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; _table.scss &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; _form.scss &lt;br /&gt;&amp;nbsp; &amp;nbsp; main.scss&lt;/blockquote&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;blockquote data-ke-style=&quot;style3&quot;&gt;/site-a/scss &lt;br /&gt;&amp;nbsp; &amp;nbsp; _override.scss&lt;/blockquote&gt;
&lt;p data-end=&quot;1226&quot; data-start=&quot;1216&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;1226&quot; data-start=&quot;1216&quot; data-ke-size=&quot;size16&quot;&gt;중요 포인트&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1274&quot; data-start=&quot;1228&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1236&quot; data-start=&quot;1228&quot;&gt;공통은 설계&lt;/li&gt;
&lt;li data-end=&quot;1252&quot; data-start=&quot;1237&quot;&gt;사이트는 override&lt;/li&gt;
&lt;li data-end=&quot;1274&quot; data-start=&quot;1253&quot;&gt;공통을 직접 수정하지 않음 (원칙)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-end=&quot;1302&quot; data-start=&quot;1281&quot; data-ke-size=&quot;size23&quot;&gt;5. 배포 전략까지 고려해야 한다&lt;/h3&gt;
&lt;p data-end=&quot;1332&quot; data-start=&quot;1304&quot; data-ke-size=&quot;size16&quot;&gt;고도화 구조는&lt;br /&gt;&amp;ldquo;운영 환경&amp;rdquo;까지 고려해야 한다.&lt;/p&gt;
&lt;p data-end=&quot;1343&quot; data-start=&quot;1334&quot; data-ke-size=&quot;size16&quot;&gt;확인해야 할 것:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1405&quot; data-start=&quot;1345&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1361&quot; data-start=&quot;1345&quot;&gt;배포 단위는 사이트별인가?&lt;/li&gt;
&lt;li data-end=&quot;1379&quot; data-start=&quot;1362&quot;&gt;공통 배포 시 영향 범위는?&lt;/li&gt;
&lt;li data-end=&quot;1392&quot; data-start=&quot;1380&quot;&gt;CDN 사용 여부?&lt;/li&gt;
&lt;li data-end=&quot;1405&quot; data-start=&quot;1393&quot;&gt;캐시 무효화 전략?&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;1434&quot; data-start=&quot;1407&quot; data-ke-size=&quot;size16&quot;&gt;디렉토리 구조는&lt;br /&gt;운영 전략과 연결되어야 한다.&lt;/p&gt;
&lt;p data-end=&quot;1434&quot; data-start=&quot;1407&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-end=&quot;1464&quot; data-start=&quot;1441&quot; data-ke-size=&quot;size23&quot;&gt;6. 여러 사이트 동시 작업 시 규칙&lt;/h3&gt;
&lt;p data-end=&quot;1480&quot; data-start=&quot;1466&quot; data-ke-size=&quot;size16&quot;&gt;1) 네이밍 규칙 통일&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1512&quot; data-start=&quot;1481&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1492&quot; data-start=&quot;1481&quot;&gt;class 네이밍&lt;/li&gt;
&lt;li data-end=&quot;1501&quot; data-start=&quot;1493&quot;&gt;파일명 규칙&lt;/li&gt;
&lt;li data-end=&quot;1512&quot; data-start=&quot;1502&quot;&gt;버전 표기 방식&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;1529&quot; data-start=&quot;1514&quot; data-ke-size=&quot;size16&quot;&gt;2) 공통 수정은 문서화&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1552&quot; data-start=&quot;1530&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1540&quot; data-start=&quot;1530&quot;&gt;변경 로그 기록&lt;/li&gt;
&lt;li data-end=&quot;1552&quot; data-start=&quot;1541&quot;&gt;영향 사이트 체크&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;1576&quot; data-start=&quot;1554&quot; data-ke-size=&quot;size16&quot;&gt;3) 사이트별 override 최소화&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1595&quot; data-start=&quot;1577&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1584&quot; data-start=&quot;1577&quot;&gt;복사 금지&lt;/li&gt;
&lt;li data-end=&quot;1595&quot; data-start=&quot;1585&quot;&gt;중복 정의 금지&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-end=&quot;1624&quot; data-start=&quot;1602&quot; data-ke-size=&quot;size23&quot;&gt;7. 실무 루틴 (추천 작업 순서)&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-end=&quot;1708&quot; data-start=&quot;1626&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li data-end=&quot;1639&quot; data-start=&quot;1626&quot;&gt;공통 컴포넌트 설계&lt;/li&gt;
&lt;li data-end=&quot;1656&quot; data-start=&quot;1640&quot;&gt;공통 SCSS 구조 확정&lt;/li&gt;
&lt;li data-end=&quot;1676&quot; data-start=&quot;1657&quot;&gt;사이트별 override 설계&lt;/li&gt;
&lt;li data-end=&quot;1694&quot; data-start=&quot;1677&quot;&gt;1개 사이트로 파일럿 적용&lt;/li&gt;
&lt;li data-end=&quot;1708&quot; data-start=&quot;1695&quot;&gt;나머지 사이트 확장&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-end=&quot;1729&quot; data-start=&quot;1710&quot; data-ke-size=&quot;size16&quot;&gt;처음부터 전체에 적용하면 위험하다.&lt;/p&gt;
&lt;p data-end=&quot;1729&quot; data-start=&quot;1710&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-end=&quot;1756&quot; data-start=&quot;1736&quot; data-ke-size=&quot;size23&quot;&gt;8. ChatGPT 활용 포인트&lt;/h3&gt;
&lt;p data-end=&quot;1773&quot; data-start=&quot;1758&quot; data-ke-size=&quot;size16&quot;&gt;구조 설계 요청 예시 프롬프트:&lt;/p&gt;
&lt;blockquote data-end=&quot;1773&quot; data-start=&quot;1758&quot; data-ke-style=&quot;style3&quot;&gt;동일 구조의 7개 사이트를 병행 고도화해야 한다. &lt;br /&gt;공통과 개별을 분리한 디렉토리 구조를 제안해줘. &lt;br /&gt;배포와 유지보수를 고려해서 설명해줘.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;h3 data-end=&quot;1870&quot; data-start=&quot;1865&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;정리&lt;/span&gt;&lt;/h3&gt;
&lt;p data-end=&quot;1914&quot; data-start=&quot;1872&quot; data-ke-size=&quot;size16&quot;&gt;여러 사이트를 동시에 고도화할 때&lt;br /&gt;디렉토리는 단순한 폴더 구성이 아니다.&lt;/p&gt;
&lt;blockquote data-end=&quot;1932&quot; data-start=&quot;1916&quot; data-ke-style=&quot;style2&quot;&gt;
&lt;p data-end=&quot;1932&quot; data-start=&quot;1918&quot; data-ke-size=&quot;size16&quot;&gt;수정 범위를 통제하는 장치&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-end=&quot;1936&quot; data-start=&quot;1934&quot; data-ke-size=&quot;size16&quot;&gt;다.&lt;/p&gt;
&lt;p data-end=&quot;1973&quot; data-start=&quot;1938&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;1973&quot; data-start=&quot;1938&quot; data-ke-size=&quot;size16&quot;&gt;공통은 중앙집중&lt;br /&gt;개별은 최소 override&lt;br /&gt;기존은 보호&lt;/p&gt;
&lt;p data-end=&quot;2004&quot; data-start=&quot;1975&quot; data-ke-size=&quot;size16&quot;&gt;이 세 가지만 지켜도&lt;br /&gt;고도화 프로젝트는 안정된다.&lt;/p&gt;
&lt;p data-end=&quot;2004&quot; data-start=&quot;1975&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>공공기관 고도화 실전</category>
      <category>SCSS구조</category>
      <category>고도화실전</category>
      <category>공공기관고도화</category>
      <category>디렉토리구조</category>
      <category>레거시정리</category>
      <category>병행운영</category>
      <category>웹퍼블리셔</category>
      <author>DDODDO_LAB</author>
      <guid isPermaLink="true">https://ok-ddoddo.tistory.com/103</guid>
      <comments>https://ok-ddoddo.tistory.com/103#entry103comment</comments>
      <pubDate>Fri, 27 Feb 2026 14:06:19 +0900</pubDate>
    </item>
  </channel>
</rss>