CSS, JavaScript and XHTML Explained

Estelle Weyl’s Blog of quirks, random thoughts and funky finds discovered in day-to-day coding

 

WAI-ARIA: Accessible Rich Internet Applications basics March 12, 2008

Filed under: Accessibility, Web Development — Estelle Weyl @ 9:05 pm

Note: This blog is still in development, but it’s come a long way, and it is likely already a bit helpful. I will be adding more example snippets and more about live regions and handling dynamic changes, so come back next week if you want to read more.

What is ARIA?

ARIA stands for Accessible Rich Internet Applications. With the proliferation of internet applications, there has been an increase in the number of sites requiring javascript that update without page refreshes. This imposes accessiblity issues that weren’t addressed by WCAG 1, as those specifications were written when “sites must work without javascript” was a reasonable accessibility specification. With the increase of web based “applications” (versus “sites”) requiring JavaScript, and improved support of javascript in assistive technologies, new accessibility issues have emerged. ARIA attempts to handle some of those issues. Through the inclusion of roles, states and properties your dynamically generated content can be made accessible to assistive technologies. Additionally, static content can be made more accessible thru these additional, enhanced semantic cues.

Why use ARIA?

By including ARIA accessibility features on your website you are enhancing the accessibility of your site or application. By including roles, states and properties, ARIA enables the developer to make the code semantically richer for the assistive technology user. ARIA enables semantic description of element or widget behavior and enables information about groups and the elements within them. ARIA states and properties are accessible via the DOM.

Similar to including the title attribute, ARIA is purely an enhancement and will not harm your site in any way. In other words, there is no valid reason to not include these features! DojoTools currently supports ARIA. Now that IE8 and Firefox 3 (both in beta at the time of this writing) support ARIA, the other JavaScript libraries should soon follow suit.

The easiest to include and most important properties of ARIA are the inclusions for the role attribute, and inclusion of states and properties.

How to incorporate ARIA

  1. Use XHTML the way it was meant to be used wherever possible. Limit ARIA usage to augment XHTML: only use it when XHTML does not support all the semantics required .
  2. Apply ARIA the role attribute in cases where the XHTML needs to be semantically enhanced and in cases where elements are being employed outside of their semantic intent. This includes setting up relationships between related elements (grouping)
  3. Set ARIA states and properties. Set the properties and initial state on dynamically and user changing elements. States, such as “checked”, are properties that may change often. Assistive technology that supports ARIA will react to state and property changes. role changes, on the other hand, may confuse the assistive technology
  4. Support full, usable keyboard navigation. Elements should all be able to have keyboard focus. I am not covering this here, but you can read up on this at For a more in-depth understanding of keyboard navigation see ARIA Best Practices
  5. Make the visual user interface visually match the defined states and properties in browsers that support the ARIA CSS pseudo-classes.

The ARIA role attribute

The role attribute enables the developer to create semantic structure on repurposed elements. While to a sited user, the above example of a span repurposed as a checkbox is not noticeable, the role attribute makes this seemingly non-semantic mark up accessible, usable and interoperable with assistive technologies. Two notes about roles: 1) once set, a role should not be dynamically changed, since this will confuse the assistive technology, and 2) roles take precendence over element default semantic meaning.

Example: Your designer insists that they want the checkboxes on your page to look a certain way. “Impossible” you say. You know that you can use CSS to make a span look like a checkbox. The sited user would never know that your weren’t using
, but for accessibility concerns, you know a screen reader user will not know it’s a checkbox. With the ARIA role attribute included in your code, a both a browser and screen reader that support ARIA, you can make your repurposed span accessible with:

Of course, this case makes me cringe, since it doesn’t work without javascript and it is not inherintly semantic. However, if you are creating a web application requiring javascript, and you are coding this when browsers actually support ARIA, then you gotta do what you gotta do. If you include spans transformed into checkboxes, you will need to include equivalent unobtrusive onkeydown and onclick events.

Implementation of the ARIA role attribute

<ul role="navigation">
  <li><a href="mypage.html">My Page</li>
  <li>....</li>
</ul>

Values for the ARIA role attribute (For descriptions, roll over the items below)

Note: when i have time to populate a dB, i will add a little ajaxian explanation as to the possible parents and children of each role. In the meantime, please visit WAI-ARIA Roles.

ARIA states and properties

Whereas roles are a static attribute of elements, states are properties that can change with user and server interactions. Properties include both dynamic states that need to be updated, and static properties, such as “required”.

Values for the ARIA States (For descriptions, roll over the items below)

Values for the ARIA Properties (For descriptions, roll over the items below)

Certain properties belong with certain roles. For example, autocomplete makes sense with the roles combobox and textbox. The value of the property or state is also limited to certain value types. In our autocomplete example, the value would need to be selected from a list of predetermined values, whereas a checkbox could have a state of invalid, disabled, required or checked, to name a few, with a bolean as the value.

Working with ARIA in Rich Internet Applications

ARIA and Live Regions

Live regions are sections of a web page or application that change dynamically either thru automatic updates or user interaction.
There are 5 properties specific for Live Regions:

Politeness levels: Should ARIA intrude on the user on updates?

The value of the “live” state are expressed in terms of “politeness” levels. “Polite” regions notify of updates but do not interrupt users, and updates take low priority. A level of “rude” would indicate that the assistive technology should interupt the users current action to provide update information. A good example of using a polite level would be the ticker on a financial page — the user does not need to be interupted every 10 seconds to be informed as to whether a stock value has change. An example of a time to use a “rude” level is when the user has completed a step in a checkout process and the next step is visible. Values: Off, Polite, Assertive, Rude.

Validating your XHTML when including un-speced attributes

This section is not finished
There is a tweak that you need to make in your XHTML page if you include ARIA: you need to use XHTML 1.1 and include the ARIA module in your header area. XHTML 1.0 does not support modularization. The ARIA States and Properties attributes will be understood by user agents in XHTML 1.0 by declaring and using the appropriate namespace the same as for XHTML 1.1, but such documents will not validate to the XHTML 1.0 DTD. None of the DTD snippets below enable validation, but I will update when the modules and/or specifications are updated:


xmlns:aaa=”http://www.w3.org/2005/07/aaa” lang=”en”>

Notes:

  • ARIA and HTML: HTML 4.01 is non-extensible, so you can’t use namespaces for the property and state names. Please view the specs as they become available to see the HTML 4.01 support for ARIA.

 
 

IE8 CSS Support: Internet Explorer 8 and CSS 3 March 9, 2008

Filed under: Web Development — Estelle Weyl @ 3:46 pm

IE8 Beta has been released. And, no, it still doesn’t support CSS3 selecteors.

Below are the various CSS selectors, including CSS3 selectors, and current browser support. Green / √ means current support. Orange / Δ means that the browsers have some support for the selector. Red / Χ means that the browser is non-compliant. Non-compliant selectors can be used and a valid way to target individual browsers.

First, "YAY", IE8 supports the :hover pseudo-class on all elements. Now we can make drop down menus without javascript… or, at least, soon we will be able to!

    Browsers
Pattern Meaning IE6 IE7 IE8 FF Op
9
Sf Op FF NS
E:active
E:hover
E:focus
Dynamic pseudo-classes
Matches E during certain user actions.
Δ Δ
Δ Δ
Χ Χ
E:before
E:after
Static pseudo-classes
See generated content
Χ Χ Δ 3
Χ Χ Δ 3

There hasn’t been much improvement in the other selectors:

  iPhn Windows XP Mac OSX
Selector Saf 3.0 FF 2.0 FF 1.5 Op
9.0
Saf
3.0
IE8 IE7 IE6 Saf 1.3 Op FF 2 NS 7.1
*
E
.class Δ
#id
E F 1.
E > F Χ
E + F Χ
E[attr] Δ Δ Χ Δ
E[attr=val] Δ Δ Δ Δ Δ Χ Δ Δ Δ Δ
E[attr~=val] Δ Δ Δ Δ Δ Δ Χ Δ Δ Δ
E[attr|=val] Δ Δ Δ Δ Δ Δ Χ Δ Δ Δ
:first-child Δ Δ Δ Δ Δ Δ Δ Χ Δ Δ Δ
:link Χ
:visited Χ
:lang() Δ Δ Χ Χ Χ Δ
:before Χ Χ Χ
::before Χ Χ Χ Χ
:after Χ Χ Χ
::after Χ Χ Χ Χ
:first-letter Χ Χ
::first-letter Χ Χ Χ
:first-line Χ Χ
::first-line Χ Χ Χ
The following selectors are new to CSS3 (above were in previous versions)
E[attr^=val] Δ Δ Δ Χ Δ Χ 2 Χ Χ Δ Χ Δ Δ
E[attr$=val] Δ Δ Δ Χ Δ Χ 2 Χ Χ Δ Χ Δ Δ
E[attr*=val] Δ Δ Δ Δ Χ 2 Χ Χ Δ Δ Δ
E ~ F Χ Χ Χ
:root Χ Χ Χ Χ Χ
:last-child Χ Δ Δ Χ Χ Χ Χ Χ Χ Χ Δ Δ
:only-child Χ Δ Δ Χ Χ Χ Χ Χ Χ Χ Δ Χ
:nth-child() Χ Χ Χ Χ Χ Χ Χ Χ Χ Χ Χ Χ
:nth-last-child() Χ Χ Χ Χ Χ Χ Χ Χ Χ Χ Χ Χ
:first-of-type Δ Χ Χ Χ Δ Χ Χ Χ Χ Χ Χ Χ
:last-of-type Χ Χ Χ Χ Χ Χ Χ Χ Χ Χ Χ Χ
:only-of-type Χ Χ Χ Χ Χ Χ Χ Χ Χ Χ Χ Χ
:nth-of-type() Χ Χ Χ Χ Χ Χ Χ Χ Χ Χ Χ Χ
:nth-last-of-type() Χ Χ Χ Χ Χ Χ Χ Χ Χ Χ Χ Χ
:empty Χ Δ Δ Χ Χ Χ Χ Χ Χ Χ Δ Δ
:not() Χ Χ Χ Χ Χ
:target Χ Χ Χ Χ Χ
:enabled Χ Χ Χ Χ Χ
:disabled Χ Χ Χ Χ Χ
:checked Χ Χ Χ Χ

Notes:

  1. IE8 gets confused on deprecated attributes and/or empty values
  2. IE8 does understand this selector to some degree, but gets the regex part wrong. Basically, IE8 interprets the selector as E[attr=value], ignoring the regex part. IE8 functions correctly when it comes to case insensitivity.
  3. IE8 does add quoted text before or after the element, but does not implement key term content
  4. IE8 does not heed the star hack. If you used the ster hack for IE7, you won’t need to update your CSS if IE8 has corrected that issue.
 
 

Using images as Bullets in XHTML Lists October 3, 2007

Filed under: Web Development — Estelle Weyl @ 8:35 am

Creating lists with Images as Bullets using CSS

All CSS compliant browsers and IE support images as a list style type. Most designers actually prefer to use images instead of default bullet support because there is more control and more consistency in appearance across different browsers.

While the general idea should be very simple, a simple declaration such as ul {list-style-image:url(../images/bullet.gif);} will only work cross browser if you use a 10px by 10px bullet with small font. The issue is that Firefox vertically aligns the bullet to text bottom and Internet Explorer (at least IE6, IE7 and IE5.5 on Windows), vertically aligns the bullet to text top, so if the user changes their font size, or if your image is not the same height as your text, the bullet will look off.

The solution is to remove the bullet with list-style-type: none; and include a positioned background image instead:

Single Line List Items

ul {
	list-style-type: none;
	margin: 0;
	padding: 0;
	}
li {
	background-image:url(bullet.jpg);
	background-position:0 50%;
	background-repeat:no-repeat;
	padding:0 0 0 25px;
}

Multiple Line List Items

ul {
	list-style-type: none;
	margin: 0;
	padding: 0;
	}
li {
	background-image:url(bullet.jpg);
	background-position:0 0.3em;
	background-repeat:no-repeat;
	padding:0 0 0 25px;
}

Explaining the code

  • We first remove the default bullets with list-style-type: none;. Bullets for list items are defined by the ul. Background images, however, are defined in the li.
  • Set the margin and padding to zero. This is important as browsers differ on whether they use padding or margin for the left indentation. Resetting both to zero would not have been necessary if you started off with the CSS reset as described in CSS Best Practices
  • Feel free to add a margin back onto the UL with margin-left: 0.5em or some other width that makes sense to you. This margin in on the UL and not the LI, so will not impact the placement of your bullets, but rather moves the whole block of list items over to the right.
  • Declare a background image to be used. A no-repeat is important.
    • For one line list items, such as navigation, this is a great spot to use a sprite and change background position for a hover effect.
    • For list items with chances of more than one line of content: don’t use a sprite unless it’s the bottom right hand corner of the sprite that is being used for the bullet.
  • Declare a background position
    • For one line list items, such as navigation, declare the background position as 0 50%. The line background-position:0 50%; means 0% from the left and 50% from the top. Unlike border, margin, etc. shorthand which is top/bottom left/right when 2 values are present, background is left top.
      A background position of 50% will vertically center the background image against the entire li as using percentages with backgrounds means place the xx% point in the image xx% from the top of the container.
    • For list items with chances of more than one line of content use ems instead of % to place the image. The placement will depend on your bullet image size, but generally line background-position:0 0.3em; will be approximately correct (tweak from there).  This will place your image correctly cross browser behind the first line on the left, and will be pushed down a bit or up a bit if the user resizes their text.
  • Give the list item some left padding so that it allows the image to hang off the left hand side of the text and appear like a bullet. Since the bullet is an image, which is sized in pixels, define the left padding in px units rather than em.

See: Using ASCII and UNICODE characters as Bullets with CSS.

 
 

Yet Another Image Replacement Method September 19, 2007

Filed under: Best Practices, CSS (including hacks), Web Development — Estelle Weyl @ 9:39 pm

Semantic CSS Image Replacement

Yes, "YAIRM" ("Yet Another Image Replacement Method") is a crappy acronym. Anyhow….

There have been several image replacement suggestions made over the past 5 years. Semantically, some just don’t make sense. Of course, the accessibility of your image replacement method and the semantic "correctness" has to do with how you code your HTML.

Pros

  • This method works for both in-line and block style elements.
  • Accessible to screen readers and non-image/non-screen media.
  • Does not add extra elements only for styling (no extra span).
  • Works cross browser

Cons

  • Using images for text does not allow for text resizing (like all IR methods).
  • Does not handle "images off/CSS on" scenario; but neither do most layouts with background images, such as the sidebar on this blog.

When I need to replace a header or some other text with an image, I simply give the element my image replacement class (<h1 class="imgreplacement">), and declare the background image, height and width I want to use either by providing an ID and defining the background image in the #id selector, or by targeting the element through specific/unique cascade. I place all of my image replacement css in a media="screen". Even though the media attribute is not heeded by all browsers, it is heeded by devices that are not screens. If your user than prints your webpage, the text that was replaced by an image in the browser will print as it semantically should.

The CSS for the Image Replacement class:

.imgreplacement {
  display:-moz-inline-box;
  display:inline-block;
  background:transparent none 0 0 no-repeat;
  text-indent:-3000px;
  font:0/0 Arial;
  overflow:hidden;
  color:rgba(255,255,255,0);
  vertical-align:bottom;
}

XHTML markup and CSS Overrides:

With my image replacement class, the image replacement method is reusable.

<h1 class="imgreplacment" title="Tool Tip Text here">Semantic Text</h1>
<a href="link.html" class="imgreplacement">Text that makes sense for this link</a>
<button class="imgreplacement" title="Close">Close Module</button>

h1.imgreplacement {
  background-image: url(path/headerimage.jpg);
  height: 60px;
  width: 540px;
	 background-position: 20px 10px;
}

a.imgreplacement {
  background-image: url(path/linkimage.jpg);
  width: 120px;
  height: 60px;
}

button {
  background-image:url(images/redx.gif);
  width: 18px;
  height: 18px;
  border: none; // overwrite default border
  cursor: pointer;
}

This is the button: . Note that is has layout, but it’s inline, and it has a tool-tip

Explanation of the Image Replacement Class:

The imgreplacement class does the following:

  • display:-moz-inline-box;
    and display:inline-block; displays the element as an inline block. inline-block is not part of the CSS specifications, but it is supported by IE and all other grade-A browsers other than Firefox. This enables the image replacement to work on inline elements by enabling them to have width and height. The first line, -moz-inline-box, is for mozilla based browsers that don’t render inline-block. The second line is for IE, Safari 3 and Opera, though IE does not render inline-block truly inline.
  • background: transparent none 0 0 no-repeat; sets a default to non-repeated background image placed at the top-left of the element block, but does not declare a background image, enabling you to overwrite the none with an image via a second, more precise, CSS declaration
  • text-indent:-3000px; Text indent only applies to block elements. text-indent, when implemented, moves the start of the first line of text to the left or right depending on whether the property is assigned a negative or positive value. The text-indent is applied to inline-block elements, but not to -moz-inline-box. Note that IE does not render text-indent correctly, so generally I override the text-indent property for IE, but in this case the disappearing text quirk is to our benefit.
  • font:0/0 Arial; Makes the font tiny or invisible for browsers. There are a few quirks: Opera doesn’t render this shorthand, and renders font-size: 0; at about 7px; IE6 and IE7 both render the font at about 1px and Safari doesn’t render font at size 0, but does intermittently underline the non-visible character at about 1px width per character.
  • overflow:hidden hides anything that might be wider than the space provided. IE6 has the bad habit of deciding to grow elements to fit the content even if the size of the element is defined.
  • color:rgba(255,255,255,0); Makes the font color transparent (opacity of 0) for those browsers that understand opacity via RGBA, which is a feature of CSS3 (Safari 3 and pre-alpha version of Firefox 3, but not IE6, IE7 or Firefox 2 for Windows).
  • vertical-align:bottom; is required for the inline elements - it places them at the same level vertically with respect to the text around it across all grade-A browsers.

Additional tidbits

  • You have to define the width, height and background image of your element.
  • If needed, you can set the background position of the replacement image. It causes fewer cross browser issues to place the background image rather than setting margins due to differences in browsers interpretations of the box-model.
  • Remember to use sematic markup. If the image is an area header, use h1-h6. If it’s a link going somewhere, use <a>. If it isn’t linking anywhere, it’s not a link!
  • You can enhance the image replacement with a title. The title will display in some browsers as a tool tip. This may enhance the accessibility for those who use tooltips regularly.
  • You can declare a different background image using the :hover pseudoclass, so when the user hovers over the element with the mouse pointer, the image changes.

While I just showed you a method of doing image replacement, I must caution against it. Using images for text is not optimum for accessibility. This method enables assistive devices to read your text with the semantic meaning defined by the encompassing element(s). This method enables users of alternative devices, such as cell phones, and text-only browsers to read your content. It also meets web standards in terms of separating content from presentation. However, when you use images to render text, your visitor is unable to control the font-size; which makes your site less than accessible. If you are required to use images instead of text to render content, and you can’t convince your client (boss, designer or contractee, or even yourself) of the stupidity (there, i said it) of using images for text, then this is the best method of making your inaccessible page accessible to the most people. Just try to make the text in your image large enough to be read by a user.

 
 

Favicons: why and how to create favicons September 3, 2007

Filed under: Best Practices, Cursors & Icons, SEO, Web Development — Estelle Weyl @ 9:35 pm

The "WHY" of Favicons

Favicons ARE an integral part of your website and branding.

Favicons are the single most important graphic appearing on a website. While that sounds like a strong statement, it’s true. Favicons are the least expensive and most overlooked visual branding opportunity.

Favicons are the 16 x 16 pixel images that show up in the navigation bar of your browser. They also appear in browser’s bookmark/favorites menu. You might think, "big whoop! that’s not vital." But those aren’t the only places they appear.

They also appear at the bottom of my blog: not my favicon, but the favicon for stumbleupon, digg, technorati, del.icio.us, etc. Web developers and copy editors don’t even need to use the names of those online brands: everyone recognizes these networking favicons.

They now also appear next to the page title on the tabs in tabbed browsers: if a user has 25 browser tabs, each tab may be as narrow as just the favicon: would you prefer your visitors see Internet Explorer’s blue E, Safari’s blue compass, an icon of a page (Firefox and Opera), or would you prefer that they see your logo? If they see a logo, they recognize immediately what site is opened in each tab: you want to be one of those recognized pages.

Are you looking at your open browser tabs? Can you tell which pages are which? Have you checked your bookmarks list? Are there some bookmarks that stand out more than others? Have you looked at the bottom of this blog entry? Depending on how many toolbars you have downloaded and have open, you may have a plethora of favicons there too. So, have I convinced you?

The "HOW" of Favicons: How to design & create a FavIcon:

Designing a Favicon:

  • If you have a logo that easily translates into something that looks decent at 32 x 32 or 16 x 16, use it.
  • If you can avoid using the color blue, especially the glassy shiny blue of IE, avoid using it.
  • Keep it simple. Yahoo uses a Y!, Google uses a G. Flickr uses two little circles. Delicious is a square made of 4 squares. IE is an E. These are all ones you know.
  • If your logo is very complex, try using just a part of it such as the first letter. If your first letter doesn’t represent your company well enough (like in the case of this blog), use your logo color to abstract an image.

Creating a FavIcon: Converting an image to a .ico

  • Following the suggestions above, create a 48×48 or a 32 x 32 image that you will use as your favicon. Save it.
  • If you have photoshop, you can download a Favicon extension for Photoshop. If you don’t have photoshop, or don’t want to deal with extensions, you can visit Dynamic Drive and use their tool to convert your .jpg, .png or .gif into a .ico file. The file created will be called favicon.ico. You will be directed to download it.
  • Upload the .ico file to the root directory of your website.
  • If your favicon is named favicon.ico, then you don’t need to add code. However, if you don’t have the .ico file in your top level directory, or if you saved it under a different file name, or if you have different favicons for different parts of your site (not usually a good idea, but Yahoo has different icons for some of their properties, such as Yahoo! answers), then include the following in the header:
     

    <link rel="shortcut icon" href="http://www.mysite.com/myicon.ico" type="image/x-icon" />

Uses of Favicons

Now your favicon can appear all across the web:

 
 

Alternative Text for Images: the ALT attribute August 25, 2007

Filed under: Accessibility, Best Practices, Web Development — Estelle Weyl @ 11:44 am

For a webpage to validate and be accessible, all images must have a value for the alt attribute, even if that value is empty. The XHTML DTD requires only two atttributes for the img element: src and alt. The XHTML DTD tells you it needs to be there. WCAG tells you a bit more about what it needs to look like. Unfortunately, W3C writings are is not always understandable. This entry will explain, in human terms, how to write the values for your alt attributes.

Section 508/WCAG alt attribute Guidelines:

The first Section 508 guidelines states, "A text equivalent for every non-text element shall be provided (e.g., via "alt", "longdesc", or in element content)". Checkpoint 1.1, the first priority of priority 1 of the WCAG guidelines states the same thing: Provide a text equivalent for every non-text element (e.g., via "alt", "longdesc", or in element content). This includes: images, graphical representations of text (including symbols), image map regions, animations (e.g., animated GIFs), applets… (I shortened it. the W3C tends to be loquacious.)

Decorative Images

Decorative images include background images, bullets, <hr /> equivalents, spacer images, etc. These types of images make the page prettier but have no semantic value for a webpage. The alt attribute for decorative images should be empty: <img src="path/image.gif" alt="" />.

Notes:

  • If you’ve read any of my other blog entries, or other articles on web standards, you likely will never have an empty alt attribute, since you are separating the content layer from the presentation layer; and therefore not including decorative images in your XHTML; opting instead for the use of CSS.
  • If you include an empty alt attribute, screen readers will skip over the image. If you fail to put an alt attibute in, the screen reader will read the entire URL of the image. Can you imagine listening to a robot say "spacer gif spacer gif spacer gif" repeatedly, or, worse, going letter bu letter thru the underscores and extensions of a filename generated by ImageReady.

Icons

The alt attribute of an icon should describe the intention of the icon, since an icon can have differing meanings depending on the context, and someone who has never seen the icon wouldn’t understand whatit emant if only visually described.

icon possible relevant values for alt useless alt
"correct", "open", "start", "completed", "asset", "" circle with check mark
  "stop", "wrong", "delete", "close window", "", "remove module", "delete email" red cross
  "RSS Feed", "add RSS feed to reader, "" orange square with 3 lines.
"answer", "enter password", "", "primary key", "security feature", "" gold key
"security feature", "blocked", "password protected" closed lock

The desription of the appearance of the icon is almost alwasys a useless alt attribute value. Unless you are writing a manual on graphic design or on understanging iconography, don’t include a description of the icon as the value of the alt attribute.

An empty string is a possible relevant value for all icon alt attributes. When an icon appears directly before an equivalent definition of the function of that icon, then the value of the alt attribute should be empty. The two most common examples of this are the print and email icons:

icon possible relevant values for alt useless alt
"open email", "email messages", "go to inbox", "send an email, "" inbox, email
print, "" print

When an icon describes the text immediately preceding or following it, it is redundant to include a value for the alt attribute of the icon. The screen reader will read "print print", or "email email".

Sample alt attribute encoding for icons:

 

Wrong:
<a href="inbox.html"><img src="icon/email.gif" /> inbox</a> //missing alt attribute

Will validate, but not really good: Screenreader will say “go to inbox inbox”
<a href="inbox.html"><img src="icon/email.gif" alt="go to inbox" /> inbox</a> //redundant alt attribute

Better, and correct:
<a href="inbox.html"><img src="icon/email.gif" alt="" /> inbox</a>

Best: seperates content from presentation
<a href="inbox.html" class-"email">inbox</a>

with the css of

a.email {
    padding-left: 18px;
    background: tranparent url(icon/email.gif) no-repeat 0 0;
    }

Notes:

  • Although it is generally best to use CSS background images (including sprites) if you are going to use an icon
  • If you use a sprite, the alt altribute should describe the relevant section of the sprite. Don’t write "sprite of icons". Instead, follow the recommendations above (all those images are actually one transparent .gif — a sprite.

Buttons, navigation and other images with text

If you are still using images for the elements in your navigation bar (shame on you!), the general rule is that the value of the alt attribute must match the text of the image. If your image says only "about", the value of the alt attribute should also read about. Then include more detail about the destination in the title attribute of the parent anchor tag.

<a href="about/index.html" title="About the Author"><img src="img/nav_about.jpg" alt="about" /></a>.

Include the text that appears within your image as the value of the image’s alt attribute.

If you are using mystery meat navigation, you should describe relevant text in the alt, not the an explanation of the iconography of the tab. This may go against standards guidelines, but since mystery meat navigation goes against web standards, at least make your website accessible to the visually impaired, even if it isn’t accessible to sighted users.

Instead of using an <img> for navigation, use text, and make your link attractive, including using your image, via CSS using image replacement. I will include a blog entry on image replacement in the near future, since i use it a lot. In the meantime, you can look it up on any search engine.

Images, without text, that link to somewhere

Sometimes it makes sense to actually use images, without image replacement, to link to a page. For example, on Facebook, Yahoo, and maybe on your company’s about page, thumbnail images of people or avatars may link to the person’s profile. If the image is within the same link as a text link, the alt attribute should be left empty. If not, however, the link should describe the purpose of the link: <a href="bios/jane.html"><img src="img/thmb_jane.jpg" alt="Jane Smith's profile" /></a>.

This is similar to the explanation on icons above. Let’s say you do use just the email icon (from the icon example above). The correct presentation would be:

<a href="inbox.html"><img src="icon/email.gif" alt="go to inbox" /></a>

Complex, detailed images that "convey 1000 words"

Sometimes images are worth a thousand words. Maps, Graphs and Charts are examples of images that contain information necessary to understanding the message of a page but too complex to be described in under 255 characters. If the complex image is followed by text explaining or detailing the content of the image, like you might find in a journal article, then a simple alt attribute value suffices.If there is information conveyed in the image that is not explained in the text following the image and is too complex to describe in 2 sentences, like you might find in a powerpoint presentation, then you need an alternative method of explaining the content of the image to those unable to view the image. In other words, if all the data presented in your image is reiterated as text, then an alt attribute value of "graph of blood pressure by age group" suffices. If there is information that is conveyed in the image that is not reiterated as text for all of your visitors to read (and search engines to find), then you should include a longer description of the image in the form of a longdesc attribute linking to content describing in full detail the contents of your image.

The longdesc attribute

longdesc is an optional attribute of the <img> and <frame> elements. The longdesc property specifies a url for a longer description of the contents of the current frame. The longdesc attribute is coded like this::

<img src="graph.gif" alt="graph of blood pressure by age group(long description available)" longdesc="supportfiles/graphdescribed.html" />

You then need to create a separate page for your longdescription. This page should include the description and a link back the current page. The longdesc attribute’s purpose is to provide a link to a separate page where a long description is available. This link is invisible to the sighted user but available to those using screen readers.

The longdesc functionality is rarely implemented in websites despite it’s being the recommendation of the WC3 and Section 508 guidelines. For this reason, you should:

  • Include the fact that a long description is available in the alt attribute value of the image: it’s used so infrequently that even those using screen readers may not otherwise notice you included it. alt="graph of blood pressure by age group(long description available)"
  • It’s better to not use the longdesc attribute, opting instead to fully describe the contents of the image in the text for all readers. This method provides more fodder for search engines, and explains the content of your graph that even sighted users may not have otherwise noticed or derived.
  • To test whether it’s necessary, turn off images and see if all the information conveyed in the image is presented in the text in the page. If yes, longdesc is not necessary. If not, either include more descriptive text, or include a longdesc.
  • When I receive data graphs, I usually include a datatable with the data conveyed in the graph. Most charts are created using MS Excel (open MS Excel, select "Insert" > "Chart"). Ask whoever created your chart image for the original Excel file, and present the data from the spreadsheet in a data table. If you don’t have the original spreadsheet, if the chart is detailed enough to require a longdesc, then it’s detailed enough to be able to cull the data.
  • WebAIM provides more information on the longdesc attribute.

Other images

This is for all other images! All othIf you included a picture of yourself standing with Britney Spears, your alt attribute value should minimally read "Britney Spears and me". You can, of course, add a few more details to better describe the image if there is other relevant information presented in the image that the visitor should know.

 
 

CSS & Javascript Character Entity Calculator

Filed under: CSS (including hacks), Character Entities, JavaScript, Web Development — Estelle Weyl @ 10:38 am

Javascript and CSS Entity Conversion Calculator

Enter your HTML Entity Character number (such as &#2335 or just 2335 - ट) to get the CSS and JS values for that entity. Explanations on how to use the results are below.







(open in new window). named entities | numeric entities | 2,636 entities

Example of JavaScript Charater Entities and the DOM

Example Code (This is the code for the dynamically generated content in the button above).
var calc = document.getElementById("calculator");
var theButton = calc.getElementsByTagName(’button’)[0];
var buttonOptions = ['\u03a0\u03a1\u0395\u03a3\u03a3', '\u2660\u2663\u2665\u2666', '\u221a'];
var rand = Math.floor(Math.random()*buttonOptions.length);
var buttonText = document.createTextNode(buttonOptions[rand]);
var z = theButton.appendChild(buttonText);

The Explanation:
Line 1: gets the div containing the button.
Line 2: gets the button as an elementNode
Line 3: creates an array of strings that are made up of encoded entities. The could also read var buttonOptions = ['� ΡΕΣΣ', '� ♣♥♦', '√'];
Line 4: Creates a random number; in this case either 0, 1 or 2, since there are 3 elements in our array.
Line 5: creates a text node containing the string of javascript character entities.
Line 6: Appends the textNode created in line 5 to the elementNode targeted by line 2. We also create the variable z as a reference to the button’s textNode. I can then use that reference replaceChild() method.

Including Character Entities in JavaScript and CSS

The processes for including special characters in JavaScript and CSS are very similar:

  1. hex encode the numeric HTML entity value.
  2. Preced the hex-value with a slash "\" in CSS and a slash+U "\u" for JavaScript.
  3. Include your entity in your code/markup.

Javascript Character Entities

alert('M\u00E9nage \u00E0 trois.') Try it

CSS Character Entities

    #heart {list-style-type:none;}
    #heart li:before {content:'\2665 '; color:#FF33FF; padding-right:1em;}
  • In all but IE, this will be preceded by a heart

Notes:

  • Don’t know the numeric value of the entity you want to include? named entities in alphabetical order which may be a good place to start. Find the entity you are looking for there by appearance, then do a search for the numeric entity on the Named Entities in Numeric Order page. Or, you can simply search the first 5800 character Entities. At some point I’ll add the rest of ‘em.
  • Remember that IE doesn’t understand the :before pseudoclass with content, and you would have to set the list-style-type as none, or you would get 2 bullets in CSS compliant browsers.
  • In javascript you can also use octal values instead of hexadecimal values for the first 255 or so characters. Yup, that’s trivia!

Including Entities without Encoding them

The reason I always use encoded entities is because I have no clue how to use my keyboard to get the right letters. It’s faster for me to look up the letter from Named Entities in Numeric Order then it is for me to look up the keyboard sequence to display the same character. For the following sample, I pulled up the "character map" that came with my OS.
You can include odd characters if you correctly set your content-Type to UTF-8.
That is the setting for this page, which allows for the following code without HTML or JS encoding.

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

alert('Ế ế ∑ ở Ẅ ۹'); Try it

The question is, short of editing your .htaccess character set, how do you tell your external scripts to be served up in UTF-8? This is external and doesn’t work. I tried <script type="text/javascript" src="/articles/entitycalculator.js" charset="utf-8"></script>, but it doesn’t work.

 
 

First 5800 Numeric HTML Character Entities August 4, 2007

Filed under: Web Development — Estelle Weyl @ 10:52 am

First 5800 Numeric HTML Character Entities

Below are left-to-right entities (Hebrew and Arabic were removed). To learn how to include the entities below in CSS or Javascript, please read visit Javascript, CSS, and (X)HTML entities in numeric order or convert is with the javascript and CSS entity calculator.

&#11; =
&#12; =
&#32; =
&#33; = !
&#34; = "
&#35; = #
&#36; = $
&#37; = %
&#38; = &
&#39; = '
&#40; = (
&#41; = )
&#42; = *
&#43; = +
&#44; = ,
&#45; = -
&#46; = .
&#47; = /
&#48; = 0
&#49; = 1
&#50; = 2
&#51; = 3
&#52; = 4
&#53; = 5
&#54; = 6
&#55; = 7
&#56; = 8
&#57; = 9
&#58; = :
&#59; = ;
&#60; = <
&#61; = =
&#62; = >
&#63; = ?
&#64; = @
&#65; = A
&#66; = B
&#67; = C
&#68; = D
&#69; = E
&#70; = F
&#71; = G
&#72; = H
&#73; = I
&#74; = J
&#75; = K
&#76; = L
&#77; = M
&#78; = N
&#79; = O
&#80; = P
&#81; = Q
&#82; = R
&#83; = S
&#84; = T
&#85; = U
&#86; = V
&#87; = W
&#88; = X
&#89; = Y
&#90; = Z
&#91; = [
&#92; = \
&#93; = ]
&#94; = ^
&#95; = _
&#96; = `
&#97; = a
&#98; = b
&#99; = c
&#100; = d
&#101; = e
&#102; = f
&#103; = g
&#104; = h
&#105; = i
&#106; = j
&#107; = k
&#108; = l
&#109; = m
&#110; = n
&#111; = o
&#112; = p
&#113; = q
&#114; = r
&#115; = s
&#116; = t
&#117; = u
&#118; = v
&#119; = w
&#120; = x
&#121; = y
&#122; = z
&#123; = {
&#124; = |
&#125; = }
&#126; = ~
&#127; = 
&#128; = €
&#129; =
&#130; = ‚
&#131; = ƒ
&#132; = „
&#133; = …
&#134; = †
&#135; = ‡
&#136; = ˆ
&#137; = ‰
&#138; = Š
&#139; = ‹
&#140; = Œ
&#142; = ž
&#145; = ‘
&#146; = ’
&#147; = “
&#148; = ”
&#149; = •
&#150; = –
&#151; = —
&#152; = ˜
&#153; = ™
&#154; = š
&#155; = ›
&#156; = œ
&#158; =
&#159; = Ÿ
&#160; =  
&#161; = ¡
&#162; = ¢
&#163; = £
&#164; = ¤
&#165; = ¥
&#166; = ¦
&#167; = §
&#168; = ¨
&#169; = ©
&#170; = ª
&#171; = «
&#172; = ¬
&#173; = ­
&#174; = ®
&#175; = ¯
&#176; = °
&#177; = ±
&#178; = ²
&#179; = ³
&#180; = ´
&#181; = µ
&#182; = ¶
&#183; = ·
&#184; = ¸
&#185; = ¹
&#186; = º
&#187; = »
&#188; = ¼
&#189; = ½
&#190; = ¾
&#191; = ¿
&#192; = À
&#193; = Á
&#194; = Â
&#195; = Ã
&#196; = Ä
&#197; = Å
&#198; = Æ
&#199; = Ç
&#200; = È
&#201; = É
&#202; = Ê
&#203; = Ë
&#204; = Ì
&#205; = Í
&#206; = Î
&#207; = Ï
&#208; = Ð
&#209; = Ñ
&#210; = Ò
&#211; = Ó
&#212; = Ô
&#213; = Õ
&#214; = Ö
&#215; = ×
&#216; = Ø
&#217; = Ù
&#218; = Ú
&#219; = Û
&#220; = Ü
&#221; = Ý
&#222; = Þ
&#223; = ß
&#224; = à
&#225; = á
&#226; = â
&#227; = ã
&#228; = ä
&#229; = å
&#230; = æ
&#231; = ç
&#232; = è
&#233; = é
&#234; = ê
&#235; = ë
&#236; = ì
&#237; = í
&#238; = î
&#239; = ï
&#240; = ð
&#241; = ñ
&#242; = ò
&#243; = ó
&#244; = ô
&#245; = õ
&#246; = ö
&#247; = ÷
&#248; = ø
&#249; = ù
&#250; = ú
&#251; = û
&#252; = ü
&#253; = ý
&#254; = þ
&#255; = ÿ
&#256; = Ā
&#257; = ā
&#258; = Ă
&#259; = ă
&#260; = Ą
&#261; = ą
&#262; = Ć
&#263; = ć
&#264; = Ĉ
&#265; = ĉ
&#266; = Ċ
&#267; = ċ
&#268; = Č
&#269; = č
&#270; = Ď
&#271; = ď
&#272; = Đ
&#273; = đ
&#274; = Ē
&#275; = ē
&#276; = Ĕ
&#277; = ĕ
&#278; = Ė
&#279; = ė
&#280; = Ę
&#281; = ę
&#282; = Ě
&#283; = ě
&#284; = Ĝ
&#285; = ĝ
&#286; = Ğ
&#287; = ğ
&#288; = Ġ
&#289; = ġ
&#290; = Ģ
&#291; = ģ
&#292; = Ĥ
&#293; = ĥ
&#294; = Ħ
&#295; = ħ
&#296; = Ĩ
&#297; = ĩ
&#298; = Ī
&#299; = ī
&#300; = Ĭ
&#301; = ĭ
&#302; = Į
&#303; = į
&#304; = İ
&#305; = ı
&#306; = IJ
&#307; = ij
&#308; = Ĵ
&#309; = ĵ
&#310; = Ķ
&#311; = ķ
&#312; = ĸ
&#313; = Ĺ
&#314; = ĺ
&#315; = Ļ
&#316; = ļ
&#317; = Ľ
&#318; = ľ
&#319; = Ŀ
&#320; = ŀ
&#321; = Ł
&#322; = ł
&#323; = Ń
&#324; = ń
&#325; = Ņ
&#326; = ņ
&#327; = Ň
&#328; = ň
&#329; = ʼn
&#330; = Ŋ
&#331; = ŋ
&#332; = Ō
&#333; = ō
&#334; = Ŏ
&#335; = ŏ
&#336; = Ő
&#337; = ő
&#338; = Œ
&#339; = œ
&#340; = Ŕ
&#341; = ŕ
&#342; = Ŗ
&#343; = ŗ
&#344; = Ř
&#345; = ř
&#346; = Ś
&#347; = ś
&#348; = Ŝ
&#349; = ŝ
&#350; = Ş
&#351; = ş
&#352; = Š
&#353; = š
&#354; = Ţ
&#355; = ţ
&#356; = Ť
&#357; = ť
&#358; = Ŧ
&#359; = ŧ
&#360; = Ũ
&#361; = ũ
&#362; = Ū
&#363; = ū
&#364; = Ŭ
&#365; = ŭ
&#366; = Ů
&#367; = ů
&#368; = Ű
&#369; = ű
&#370; = Ų
&#371; = ų
&#372; = Ŵ
&#373; = ŵ
&#374; = Ŷ
&#375; = ŷ
&#376; = Ÿ
&#377; = Ź
&#378; = ź
&#379; = Ż
&#380; = ż
&#381; = Ž
&#382; = ž
&#383; = ſ
&#384; = ƀ
&#385; = Ɓ
&#386; = Ƃ
&#387; = ƃ
&#388; = Ƅ
&#389; = ƅ
&#390; = Ɔ
&#391; = Ƈ
&#392; = ƈ
&#393; = Ɖ
&#394; = Ɗ
&#395; = Ƌ
&#396; = ƌ
&#397; = ƍ
&#398; = Ǝ
&#399; = Ə
&#400; = Ɛ
&#401; = Ƒ
&#402; = ƒ
&#403; = Ɠ
&#404; = Ɣ
&#405; = ƕ
&#406; = Ɩ
&#407; = Ɨ
&#408; = Ƙ
&#409; = ƙ
&#410; = ƚ
&#411; = ƛ
&#412; = Ɯ
&#413; = Ɲ
&#414; = ƞ
&#415; = Ɵ
&#416; = Ơ
&#417; = ơ
&#418; = Ƣ
&#419; = ƣ
&#420; = Ƥ
&#421; = ƥ
&#422; = Ʀ
&#423; = Ƨ
&#424; = ƨ
&#425; = Ʃ
&#426; = ƪ
&#427; = ƫ
&#428; = Ƭ
&#429; = ƭ
&#430; = Ʈ
&#431; = Ư
&#432; = ư
&#433; = Ʊ
&#434; = Ʋ
&#435; = Ƴ
&#436; = ƴ
&#437; = Ƶ
&#438; = ƶ
&#439; = Ʒ
&#440; = Ƹ
&#441; = ƹ
&#442; = ƺ
&#443; = ƻ
&#444; = Ƽ
&#445; = ƽ
&#446; = ƾ
&#447; = ƿ
&#448; = ǀ
&#449; = ǁ
&#450; = ǂ
&#451; = ǃ
&#452; = DŽ
&#453; = Dž
&#454; = dž
&#455; = LJ
&#456; = Lj
&#457; = lj
&#458; = NJ
&#459; = Nj
&#460; = nj
&#461; = Ǎ
&#462; = ǎ
&#463; = Ǐ
&#464; = ǐ
&#465; = Ǒ
&#466; = ǒ
&#467; = Ǔ
&#468; = ǔ
&#469; = Ǖ
&#470; = ǖ
&#471; = Ǘ
&#472; = ǘ
&#473; = Ǚ
&#474; = ǚ
&#475; = Ǜ
&#476; = ǜ
&#477; = ǝ
&#478; = Ǟ
&#479; = ǟ
&#480; = Ǡ
&#481; = ǡ
&#482; = Ǣ
&#483; = ǣ
&#484; = Ǥ
&#485; = ǥ
&#486; = Ǧ
&#487; = ǧ
&#488; = Ǩ
&#489; = ǩ
&#490; = Ǫ
&#491; = ǫ
&#492; = Ǭ
&#493; = ǭ
&#494; = Ǯ
&#495; = ǯ
&#496; = ǰ
&#497; = DZ
&#498; = Dz
&#499; = dz
&#500; = Ǵ
&#501; = ǵ
&#502; = Ƕ
&#503; = Ƿ
&#504; = Ǹ
&#505; = ǹ
&#506; = Ǻ
&#507; = ǻ
&#508; = Ǽ
&#509; = ǽ
&#510; = Ǿ
&#511; = ǿ
&#512; = Ȁ
&#513; = ȁ
&#514; = Ȃ
&#515; = ȃ
&#516; = Ȅ
&#517; = ȅ
&#518; = Ȇ
&#519; = ȇ
&#520; = Ȉ
&#521; = ȉ
&#522; = Ȋ
&#523; = ȋ
&#524; = Ȍ
&#525; = ȍ
&#526; = Ȏ
&#527; = ȏ
&#528; = Ȑ
&#529; = ȑ
&#530; = Ȓ
&#531; = ȓ
&#532; = Ȕ
&#533; = ȕ
&#534; = Ȗ
&#535; = ȗ
&#536; = Ș
&#537; = ș
&#538; = Ț
&#539; = ț
&#540; = Ȝ
&#541; = ȝ
&#542; = Ȟ
&#543; = ȟ
&#544; = Ƞ
&#545; = ȡ
&#546; = Ȣ
&#547; = ȣ
&#548; = Ȥ
&#549; = ȥ
&#550; = Ȧ
&#551; = ȧ
&#552; = Ȩ
&#553; = ȩ
&#554; = Ȫ
&#555; = ȫ
&#556; = Ȭ
&#557; = ȭ
&#558; = Ȯ
&#559; = ȯ
&#560; = Ȱ
&#561; = ȱ
&#562; = Ȳ
&#563; = ȳ
&#592; = ɐ
&#593; = ɑ
&#594; = ɒ
&#595; = ɓ
&#596; = ɔ
&#597; = ɕ
&#598; = ɖ
&#599; = ɗ
&#665; = ʙ
&#600; = ɘ
&#601; = ə
&#602; = ɚ
&#603; = ɛ
&#604; = ɜ
&#605; = ɝ
&#606; = ɞ
&#607; = ɟ
&#608; = ɠ
&#609; = ɡ
&#610; = ɢ
&#611; = ɣ
&#612; = ɤ
&#613; = ɥ
&#614; = ɦ
&#615; = ɧ
&#616; = ɨ
&#617; = ɩ
&#618; = ɪ
&#619; = ɫ
&#620; = ɬ
&#621; = ɭ
&#622; = ɮ
&#623; = ɯ
&#624; = ɰ
&#625; = ɱ
&#626; = ɲ
&#627; = ɳ
&#628; = ɴ
&#629; = ɵ
&#630; = ɶ
&#631; = ɷ
&#632; = ɸ
&#633; = ɹ
&#634; = ɺ
&#635; = ɻ
&#636; = ɼ
&#637; = ɽ
&#638; = ɾ
&#639; = ɿ
&#640; = ʀ
&#641; = ʁ
&#642; = ʂ
&#643; = ʃ
&#644; = ʄ
&#645; = ʅ
&#646; = ʆ
&#647; = ʇ
&#648; = ʈ
&#649; = ʉ
&#650; = ʊ
&#651; = ʋ
&#652; = ʌ
&#653; = ʍ
&#654; = ʎ
&#655; = ʏ
&#656; = ʐ
&#657; = ʑ
&#658; = ʒ
&#659; = ʓ
&#660; = ʔ
&#661; = ʕ
&#662; = ʖ
&#663; = ʗ
&#664; = ʘ
&#666; = ʚ
&#667; = ʛ
&#668; = ʜ
&#669; = ʝ
&#670; = ʞ
&#671; = ʟ
&#672; = ʠ
&#673; = ʡ
&#674; = ʢ
&#675; = ʣ
&#676; = ʤ
&#677; = ʥ
&#678; = ʦ
&#679; = ʧ
&#680; = ʨ
&#681; = ʩ
&#682; = ʪ
&#683; = ʫ
&#684; = ʬ
&#685; = ʭ
&#688; = ʰ
&#689; = ʱ
&#690; = ʲ
&#691; = ʳ
&#692; = ʴ
&#693; = ʵ
&#694; = ʶ
&#695; = ʷ
&#696; = ʸ
&#697; = ʹ
&#698; = ʺ
&#699; = ʻ
&#700; = ʼ
&#701; = ʽ
&#702; = ʾ
&#703; = ʿ
&#704; = ˀ
&#705; = ˁ
&#706; = ˂
&#707; = ˃
&#708; = ˄
&#709; = ˅
&#710; = ˆ
&#711; = ˇ
&#712; = ˈ
&#713; = ˉ
&#714; = ˊ
&#715; = ˋ
&#716; = ˌ
&#717; = ˍ
&#718; = ˎ
&#719; = ˏ
&#720; = ː
&#721; = ˑ
&#722; = ˒
&#723; = ˓
&#724; = ˔
&#725; = ˕
&#726; = ˖
&#727; = ˗
&#728; = ˘
&#729; = ˙
&#730; = ˚
&#731; = ˛
&#732; = ˜
&#733; = ˝
&#734; = ˞
&#735; = ˟
&#736; = ˠ
&#737; = ˡ
&#738; = ˢ
&#739; = ˣ
&#740; = ˤ
&#741; = ˥
&#742; = ˦
&#743; = ˧
&#744; = ˨
&#745; = ˩
&#768; = ̀
&#769; = ́
&#770; = ̂
&#771; = ̃
&#772; = ̄
&#773; = ̅
&#774; = ̆
&#775; = ̇
&#776; = ̈
&#777; = ̉
&#778; = ̊
&#779; = ̋
&#780; = ̌
&#781; = ̍
&#782; = ̎
&#783; = ̏
&#784; = ̐
&#785; = ̑
&#786; = ̒
&#787; = ̓
&#788; = ̔
&#789; = ̕
&#790; = ̖
&#791; = ̗
&#792; = ̘
&#793; = ̙
&#794; = ̚
&#795; = ̛
&#796; = ̜
&#797; = ̝
&#798; = ̞
&#799; = ̟
&#800; = ̠
&#801; = ̡
&#802; = ̢
&#803; = ̣
&#804; = ̤
&#805; = ̥
&#806; = ̦
&#807; = ̧
&#808; = ̨
&#809; = ̩
&#810; = ̪
&#811; = ̫
&#812; = ̬
&#813; = ̭
&#814; = ̮
&#815; = ̯
&#816; = ̰
&#817; = ̱
&#818; = ̲
&#819; = ̳
&#820; = ̴
&#821; = ̵
&#822; = ̶
&#823; = ̷
&#824; = ̸
&#825; = ̹
&#826; = ̺
&#827; = ̻
&#828; = ̼
&#829; = ̽
&#830; = ̾
&#831; = ̿
&#832; = ̀
&#833; = ́
&#834; = ͂
&#835; = ̓
&#836; = ̈́
&#837; = ͅ
&#838; = ͆
&#839; = ͇
&#840; = ͈
&#841; = ͉
&#842; = ͊
&#843; = ͋
&#844; = ͌
&#845; = ͍
&#846; = ͎
&#847; = ͏
&#864; = ͠
&#865; = ͡
&#866; = ͢
&#884; = ʹ
&#885; =͵
&#890; = ͺ
&#894; = ;
&#900; = ΄
&#901; = ΅
&#902; = Ά
&#903; = ·
&#904; = Έ
&#905; = Ή
&#906; = Ί
&#908; = Ό
&#910; = Ύ
&#911; = Ώ
&#912; = ΐ
&#913; = Α
&#914; = Β
&#915; = Γ
&#916; = Δ
&#917; = Ε
&#918; = Ζ
&#919; = Η
&#920; = Θ
&#921; = Ι
&#922; = Κ
&#923; = Λ
&#924; = Μ
&#925; = Ν
&#926; = Ξ
&#927; = Ο
&#928; = Π
&#929; = Ρ
&#931; = Σ
&#932; = Τ
&#933; = Υ
&#934; = Φ
&#935; = Χ
&#936; = Ψ
&#937; = Ω
&#938; = Ϊ
&#939; = Ϋ
&#940; = ά
&#941; = έ
&#942; = ή
&#943; = ί
&#944; = ΰ
&#945; = α
&#946; = β
&#947; = γ
&#948; = δ
&#949; = ε
&#950; = ζ
&#951; = η
&#952; = θ
&#953; = ι
&#954; = κ
&#955; = λ
&#956; = μ
&#957; = ν
&#958; = ξ
&#959; = ο
&#960; = π
&#961; = ρ
&#962; = ς
&#963; = σ
&#964; = τ
&#965; = υ
&#966; = φ
&#967; = χ
&#968; = ψ
&#969; = ω
&#970; = ϊ
&#971; = ϋ
&#972; = ό
&#973; = ύ
&#974; = ώ
&#976; = ϐ
&#977; = ϑ
&#978; = ϒ
&#979; = ϓ
&#980; = ϔ
&#981; = ϕ
&#982; = ϖ
&#983; = ϗ
&#984; = Ϙ
&#985; = ϙ
&#986; = Ϛ
&#987; = ϛ
&#988; = Ϝ
&#989; = ϝ
&#990; = Ϟ
&#991; = ϟ
&#992; = Ϡ
&#993; = ϡ
&#994; = Ϣ
&#995; = ϣ
&#996; = Ϥ
&#997; = ϥ
&#998; = Ϧ
&#999; = ϧ
&#1000; = Ϩ
&#1001; = ϩ
&#1002; = Ϫ
&#1003; = ϫ
&#1004; = Ϭ
&#1005; = ϭ
&#1006; = Ϯ
&#1007; = ϯ
&#1008; = ϰ
&#1009; = ϱ
&#1010; = ϲ
&#1011; = ϳ
&#1012; = ϴ
&#1013; = ϵ
&#1014; = ϶
&#1024; = Ѐ
&#1025; = Ё
&#1026; = Ђ
&#1027; = Ѓ
&#1028; = Є
&#1029; = Ѕ
&#1030; = І
&#1031; = Ї
&#1032; = Ј
&#1033; = Љ
&#1034; = Њ
&#1035; = Ћ
&#1036; = Ќ
&#1037; = Ѝ
&#1038; = Ў
&#1039; = Џ
&#1040; = А
&#1041; = Б
&#1042; = В
&#1043; = Г
&#1044; = Д
&#1045; = Е
&#1046; = Ж
&#1047; = З
&#1048; = И
&#1049; = Й
&#1050; = К
&#1051; = Л
&#1052; = М
&#1053; = Н
&#1054; = О
&#1055; = П
&#1056; = Р
&#1057; = С
&#1058; = Т
&#1059; = У
&#1060; = Ф
&#1061; = Х
&#1062; = Ц
&#1063; = Ч
&#1064; = Ш
&#1065; = Щ
&#1066; = Ъ
&#1067; = Ы
&#1068; = Ь
&#1069; = Э
&#1070; = Ю
&#1071; = Я
&#1072; = а
&#1073; = б
&#1074; = в
&#1075; = г
&#1076; = д
&#1077; = е
&#1078; = ж
&#1079; = з
&#1080; = и
&#1081; = й
&#1082; = к
&#1083; = л
&#1084; = м
&#1085; = н
&#1086; = о
&#1087; = п
&#1088; = р
&#1089; = с
&#1090; = т
&#1091; = у
&#1092; = ф
&#1093; = х
&#1094; = ц
&#1095; = ч
&#1096; = ш
&#1097; = щ
&#1098; = ъ
&#1099; = ы
&#1100; = ь
&#1101; = э
&#1102; = ю
&#1103; = я
&#1104; = ѐ
&#1105; = ё
&#1106; = ђ
&#1107; = ѓ
&#1108; = є
&#1109; = ѕ
&#1110; = і
&#1111; = ї
&#1112; = ј
&#1113; = љ
&#1114; = њ
&#1115; = ћ
&#1116; = ќ
&#1117; = ѝ
&#1118; = ў
&#1119; = џ
&#1120; = Ѡ
&#1121; = ѡ
&#1122; = Ѣ
&#1123; = ѣ