19.08.2010

Чаму “left: -9999px” лепш, чым “display: none”

Original on www.nickfitz.co.uk

Апошняе абнаўленне: Сара Коблентц адзначае ў сваіх каментарах, што метады могуць апынуцца дарэчным у залежнасці ад акалічнасцяў. Я згадваю пра гэта ў апошнім пункце для таго, каб вам было зразумела, што перад назвай “лепш” павінны быць словы “звычайна” ці “часта” ці некаторая іншая назва. Гэта сапрўды так.

Абнаўленне другое. Снежань 2008: У наш час прызнана, што лепш выкарыстоўваць top: -9999px;, бо выкарыстанне left: выкліча прагорткі на старонцы тэксту справа-налева.

Паўтаральныя пытанні на розных спісах рассылання, такіх як дыскусійны ліст Web Standards, часцей за ўсе такія – “Як я магу схаваць утрыманне, але ў той жа час мець доступ да яго?” Гэта, як правіла, пытаюць у рамках метадаў змены малюнкаў, дзе вы можаце, напрыклад, пажадаць, каб назва адлюстроўвалася з дапамогай мудрагелістага шрыфта, але дагэтуль змесціва павінна быць даступным толькі для карыстачоў з дапаможнымі тэхналогіямі, такімі як экран праграмнага забеспячэння пры чытанні.

Два метады, да якіх належыць CSS, як правіла, прыходзяць у гэтых дыскусіях: першы хавае тэкст за кошт выкарыстання display: none ці visibility: hidden і пазіцыянуе ці размяшчае тэкст на экране, выкарыстоўваючы абсалютнае пазіцыянаванне і left: -9999px, ці margin-left: -9999px.

Пытанні доступу вызначаліся яшчэ ў чэрвені 2005 года, што display і visibility метады апынуліся недаступнымі для чытання з экрана, у той час як метад пазіцыянавання кадра стаў даступным. Поўныя вынікі тут прадстаўлены больш падрабязна.

Аднак ніхто нават не паспрабаваў адказаць на вельмі простае пытанне, чаму так адбылося.. Натхнёны яшчэ адной праблемай, я вырашыў дакапацца да ісціны, бо калі я не ведаю, чаму я раблю штосьці, я не магу быць упэўненым, што менавіта я павінен рабіць гэта.

Спытаеце людзей, якія ведаюць

Да майго здзіўлення, пошук у бібліятэках Microsoft Developer Network хутка прывёў мяне да тлумачэння, якое я шукаў. (Я быў здзіўлены, таму што пошук у бібліятэках MSDN славіцца тым, што вяртае ўчасткі вынікаў нават найпростага пошуку; Я чуў сведчанні таго, што распрацоўнікі Microsoft шукаюць уласную бібліятэку з дапамогай Google з site:msdn.microsoft.com .)

Бібліятэчная інфармацыя пра даступнасць падтрымкі ў Internet Explorer з’яўляецца шырокай, але інфармацыя пра нябачныя аб’екты была вельмі карыснай і дазволіла запошніць прабелы маіх ведаў . Цытую:

У Internet Explorer 6 і пазнейшых pvarState параметры IAccessible::get_accState уласнасці атрымлівае STATE_SYSTEM_OFFSCREEN, калі аб’ект нябачны з-за прагорткі і атрымлівае STATE_SYSTEM_INVISIBLE, калі аб’ект нябачны, паколькі яго IHTMLStyle::visibility маёмасць ўсталявана ў hidden ці Яго IHTMLStyle:display маёмасць ўсталявана ў none.

Ізноў на ангельскай мове?

Для чытання з экрана не загружайце старонку HTML: браўзар (як правіла, Internet Explorer) зробіць гэта. Адзінае, што можа рабіць Screen Reader, гэта спытаць пра IE змесціва, выкарыстоўваючы API, якое завецца Microsoft Active Accessibility (MSAA). MSAA дазваляе чытаць з экрана, каб у якасці браўзара дайсці да ўтрымання старонкі.Наколькі я разумею, усе пойдзе наступным чынам;

Internet Explorer:

Гэй, я толькі што загрузіў старонку.

Screen Reeder:

Добра, што ён атрымаў на гэта?

Internet Explorer:

Спачатку артыкул, потым некаторыя спасылкі, а затым некалькі пунктаў.

Screen Reeder:

OK, дайце нам артыкул.

Internet Explorer:

Ён кажа: “Сардэчна запрашаем у HyperGlobalMegaCorp”.

Screen Reeder:

Так, павесіць на хвіліну. (Кажа дадзены тэкст для карыстача.)

… І гэтак далей, вы атрымаеце агульнае ўяўленне.

Ключавым з’яўляецца тое, што IE не проста вяртае утрыманне для таго, каб яго як-небудзь абмяркоўвалі, але і вяртае інфармацыю пра само ўтрыманне. Яно ўключае інфармацыю, якая праходзіць пад імгненным іменем pvarState, а адным з аспектаў гэтай інфармацыі з’яўляецца тое, што ён можа сказаць Screen Reeder, пра якое ўтрыманне зараз пытаюцца (напрыклад, загаловак у папярэднім дыялогу). Насамрэч тое, што знаходзіца на экране, можа з’яўляецца як бачным, так і небачным. (Заўважым, што гэтыя тэрміны не выкарыстоўваюцца тут гэтак жа, як і ў CSS.)

Ёсць тры спосабы, пры якіх IE пачынае разглядаць што-небудзь як штосьці нябачнае:

  1. Яна мае ўласцівасці CSSdisplaу,усталяваныя для карысці none;
  2.  Яна маеCSS уласнасціvisibility,усталеўваныя для карысціhidden;
  3. Менавіта ў такім становішчы будзе неабходна вылучыць акно для таго, каб яно стала бачным.

IE адрознівае тры формы нябачнасці, падзяліўшы іх на два тыпы. Першыя дзве формы нябачнасці пазначаны pvarState значэннем STATE_SYSTEM_INVISIBLE, і канчатковы выгляд пазначаецца коштам STATE_SYSTEM_OFFSCREEN.

І ўрэшце ўсё гэта становіцца ясна: Screen Reeder будзе разглядаць змесціва STATE_SYSTEM_OFFSCREEN як утрыманне, якое ен павінен чытаць, таму што яно нябачнае толькі таму, што не знаходзіцца ў бачнай вобласці акна: урэшце, чытачы экрана, ад якіх патрабуюць пракручваць акно, каб прачытаць усё змесціва, будзе для ўсіх прадстаўляць вельмі малую карысць. Іnternet Explorer з’яўляецца адзіным чыннікам, чаму ўтрыманне не можа быць фактычна вылучана ў полі зроку пры выкарыстанні левай ці верхняй тэхнікі пазіцыянавання. Internet Explorer сам па сабе не падтрымлівае канцэпцыю прагорткі вакна, хоць я і лічу, што гэта не з’яўляецца абмежаваннем механізма прагорткі Windows.

Аднак, калі на экране чытач знаходзіць стан утрымання STATE_SYSTEM_INVISIBLE, ён відавочна лічыць, што ен павінны быць утоеным, пагэтаму нічога і не гаворыць

Такім чынам, паехалі: выкарыстоўвайце адзін з метадаў, і на экране чытач будзе адносіцца належным чынам да вашага змесціва, выкарыстоўвайце display ці visibility метад, і Screeen Reeder выдаліць яго, а гэта азначае, што гэта надзейны спосаб утойвання змесціва як ад звычайных карыстачоў, так карыстачоў Screen Reeder, але толькі, калі ў вас есць сур’езныя падставы для гэтага. Але ведаючы ўсе гэта, вышэй інфармацыі, вы, прынамсі, ужо будзеце ведаць, чаму вы выкарыстоўваеце той метад, да якога вы звяртаецеся.

Comments are closed.