Гэты дакумент закліканы адказаць на некаторыя часта задаюць пытанні па W3C, WWW-стыль спісу рассылання ў сувязі з CSS, як гэта працуе і чаму пэўныя рэчы як яны ёсць.
Тое, што гэта не з'яўляецца: Агульныя пытанні аб тым, як выкарыстоўваць і вывучаць CSS. Гэта для прасунутых карыстальнікаў, якія хочуць даведацца больш аб фоны CSS.
Я імкнемся захаваць гэты FAQ працы ў прагрэс, і дадання новых элементаў, кожны раз у той час. Калі ў вас ёсць якія-небудзь каментары, не саромейцеся адправіць мне па электроннай пошце, або на WWW-стыль спісу рассылання.
align для блокаў, замест таго, каб выкарыстоўваць margin: auto ? Важна разумець, што патрабуюцца гады для новых магчымасцяў ў поўнай меры паказаны, рэалізаваны і ў іх дастаткова ахопу карыстальнікаў, перш чым вы можаце выкарыстоўваць яго.
Кожная функцыя пачынаецца з прапановы. Існуе нічога не ўдакладняецца, і, як толькі гэта будзе мець атрымліваюць падтрымку з боку розных бакоў у выглядзе ліку WD s. Як толькі гэта досыць спелай, каб перайсці да CR, ён будзе яшчэ прайсці гады, пакуль браўзэры яго ажыццяўлення, і больш гадоў, перш чым гэтыя новыя версіі браўзэраў выкарыстоўвае досыць шмат людзей, што вы можаце на самай справе залежаць ад іх.
Як доўга, што займае роўна залежыць ад многіх рэчаў, такіх як CSS хуткасці прыняцця і пазіцыі на рынку браўзэраў, і як хутка працэс стандартызацыі і карыстальнікаў міграцыі будзе. Скажам, 2 гады для ўдакладнення, за 3 гады да прыняцця ўсіх распаўсюджаных рухавікоў браўзэра, і яшчэ 5 гадоў таму большасць карыстальнікаў абнавілі. У суме гэта складае 10 гадоў. У залежнасці ад абставін, гэта можа быць лепш ці магло быць і горш. У больш аптымістычныя сцэнары, тыя 10 гадоў, можа быць 7 гадоў, або нават 5, але я думаю, што 10 гадоў досыць рэалістычнымі. Вы кажаце пра многіх гадоў у любым выпадку.
Як, напрыклад, думаць аб display: table. Гэта быў паказаны (у якасці рэкамендацыі) на працягу сямі гадоў, але браўзэр у цяперашні час самы вялікі рынак доля да гэтага часу не рэалізавалі яго. Мяркуючы, што маючыя адбыцца IE7 будзе ажыццяўляць гэта, колькі яшчэ гадоў ён будзе прымаць да IE6 падтрымка можа быць выдалены? Inline-block, які таксама будзе вельмі карысная, мае падобную гісторыю ў Mozilla.
Гэта даволі экстрэмальныя прыклады і Ёсць, вядома, шматлікіх частках CSS 2, якія былі рэалізаваны, але гэта факт, што маючыя адбыцца IE7 не будзе выконваць любыя CSS3, і ні слова аб наступнай версіі пасля таго, ні набор функцый ён будзе мець.
І гэта толькі частка CSS 2.1. Хоць CSS3 мае шэраг модуляў, якія выйшлі на Candidate Recommendation, гэта ўсё яшчэ вельмі шмат працы ў прагрэс. CSS3 не будзе падтрымлівацца для IE7, мае мала падтрымкі ў оперы, і, хоць Mozilla падтрымлівае некаторыя CSS3, гэта далёка не поўны.
Але гэта таксама залежыць ад асяроддзя, тое, што вы хочаце выкарыстоўваць CSS для. Напрыклад, паглядзіце на "Прынц", рухавічок для пераўтварэння XML + CSS у фармаце PDF. Калі вы выкарыстоўваеце Прынц для публікацыі ў Інтэрнэце або на паперы, вы карыстаецеся толькі адно размяшчэнне рухавіка, для якіх развіццё адносна перадавых, і вам не трэба чакаць прыняцця карыстальнікам. Так што ў гэтым выпадку вялікая частка CSS3 ўжо можа быць рэалізаваны і гатовы да выкарыстання ў два-тры гады, калі спецыфікацыі паспелі.
У любым выпадку, кропка гэтага падзела сказаць, што ў CSS Ёсць не кароткатэрміновыя рашэння або хуткіх рашэнняў. Рэчы павінны быць добра прадуманы і быць цвёрдымі, таму што гэта зойме шмат часу для іх, каб можна было выкарыстоўваць, і як толькі яны будуць вызначаны і рэалізаваны яны будуць на працягу доўгага часу.
Таму любое прапанову, ніколі не будзе вырашаць вашы прамая задача.
У мінулым, Рэкамендацыя (R) азначае, што спецыфікацыя была скончаная (гэта было ў выпадку з CSS2.0). У цяперашні час Candidate Recommendation (CR) азначае, што спецыфікацыі завершаны, і што ёсьць заклік да рэалізацыі. Гэтыя рэалізацыі ацэньваюцца, калі Ёсць два поўных сумяшчальнасці рэалізацый спецыфікацыі, то яна становіцца Рэкамендацыі.
Дадатковыя рэндэрынгу (у пазбяганне reflows)
Аказанне вэб-сайтаў паступова, пакуль яны загружаюцца з'яўляецца важным актывам, пры гэтым, што, reflows непажаданыя, таму што яны павольна і выглядаюць пачварна.
Асабліва ў CSS3 гэта не заўсёды падпарадкоўваліся (напрыклад, з :nth-last-child() ), але тым не менш, калі вы паглядзіце, як CSS работ і рашэнні, якія былі зробленыя ў яго канструкцыі, вы ўбачыце, уплыў гэтага правіла ўсё час.
Гэта таксама азначае, што прапановы, якія лічаць аказанне дадатковых маюць павышаны шанец быць прынятай, чым тыя, якія гэтага не робяць.
Няма цыклічныя спасылкі
Цыклічныя спасылкі азначае, што два элемента (напрыклад, ўласцівасці і/або селектары) залежаць адзін ад аднаго дзяржавы. Гэта можа прывесці да зацыклення ў спробах вырашаць свае канчатковым стане, і нават калі завесы выяўлення праводзіцца іх выніковае значэнне невядома.
Дадатковыя рэндэрынгу з'яўляецца магчымасць адлюстравання змесціва дакумента, які ўсё яшчэ загружаны. Гэта з'яўляецца каштоўным актывам, таму што карыстальнікі не павінны чакаць ўвесь дакумент, каб нагрузкі, што можа заняць нямала часу, у залежнасці ад памеру дакумента, прапускная здольнасць кліента, прапускная здольнасць сервера, месцаў пра кліента і серверы і г.д.
Важнай часткай дадатковых рэндэрынгу, каб пазбегнуць аплаўлены s. Аплаўлены ўсяго дакумента азначае, што ён павінен быць звернута усё нанова, што з'яўляецца вельмі павольны працэс, і, такім чынам, каб па магчымасці пазбягаць.
Такім чынам, дадатковыя рэндэрынгу і пазбегнуць reflows важна CSS, паколькі ён захоўвае рэчы хутка і проста. Асабліва на старых сістэмах, такіх як мабільныя тэлефоны, WebTV, і браўзэры на старых кампутарах, такіх як MSX reflows вельмі дарагіх аперацый. Але і на сучасных сістэмах, такіх як настольныя ПК яны маюць значны ўплыў на прадукцыйнасць, у выніку вельмі павольнай рэагавання пры загрузцы, а часта і выродлівыя бачныя "здымкаў", калі размяшчэнне усё мяняецца, як больш змесціва загружаецца (вы часта можаце ўбачыць гэта ў Табліца макетаў на аснове).
Каб пазбегнуць CSS рэалізацыі павольныя тэмпы развіцця і трымаць селектары просты, Ёсць цэлы шэраг абмежаванняў, устаноўленых на тым, што CSS селектараў можа зрабіць. У рэшце рэшт, яны павінны быць ацэнены для ўсіх элементаў у дакуменце.
Павінен ацаніць у O (1) часу.
Гэта азначае, што яны заўсёды павінны мець магчымасць запускаць ў пэўны прамежак часу, і не можа заняць больш часу ў вялікіх дакументах. Прычынай гэтага з'яўляецца вычислимости.
Яны працуюць ад элемента пункту гледжання
Гэта азначае, што: "У мяне ёсць гэты элемент тут, якія стылі прымяняюцца да яго?" (CSS селектары), а не "У мяне ёсць запыт, які элементаў робіць гэты стыль прымяняецца да" (XPath).
Прычынай гэтага з'яўляецца вычислимости. Выкарыстаньне XPath-падобных селектараў, усе стылі б быць перагледжана, калі дакумент дынамічна змяняцца (напрыклад, дадатковыя нагрузкі).
Ацэнка павінна быць магчымасць паступова.
Гэта так, што дакументы можна загрузіць паступова без неабходнасці reflows.
Ёсць ужо цэлы шэраг CSS3 селектараў, якія парушаюць гэтае памяшканне: :last-child і :nth-last-child().
Магчыма, не залежаць ад уласцівасцяў
Асноўная праблема ў тым, што вы можаце вельмі лёгка стварыць цыклічныя спасылкі, якія цяжка выявіць, можа выклікаць бясконцы цыкл, калі не злавілі, і невядома паводзіны, калі знойдзены.
Акрамя таго, селектары вырашыць, перш чым ўласцівасці. Таму гэта не магчыма даведацца ўласцівасці элемента значэння ў адпаведнасць селектар час зроблена.
...
Многія людзі задаюцца пытаннем, чаму CSS не дазваляе аўтару паказаць нумар версіі табліцы стыляў яны ствараюць, таму што, вядома, што б дапамагчы сумяшчальнасць у будучыні? Я пералічу шэраг прычын, з-за адсутнасці інфармацыі версій ніжэй.
Існуе толькі адна версія CSS. Лічбы ў CSS1, CSS 2.1 і CSS 3 ставяцца да ўзроўню спецыфікацыі, то ёсць прагрэс. Вы можаце назваць гэта вехі, або вынікаў, а таксама. Гэта, верагодна, прасцей за ўсё цытатай Берт Босы:
CSS з'яўляецца занадта вялікім, каб развівацца ў адзін прыём. Акрамя таго, каб дамагчыся яго прыняцця 10 гадоў таму ў разгар вайны браўзэраў, яна павінна быць вельмі просты. Вось чаму мы узроўнях. Але ўзроўні толькі канцэптуальныя адрозненні, азначала для нас, распрацоўнікаў. Вы можаце ўбачыць іх у выглядзе профіляў, калі вы хочаце, як і мабільны профіль або профіль друку, але ў рэчаіснасці яны нават не гэта.
У першую чаргу, асноўнай канструкцыі CSS утрымлівае шэраг уласцівасцяў, якія робяць яе устойлівай да будучых змяненняў. Адным з іх з'яўляецца каскадны, якая дазваляе карыстальніку пазначыць рэзервовы стыль у выпадку пэўных функцыя не падтрымліваецца. Іншы CSS сваёй строгай памылак правілы, якія гарантуюць, што CSS аналізатар будзе ігнараваць тое, што ён не ведае, ва ўстаноўленым парадку.
Акрамя таго, спецыфікацыя CSS працэс заснаваны на публікацыі рабочых праектаў і прасіць ўклад як у дзяржаўным, і членаў рабочай групы, якія прафесійныя спецыялісты галіны з розных кампаній. З-за гэтага працэсу, большасць немагчымым асаблівасці і недахопы дызайну прызнаныя на ранняй стадыі, і ўстараняць або палепшыць.
Ёсць, вядома, выпадкі, калі функцыі, якія зрабілі яго ў канчатковай спецыфікацыі аказваецца неоптимальной. У тых выпадках, заўсёды ёсць месца для творчых рашэнняў. Напрыклад, уласцівасці могуць быць уведзеныя для ўстаноўкі розных рэжымаў (напрыклад, прапаноўваецца box-model уласнасці), і ўласцівасці могуць быць ператвораныя ў скарачэнняў (неаднаразова аб гэтым у CSS3, напрыклад, display, display-model і display-role ).
Самае галоўнае: версіямі зломіць наперад сумяшчальнасці. Для версій, каб быць карысным, стыляў неподдерживаемых версій павінна быць праігнаравана. Непажаданага выніку: новая версія будзе толькі карыснай, калі гэта звычайна ажыццяўляецца, таму час абароту паміж спецыфікацыяй і дастатковая распаўсюджванне карыстальнікаў павялічыцца шмат. Карыстальнік не можа выкарыстоўваць функцыі з новай версіі ў табліцу стыляў для старых версій без павелічэння нумар вэрсіі, у выніку чаго яго перастаць працаваць у старых браўзэраў. Толькі ліквідаваць праблему, неабходна стварыць нейкі рэзервовай сістэмы.
Ён таксама ўносіць дадатковыя складанасці для распрацоўнікам мець справу, таго, каб адключыць пэўныя функцыі і змяніць сваё паводзіны для розных версій. Стварэнне добрага набору тэстаў для розных версій і як яны ўзаемадзейнічаюць з адзін аднаго вельмі цяжка. Сапраўды таксама, захаванне розных версій у рамках рэалізацыі таксама прыводзіць шмат дадатковай працы і праблемы.
Калі вы паглядзіце на прычыны, чаму людзі хочуць інфармацыю аб версіі ў CSS, вы можаце шырока адрозніваць тры выпадкі:
У дадзеным прыкладзе першым выпадку, калі граматыка элементы змяняюцца (напрыклад, сінтаксісу XML, замяніўшы CSS селектары з XPath, або змяненне пазіцыянавання усе мадэлі), вы сапраўды змяняецца сам мову. У такім выпадку наўрад ці ён усё яшчэ можа быць названа "CSS". Крайні Берт Босы зноў:
У прыватнасці, калі існуе неабходнасць новага мовы табліцы стыляў, мы зробім, але гэта не будзе называцца "CSS версіі 2." Гэта было б проста зман. Яна будзе называцца KASWI або Hapa або TUBIU ці нешта іншае, што не могуць быць зблытаны з "CSS".
Часта чулі аргумент у тым, што пажадана, каб састарэлым ўласцівасці могуць быць выдаленыя з мовы. Але на самай справе, якія існуюць CSS на вэб-не знікне на працягу працяглага доўгі час, таму выдаленне падтрымку некаторых уласцівасцю будзе перапынак шмат старонак. Гэта тое, што распрацоўшчык не будзе рабіць, і тое, што CSS не жаданне зрабіць што-небудзь.
Другі выпадак з'яўляецца найбольш распаўсюджанай прычынай прапаноў інфармацыю аб версіі. Гэта можа быць ненаўмыснага, і быць пакрытыя ў сінтаксісе якія непасрэдна не адносяцца да відавочным імёны браўзэр і нумар версіі (напрыклад, тэсціраванне, а не для "падтрымкі" некаторых уласцівасцяў), але гэта тое, што ён звычайна аказваецца. Садзейнічанне для параўнання адрозненняў у рэалізацыі не пажадана, таму што гэта будзе спрыяць стыляў аўтарам да толькі пэўную колькасць карыстацкіх агентаў. Гэта таксама дасць распрацоўнікам падстава, каб не выправіць няправільнае паводзіны.
Апошнім выпадку ідзе аб праверцы выканання палітыкі, а не аб змяненні, што стыль выказвае. Крытэрыяў ацэнкі, у такім выпадку, як вядома па загадзя, і любое значэнне, названае ў табліцы стыляў варта ігнараваць, паколькі яна не мае значэння тое, што аўтар лічыць, стыляў, не можа быць кошт залежыць ад. Праверкі для праверкі ажыццяўляецца з валідатары які даецца профіль ён павінен праверыць супраць. Так што ў гэтым выпадку нумар версіі можна ў лепшым выпадку быць класіфікаваны як мэта-інфармацыя, і адхіліў па той жа прычыне, як @author "Grauw" і г.д.
Нарэшце, калі CSS ніколі мае патрэбу версіямі, @version "6.0" -иш правілы могуць быць уведзеныя ў любы час. Да тых часоў, версій механізм не з'яўляецца неабходным і, такім чынам, не пажадана.
Глядзіце таксама: Re: [CSS21] Версіі аб CSS Берт Босы, якія змяшчаюць дадатковую інфармацыю ў сувязі з CSS рабочай групы пазіцыі на версіямі.
Сучасныя метады фармат, выкарыстоўваючы паплаўкі і памылак слупкоў не з'яўляюцца дастатковымі і вельмі hackish. Збольшага гэта, улічваючы, што IE браўзэр не цалкам падтрымлівае пазіцыю: абсалютная, але ў цэлым казаў CSS мае недастатковую асабліва для разметкі.
Берт Босы (CSS РГ старшыня) піша ў паведамленне ў гэты спіс час таму, што CSS РГ думаў аб сетку макета: Re: пазіцыя: фіксаваная і жа-спасылкі на дакументы
Глядзіце таксама: апаратна-незалежныя браўзэр: CSS і сетка макета
У цяперашні час, вы можаце выкарыстоўваць абсалютная пазіцыянаванне і table спосабы адлюстравання (не забудзьцеся выкарыстоўваць table-layout: fixed таксама), каб дасягнуць многіх макетаў, ці ў больш рэалістычныя сцэнары (з-за адсутнасці падтрымкі браўзэра для display: table ), адзін з многіх метадаў штучнага слупкоў.
Большасць, калі не ўсе метады, якія прапануецца ёсць праблемы ў паслядоўным стварэнні малюнкаў. Калі дакумент складаецца з дзвюх частак, (рух) і B (па ўтрыманні), і дакумент парадку змянення метаду кажа, што B павінна быць аказана, перш чым, то браўзэр павінен аплаўлены ўвесь дакумент кожны раз, калі дадатковыя часткі B з'яўляецца загружаны.
Гэта таксама адносіцца да вышэйпаказаным прапануецца макет сеткі, і тое, што дысплей табліцы і абсалютная пазіцыянаванне ў CSS 2 павінны былі пазбегнуць.
Звярніце ўвагу, што вы можаце цяпер ужо мяняць парадку дакумента ў двух асноўных браўзэрах з дапамогай XSLT. Хоць XSLT не вельмі добрым кандыдатам, так як ён не можа апрацоўваць дадатковыя рэндэрынгу і дынамічнага змены.
Таксама чытайце хаку У. Лі 'S Фарматаванне аб'ектаў лічацца шкоднымі, пра тое, чаму Опера робіць і не будзе падтрымліваць XSLT (які тады быў у спалучэнні з XSL-FO).
Толькі наступныя ўласцівасці падтрымліваецца для display: table-column і table-column-group элементаў: border, background, width і visibility. Хтосьці можа спытаць, чаму б не больш уласцівасцяў будзе падтрымлівацца на слупкі табліцы? Было б зручна, каб мець магчымасць стыль цэлыя слупкі табліцы ў адзін прыём.
Адказ на гэтае пытанне, што ўласцівасці, якія паказваюць на table-column элемента не атрымліваюць успадкаваныя ад вочак табліцы. Успадкоўванне ў CSS робіцца структуры дакумента, уласцівасці могуць быць успадкаваны ад бацькоўскага элемента, а не інакш. Змяненне гэта можа паўплываць на паслядоўным стварэнні малюнкаў, ствараць магчымасці цыклічных спасылак, і г.д. Іншымі словамі: ўскладняць рэчы і стварыць больш магчымасцяў для UA S паводзіць сябе непаслядоўна.
Замест гэтага, width выкарыстоўваецца алгарытм шырыні табліцы, border ажыццяўляецца па спецыяльных правілах выпадку за мяжы на сталах, background сапраўды аказаў на калонку, а не на асобныя ячэйкі табліцы, і бачная толькі таму што звычайна ячэйкі табліцы маюць празрыстую фон, і для visibility толькі табліцы канкрэтных collapse значэнне мае ніякага эфекту.
Тым не менш, дызайн ў калонцы можа быць дасягнута з дапамогай td:nth-child(n). Праблема з гэтым у тым, што гэта 1. не сумяшчальныя з калонкай пралётаў (хоць гэта можа быць, выкарыстоўваючы [colspan=n] селектары ў падрабязным спосабам), і 2. яна не можа працаваць на калонках з рознымі індэксамі, але таго ж класа. Выбар, як :nth-column() не з'яўляецца рашэннем, паколькі гэта будзе залежаць ад мноства уласцівасцяў, стварэння цыклічных залежнасцяў. Акрамя таго, такі селектар не разглядаюцца Другая праблема, згаданых вышэй.
align для блокаў, замест таго, каб выкарыстоўваць margin: auto ? Узгадненне ажыццяўляецца шляхам налады блока поля. Тэарэтычных align: center будзе рабіць тое ж самае зробяць гэтыя палі роўныя па шырыні. І align: right будзе такі ж, як стварэнне правага поля нуля, і няхай левая прыняць пакінутая прастора.
Што CSS РГ маглі б зрабіць, гэта вызначыць align як скарачэнне маёмасць, якое задае margin-left і margin-right ўласцівасці небудзь auto auto, 0 auto або auto 0 для center, left і right значэння. Але, што б дадаць дадатковыя складанасці для спецыфікацыі, а гэта ўжо добра працуе, як ён робіць зараз.