<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Ilknur Eren</title>
    <description>The latest articles on DEV Community by Ilknur Eren (@ilknur).</description>
    <link>https://dev.to/ilknur</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4018541%2F94961991-50e3-46fd-ae59-57bfa731550e.jpg</url>
      <title>DEV Community: Ilknur Eren</title>
      <link>https://dev.to/ilknur</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ilknur"/>
    <language>en</language>
    <item>
      <title>My CPACC journey</title>
      <dc:creator>Ilknur Eren</dc:creator>
      <pubDate>Sat, 25 Jul 2026 14:42:26 +0000</pubDate>
      <link>https://dev.to/ilknur/my-cpacc-journey-1kg8</link>
      <guid>https://dev.to/ilknur/my-cpacc-journey-1kg8</guid>
      <description>&lt;p&gt;The Certified Professional in Accessibility Core Competencies (CPACC) is a credential offered by the International Association of Accessibility Professionals (IAAP). It is designed for people who work in or around accessibility, engineers, designers, and others.&lt;br&gt;
The exam covers three broad areas: disabilities, accessibility and universal design, and accessibility standards and laws.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why I decided to take it
&lt;/h2&gt;

&lt;p&gt;I have spent most of my career as an engineer with a focus on accessibility. I write code. I help teams build things that work for everyone. I write articles educating on accessibility standards. I knew the WCAG guidelines and semantic HTML. I knew how to test with a screen reader.  I live and breathe accessibility.&lt;/p&gt;

&lt;p&gt;Taking the CPACC felt like a chance to solidify the years of accessibility work. &lt;/p&gt;

&lt;h2&gt;
  
  
  What studying actually looked like
&lt;/h2&gt;

&lt;p&gt;I spent several months preparing for the exam last year. I worked through the IAAP Body of Knowledge, read research, and took practice tests. I watched youtube tutorials and completed the CPACC prep course offered by Deque University.&lt;/p&gt;

&lt;p&gt;The technical material felt familiar at first. Assistive technology, accessibility standards, barrier types, I had touched most of this on m. But the exam goes deeper than surface familiarity. I had to understand how different types of assistive technology work, not just that they exist.&lt;/p&gt;

&lt;p&gt;The history and policy sections were where things really opened up for me. Studing for the CPACC exam, I realized how much context I had been missing.&lt;/p&gt;

&lt;h2&gt;
  
  
  The exam itself
&lt;/h2&gt;

&lt;p&gt;The CPACC test covers a wide range of topics. Some questions put you in real-world scenarios and ask you to apply what you know. Others test precise definitions and legal details.&lt;/p&gt;

&lt;p&gt;I felt prepared walking in, and the exam still challenged me. That is a good thing. A credential that is easy to get is not worth much.&lt;br&gt;
After months of studying, I passed. I am now a CPACC certified engineer.&lt;/p&gt;

&lt;p&gt;But more than the credential, I walked away with a broader view of accessibility. I understand more about the lived experiences of people with disabilities. I understand more about the assistive technologies they rely on, the legal and policy frameworks that shape what companies are required to do — and what they should do even when they are not required to.&lt;/p&gt;

&lt;p&gt;That last part matters. Requirements set a floor. Good accessibility work aims higher.&lt;/p&gt;

&lt;h2&gt;
  
  
  Keeping the certification
&lt;/h2&gt;

&lt;p&gt;The CPACC is not a one-time achievement. Like many professional credentials, it requires ongoing education to maintain. it requires attending accessibility conferences, taking courses. I need to earn continuing education credits to keep my certification active.&lt;/p&gt;

&lt;p&gt;Honestly, I see that as a feature. Accessibility is a living field. Standards evolve. Technology changes. New research shapes best practices. Staying certified means staying current. &lt;/p&gt;

&lt;h2&gt;
  
  
  Should you take it?
&lt;/h2&gt;

&lt;p&gt;If you work in accessibility, I think the CPACC is worth pursuing. Not just for the credential, but for what the process of studying teaches you.&lt;/p&gt;

&lt;p&gt;Technical skills alone are not enough to do this work well. You need context. You need history. You need to understand the people your work is meant to serve.&lt;/p&gt;

&lt;p&gt;The CPACC exam pushed me toward all of that. I truly feel like I am a better engineer because of it.&lt;/p&gt;

</description>
      <category>a11y</category>
      <category>certification</category>
      <category>webdev</category>
      <category>website</category>
    </item>
    <item>
      <title>Accessible Form Labels</title>
      <dc:creator>Ilknur Eren</dc:creator>
      <pubDate>Sat, 11 Jul 2026 00:00:15 +0000</pubDate>
      <link>https://dev.to/ilknur/accessible-form-labels-5fpl</link>
      <guid>https://dev.to/ilknur/accessible-form-labels-5fpl</guid>
      <description>&lt;p&gt;Labels are a foundational part of any accessible form. Without properly implemented, users who rely on screen readers have no way to understand what a field is asking for. A label does two things: it tells the user what a field is for, and it connects that meaning to the input in the code so assistive technology can announce it. There are a number of basic form label accessibility rules all developers should follow to build accessible forms. &lt;/p&gt;

&lt;h2&gt;
  
  
  Use the &lt;code&gt;&amp;lt;label&amp;gt;&lt;/code&gt; element
&lt;/h2&gt;

&lt;p&gt;Every input needs a visible, programmatic label. The most reliable way to label an input is with the HTML  element, linked to the input using matching for and id attributes. Example is below:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;label&lt;/span&gt; &lt;span class="na"&gt;for=&lt;/span&gt;&lt;span class="s"&gt;"email"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Email address&lt;span class="nt"&gt;&amp;lt;/label&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;input&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"email"&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"email"&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"email"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In the example above, the first line is the label of the form field. With the proper for and id, we can programmatically link the  tag to the  tag. Additionally to linking the label, when the for and id values match, clicking or tapping the label text also moves focus to the input. &lt;/p&gt;

&lt;h2&gt;
  
  
  When a visible label isn't practical
&lt;/h2&gt;

&lt;p&gt;Some designs use a search bar with a button, or a compact inline form, where a visible label would feel visually cluttered. In those cases, use aria-label or aria-labelledby to provide a label programmatically without showing it visually.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="c"&gt;&amp;lt;!-- aria-label: attach a label string directly to the input --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;input&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"search"&lt;/span&gt; &lt;span class="na"&gt;aria-label=&lt;/span&gt;&lt;span class="s"&gt;"Search the site"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="c"&gt;&amp;lt;!-- aria-labelledby: point to an existing element on the page by its id --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;h2&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"signup-heading"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Create your account&lt;span class="nt"&gt;&amp;lt;/h2&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;input&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"email"&lt;/span&gt; &lt;span class="na"&gt;aria-labelledby=&lt;/span&gt;&lt;span class="s"&gt;"signup-heading"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Use &lt;code&gt;aria-labelledby&lt;/code&gt; when label text already exists on the page. It references that text by id, so screen readers announce it without duplication.&lt;/p&gt;

&lt;h2&gt;
  
  
  Placeholder text is not a label
&lt;/h2&gt;

&lt;p&gt;This is one of the most common labeling mistakes. Placeholder text disappears the moment someone starts typing, screen readers don't reliably announce it as label text, and its low contrast often fails WCAG minimums. It can hint at expected format (like "MM/DD/YYYY"), but it must never stand in for a real label.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="c"&gt;&amp;lt;!-- Wrong: no label, placeholder only --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;input&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"text"&lt;/span&gt; &lt;span class="na"&gt;placeholder=&lt;/span&gt;&lt;span class="s"&gt;"Full name"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="c"&gt;&amp;lt;!-- Right: visible label + placeholder as a format hint --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;label&lt;/span&gt; &lt;span class="na"&gt;for=&lt;/span&gt;&lt;span class="s"&gt;"dob"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Date of birth&lt;span class="nt"&gt;&amp;lt;/label&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;input&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"text"&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"dob"&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"dob"&lt;/span&gt; &lt;span class="na"&gt;placeholder=&lt;/span&gt;&lt;span class="s"&gt;"MM/DD/YYYY"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Marking required fields
&lt;/h2&gt;

&lt;p&gt;If a field is required, mark it in two ways: in the code and in the visible label.&lt;br&gt;
Add &lt;code&gt;required&lt;/code&gt; (or &lt;code&gt;aria-required="true"&lt;/code&gt;) to the input so assistive technology announces it. Then add visible text — like "(required)" — next to the label so sighted users also see it.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;label&lt;/span&gt; &lt;span class="na"&gt;for=&lt;/span&gt;&lt;span class="s"&gt;"name"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Full name (required)&lt;span class="nt"&gt;&amp;lt;/label&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;input&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"text"&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"name"&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"name"&lt;/span&gt; &lt;span class="na"&gt;required&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A red asterisk alone is not sufficient. Screen readers may not announce it, sighted users may not know what it means without a legend, and color alone never conveys meaning in an accessible way. If you do use an asterisk, include a visible legend near the top of the form — for example, "Fields marked with * are required" — and wrap the asterisk in &lt;span&gt; so screen readers skip it and rely on the required attribute instead.&lt;br&gt;
&lt;/span&gt;&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;Fields marked with &lt;span class="nt"&gt;&amp;lt;span&lt;/span&gt; &lt;span class="na"&gt;aria-hidden=&lt;/span&gt;&lt;span class="s"&gt;"true"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;*&lt;span class="nt"&gt;&amp;lt;/span&amp;gt;&lt;/span&gt; are required.&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;label&lt;/span&gt; &lt;span class="na"&gt;for=&lt;/span&gt;&lt;span class="s"&gt;"phone"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Phone number &lt;span class="nt"&gt;&amp;lt;span&lt;/span&gt; &lt;span class="na"&gt;aria-hidden=&lt;/span&gt;&lt;span class="s"&gt;"true"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;*&lt;span class="nt"&gt;&amp;lt;/span&amp;gt;&amp;lt;/label&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;input&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"tel"&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"phone"&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"phone"&lt;/span&gt; &lt;span class="na"&gt;required&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h2&gt;
  
  
  Keep labels close to their inputs
&lt;/h2&gt;

&lt;p&gt;Sighted users scan forms by proximity. Labels should appear directly above or immediately to the left of their input, not below and not far away. This also helps users who zoom in on a page, since distant labels may scroll out of view.&lt;/p&gt;
&lt;h2&gt;
  
  
  Label groups of related inputs
&lt;/h2&gt;

&lt;p&gt;For radio buttons, checkboxes, and other grouped inputs, use&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;fieldset&amp;gt;&lt;/span&gt; and &lt;span class="nt"&gt;&amp;lt;legend&amp;gt;&lt;/span&gt; to label the group as a whole. Each individual option still needs its own &lt;span class="nt"&gt;&amp;lt;label&amp;gt;&lt;/span&gt;.
html
&lt;span class="nt"&gt;&amp;lt;fieldset&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;legend&amp;gt;&lt;/span&gt;Preferred contact method&lt;span class="nt"&gt;&amp;lt;/legend&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;input&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"radio"&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"contact-email"&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"contact"&lt;/span&gt; &lt;span class="na"&gt;value=&lt;/span&gt;&lt;span class="s"&gt;"email"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;label&lt;/span&gt; &lt;span class="na"&gt;for=&lt;/span&gt;&lt;span class="s"&gt;"contact-email"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Email&lt;span class="nt"&gt;&amp;lt;/label&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;input&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"radio"&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"contact-phone"&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"contact"&lt;/span&gt; &lt;span class="na"&gt;value=&lt;/span&gt;&lt;span class="s"&gt;"phone"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;label&lt;/span&gt; &lt;span class="na"&gt;for=&lt;/span&gt;&lt;span class="s"&gt;"contact-phone"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Phone&lt;span class="nt"&gt;&amp;lt;/label&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/fieldset&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Without &lt;code&gt;&amp;lt;fieldset&amp;gt;&lt;/code&gt; and &lt;code&gt;&amp;lt;legend&lt;/code&gt;&amp;gt;, a screen reader user hears "Email, radio button" with no context about what they're choosing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Accessible forms are not an edge case or a nice-to-have, they are a baseline requirement. The labeling practices covered in this article are some of the most impactful changes you can make, because labels are the foundation everything else builds on. A form without proper labels fails before a user even has a chance to fill it out.&lt;/p&gt;

</description>
      <category>a11y</category>
      <category>beginners</category>
      <category>html</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
