ほがCSSになった蚀語

こんにちは、Habr歎史が少し違っおいれば、CSSになる可胜性のある蚀語に぀いお、ザックブルヌムがCSSになった蚀語の翻蚳に泚目したす。





, ( ) , ( ) , TeX, Microsoft Word . : ", ".



— , 1994


Tim Berners-Leeが1991幎にHTMLの䜜成を発衚したずき、ペヌゞのスタむルを蚭定する方法はありたせんでした。 HTMLタグのレンダリング方法はブラりザによっお決定され、ナヌザヌの奜みに倧きく圱響されたした。ただし、ペヌゞが奜みのスタむルのレンダリングに぀いお「ヒント」を䞎えるこずができる暙準ツヌルを䜜成するこずは良い考えのように思われたした。



しかし、CSSが登堎する前は、ただ5幎であり、完党に実装されるたでにはさらに10幎かかりたした。それは、暙準になる可胜性のある倚くの競合する様匏の䜜成に぀ながった、ハヌドワヌクず革新の期間でした。



これらの蚀語は明らかに今日広く䜿甚されおいたせんが、䞖界がどのようなものであるかを考えるこずは私にずっお興味深いこずです。さらに驚くべきこずに、これらの蚀語の倚くには、開発者が今日でもCSSで喜んで䜿甚する機胜がありたす。



最初の候補者



1993幎の初めには、モザむクブラりザはバヌゞョン1.0にさえ到達せず、既存のすべおのブラりザはHTMLでのみ機胜しおいたした。HTMLスタむルを指定する方法がなかったので<h1>、ブラりザヌがタグを衚瀺するこずを決定した方法でタグが衚瀺されたした。



同幎6月、Robert Reischはwww-talkメヌリングリストに、「Webドキュメントずずもにスタむル情報を䌝達するための簡単に解析できる圢匏」を䜜成する提案を提出したした。これをRRPず呌びたした。



@BODY fo(fa=he,si=18)


このコヌドが䜕をするのか理解しおいなければ、それは非垞に蚱されたす。 gzip以前の時代、接続速床が通垞14.4 kbps未満であったずき、この新しいフォヌマットのコンテンツを可胜な限りコンパクトに保぀​​こずは論理的でした。具䜓的には、このルヌルは、フォントファミリfaheずしおHelveticaを遞択し、フォントサむズsiを18ポむントに蚭定したす。



䞍思議なこずに、Reischの提案には単䜍がなく、すべおの数倀はコンテキストに基づいお解釈されおいたしたたずえば、すべおのフォントサむズはポむント単䜍でした。これは、RRPが仕様ではなく、「レンダラヌ向けのヒントずコツのセット」ずしお蚭蚈されおいるためです。同じスタむルシヌトが通垞のテキストモヌドブラりザで機胜するはずだったため、これが必芁であるず考えられたしたLynx、そしおたすたす人気のあるグラフィカルブラりザで。





Lynxブラりザのスクリヌンショット



興味深いこずに、RRPには列レむアりトを指定する方法が含たれおいたす。これは2011幎たでCSSでは䞍可胜でした。たずえば、それぞれ幅80ナニットの3぀の列は、次のようになりたす。



@P co(nu=3,wi=80)


解析するのは少し難しいですが、おそらくwhite-space: nowrap。よりもそれほど難しいこずではありたせん。



RRPは、スタむルシヌトを今日関連付ける「カスケヌド」のいずれもサポヌトしおいなかったこずは泚目に倀したす。今日の私たちにずっおは珍しいこずですが、どのドキュメントにも䞀床に1぀のアクティブなスタむルシヌトしか含めるこずができたせん。これは、ドキュメントのスタむル蚭定の堎合には非垞に論理的です。



Mark AndreessenMosaicの䜜成者であり、最終的に最も人気のあるブラりザヌになりたしたは、RRPの提案に぀いお知っおいたしたが、Mosaicに実装したこずはありたせんでした。代わりに、MosaicはほずんどすぐにスタむリングにHTMLタグを䜿甚するずいう道を歩みこれはかなり悲劇的です、<FONT>やのようなタグを远加したした<CENTER>。



ビオラずプロトブラりザりォヌズ



「それなら、そこにある倚くのスタむルシヌト提案の1぀を実装しないのはなぜですか。適切な構造があれば、これで問題はほが完党に解決されたす。」


次に、「ドキュメントを䜜成するにはこの蚀語を孊習しおから、ドキュメントを垌望どおりに衚瀺するために別の蚀語を孊習する必芁がありたす」ず人々に䌝える必芁がありたす。ああ、圌らはそれを奜きになるでしょう。



-マヌク・アンドリヌセン、1994幎


䞀般に信じられおいるこずずは反察に、Mosaicは最初のグラフィカルブラりザではありたせんでした。その前に、Pei- YuanWeiがわずか4日で䜜成したグラフィカルブラりザであるViolaWWWがありたした。





Viola Browser



Pei-Yuanのスクリヌンショットは、今日のCSSで䜿甚されおいる皮類の階局構造をサポヌトするスタむルシヌト蚀語を䜜成したした。



(BODY fontSize=normal
      BGColor=white
      FGColor=black
  (H1   fontSize=largest
        BGColor=red
        FGColor=white)
)


この堎合、ドキュメントの本文本文に色を適甚し、特にH1本文内のスタむリングを行いたす。このネストを制埡するためにセレクタヌを繰り返す代わりに、PWPは括匧システムを䜿甚したした。これにより、スタむラスやSASSなどの蚀語で䜿甚されおいるむンデントシステムを思い浮かべるこずができたす。これにより、PWP構文は、Webのナニバヌサル蚀語に時間ずずもに進化しおきたCSSよりも少なくずも1぀の点で優れおいる可胜性がありたす。



PWPには、珟圚でも䜿甚されおいる倖郚スタむルシヌトを参照する方法があるこずも泚目に倀したす。



<LINK REL="STYLE" HREF="URL_to_a_stylesheet">


残念ながら、ViolaWWWは、䞻にXりィンドりシステムで動䜜するように䜜成されたした。Xりィンドりシステムは、Unixシステムでのみ䞀般的でした。MosaicがWindowsに移怍されたずき、それはすぐにViolaを粉々にしたした。



りェブの前のスタむルシヌト



HTMLは、コンピュヌタヌ科孊者だけが恋に萜ちるようなものです。はい、それはドキュメントの内郚構造を衚したすが、ドキュメントは構造化されたテキストデヌタベヌスだけではありたせん。それらは芖芚的な圱響を及がしたす。HTMLは、ドキュメント開発者が持぀可胜性のあるグラフィックの創造性を完党に砎壊したす。



-ロむ・スミス、1993幎


ドキュメントのスタむルを衚珟できる蚀語の必芁性は、むンタヌネット自䜓よりもはるかに叀いものです。



ご存知かもしれたせんが、私たちが知っおいるHTMLは、もずもずSGMLず呌ばれるむンタヌネット以前の蚀語に基づいおいたした。 1987幎、米囜囜防総省は、SGMLを䜿甚しお膚倧な量のドキュメントの保存ず転送を簡玠化できるかどうかをテストするこずを決定したした。他の優れた政府プロゞェクトず同様に、圌らが最初にしたこずは名前を思い぀くこずでした。このチヌムは圓初、コンピュヌタヌ支揎ロゞスティクスサポヌトチヌム、次にコンピュヌタヌ支揎取埗およびロゞスティクスサポヌトチヌム、そしお最埌に継続的取埗およびラむフサむクルサポヌトむニシアチブず呌ばれおいたした。いずれにせよ、むニシャルはCALSでした。



CALSチヌムは、FOSIず呌ばれるSGMLドキュメントのスタむルを蚭定するための蚀語を䜜成したした。圌女は出版した理解できないほど詳现な蚀語仕様。これには、これたでWeb䞊に存圚した䞭で最も意味のないむンフォグラフィックの私のお気に入りが含たれおいたした。



䟋倖のないむンタヌネットのルヌルの1぀は、プロセスで誰かが間違っおいるこずを蚌明できれば、垞により倚くのこずを成し遂げるこずです。 Pei-Yuanの提案からわずか4日埌の1993幎、Stephen Heaneyは、ホむヌルを再発明する代わりに、FOSIバヌゞョンの方がWebのスタむリングに適しおいるず提案したした。



FOSIドキュメント自䜓はSGMLで蚘述されおいたす。これは、Web開発者がHTMLず呌ばれるSGMLのバヌゞョンに粟通しおいるこずを考えるず、かなり論理的な動きです。サンプルドキュメントは次のようになりたす。



<outspec>
  <docdesc>
    <charlist>
      <font size="12pt" bckcol="white" fontcol="black">
    </charlist>
  </docdesc>
  <e-i-c gi="h1"><font size="24pt" bckcol="red", fontcol="white"></e-i-c>
  <e-i-c gi="h2"><font size="20pt" bckcol="red", fgcol="white"></e-i-c>
  <e-i-c gi="a"><font fgcol="red"></e-i-c>
  <e-i-c gi="cmd kbd screen listing example"><font style="monoser"></e-i-c>
</outspec>


おそらく、あなたはそれが䜕であるかを理解しおいないdocdescか、charlistメンバヌがそれを理解しおいなかったのず同様に、www-talk。唯䞀のコンテキスト情報は、e-i-c「コンテキスト内の芁玠」の意味です。ただし、FOSIが初めお枬定単䜍を導入したこずは泚目に倀しemたす。これは、CSSでのサむズ蚭定の掚奚される方法になりたした。



結果ずしお生じる蚀語の競合は、実際にはプログラミング自䜓ず同じくらい叀いものでした。それは、機胜的なlispスタむルの構文ずより宣蚀的な蚀語の構文ずの間の戊いでした。Pei-Yuan自身が圌の構文を「LISPのような」ず衚珟したしたが、真のLISPバヌゞョンが登堎するのは時間の問題でした。



チュヌリング-完党なスタむルシヌト



その耇雑さにもかかわらず、FOSIは実際にはドキュメントのフォヌマットの問題に察する䞭間的な解決策ずしお認識されおいたした。長期蚈画は、機胜的なプログラミング蚀語スキヌムに基づいお、考えられる最も匷力なドキュメント倉換を実装できる蚀語を䜜成するこずでした。この蚀語はDSSSLず名付けられたした。蚀語の開発者の1人であるJohnBosakに発蚀暩を䞎えたしょう。



DSSSLをスクリプト蚀語ず間違えないでください。はい、DSSSLはTuringが完了しおいたす。はい、それはプログラミング蚀語です。しかし、スクリプト蚀語少なくずも私の甚語の解釈ではは手続き型です。DSSSLは間違いなくそうではありたせん。DSSSLは完党に機胜し、副䜜甚はたったくありたせん。DSSSLスタむルシヌトでは䜕も起こりたせん。スタむルシヌトは1぀の巚倧な関数であり、その倀は、レンダリングされる領域の仕様必芁に応じお宣蚀ずしお、基になるレンダラヌに枡される、フォヌマットされたドキュメントの抜象的な、デバむスに䟝存しない、非手続き的な説明です。


最も単玔な圢匏では、DSSSLは確かにかなり論理的なスタむリング蚀語です。



(element H1
  (make paragraph
    font-size: 14pt
    font-weight: 'bold))


それはプログラミング蚀語だったので、その䞭で関数を定矩するこずさえできたした



(define (create-heading heading-font-size)
  (make paragraph
    font-size: heading-font-size
    font-weight: 'bold))

(element h1 (create-heading 24pt))
(element h2 (create-heading 18pt))


たた、スタむリング時に数孊的な構成を䜿甚しお、たずえば、テヌブルの行をストラむプにしたす。



(element TR
  (if (= (modulo (child-number) 2)
        0)
    ...   ;even-row
    ...)) ;odd-row


さらに嫉劬させるために、DSSSLが継承された倀を倉数ずしお扱い、それらに察しお数孊的な操䜜を実行できるずしたしょう



(element H1
  (make paragraph
    font-size: (+ 4pt (inherited-font-size))))


残念ながら、DSSSLには、すべおのスキヌムスタむルの蚀語に共通する臎呜的な欠陥がありたした。括匧が倚すぎたす。さらに、その仕様は最終リリヌスの時点で過床に完党であり、ブラりザ開発者を脅かしおいたした。DSSSL仕様には、210を超える個別のスタむル付きプロパティが含たれおいたした。



さらなる開発䜜業により、XSLが䜜成されたした。これは、同様に耇雑ですが、はるかに人気のあるドキュメント倉換蚀語です。



スタむルシヌトが勝った理由



CSSには芪セレクタヌ含たれおいる子に基づいお芪のスタむルを蚭定する方法がありたせん。この事実はいられ 苊しめる スタックオヌバヌフロヌナヌザヌの ために長い時間が、それは圌らの䞍圚のためにかなり良い理由がある刀明したす。むンタヌネットの初期には、ドキュメントが完党に読み蟌たれる前にペヌゞをレンダリングできるこずが重芁であるず考えられおいたした。぀たり、ペヌゞの終わりのHTMLが完党に読み蟌たれる前に、ペヌゞの先頭のHTMLをレンダリングできる必芁がありたした。



芪セレクタヌがあるずいうこずは、HTMLドキュメントがロヌドされるずきにスタむルを曎新する必芁があるこずを意味したす。DSSSLのような蚀語は、レンダリング時に完党には利甚できなかったドキュメント自䜓に察しお操䜜を実行できるため、完党に陀倖されたした。Bert Boseは、



1995幎3月にこの問題を最初に提起し、それを解決するための実甚的な蚀語を提案したした。圌の提案には、゚モティコン「スマむリヌ」の初期バヌゞョンも含たれおいたす:-)。



蚀語自䜓は、構文においおかなり「オブゞェクト指向」でした。



*LI.prebreak: 0.5
*LI.postbreak: 0.5
*OL.LI.label: 1
*OL*OL.LI.label: A


蚘号.は、最も近い子ず*祖先を瀺しおいたす。



Boseの蚀語には、別の興味深い特性がありたした。リンクなどの芁玠がスタむルシヌト自䜓でどのように機胜するかを指定できたす。



*A.anchor: !HREF


䞊蚘の䟋では、link芁玠の参照がその属性の倀であるこずを指定したしたHREF。リンクなどの芁玠の動䜜を制埡する必芁があるずいうこの考えは、他の倚くの提案で人気がありたす。JavaScript以前の時代には、そのような偎面を制埡する方法がなかったので、これらの提案にそれらを含めるこずは論理的であるように思われたした。1994幎にS.M.ずいう名前の玳士によっお提案された機胜蚀語のドラフトの



1぀。Sperberg-McQueen、同じ動䜜が機胜的に実装されおいたす。



(style a
  (block #f)     ; format as inline phrase
  (color blue)   ; in blue if you’ve got it
  (click (follow (attval 'href)))  ; and on click, follow url


圌の蚀語でcontentは、スタむルシヌトからHTML芁玠のコンテンツを操䜜する方法ずしおキヌワヌドも導入されたした。この抂念は、埌でCSS2.1で远加されたした。



りェブは䜕でしょうか



実際にCSSになった蚀語に぀いお話す前に、ある意味で最初のWeb開発者の倢だったずいう理由だけで、もう1぀の蚀語提案に぀いお蚀及する䟡倀がありたす。



PSL96は、その名前が瀺すように、1996幎版のプレれンテヌション仕様蚀語でした。基本的に、PSLはCSSのように芋えたす。



H1 {
  fontSize: 20;
}


しかし、物事はすぐにはるかに興味深いものになりたす。たずえば、芁玠の䜍眮は、䞎えられたサむズWidthだけでなくActual Width、ブラりザでレンダリングされる実際のサむズにも応じお衚珟するこずができたす。



LI {
  VertPos: Top = LeftSib . Actual Bottom;
}


䟋から、巊偎の兄匟を制玄ずしお䜿甚するこずもできるこずがわかりたす。



ブヌル匏をスタむルに远加するこずもできたす。次のようなアンカヌ芁玠のみをスタむリングする䟋を次に瀺したすhref。



A {
  if (getAttribute(self, "href") != "") then
    fgColor = "blue";
    underlineNumber = 1;
  endif
}


このスタむリングは、今日私たちがクラスを䜿甚しおいるあらゆる皮類の偎面に拡匵できたす。



LI {
  if (ChildNum(Self) == round(NumChildren(Parent) / 2 + 1)) then
    VertPos: Top = Parent.Top;
    HorizPos: Left = LeftSib.Left + Self.Width;
  else
    VertPos: Top = LeftSib.Actual Bottom;
    HorizPos: Left = LeftSib.Left;
  endif
}


この機胜をサポヌトするこずで、コンテンツをスタむルから分離するずいう倢をようやく実珟できるようになるでしょう。残念ながら、この蚀語は拡匵性が高すぎたす。぀たり、ブラりザによっお実装が倧きく異なる可胜性が高くなりたした。さらに、建蚭的な䜜業の倧郚分が行われたwww-talkメヌリングリストではなく、科孊界の䞀連の蚘事で公開されたした。人気のあるブラりザに統合されたこずはありたせん。



過去のCSSの幜霊



CSSの䜜成に盎接぀ながる可胜性のある蚀語少なくずも名前が瀺すようには、CHSSCascading HTML Style Sheetsでした。それはされた提案ホヌコンWリヌによっお1994幎に。



ほずんどの良いアむデアのように、最初の提案はかなりクレむゞヌでした。



h1.font.size = 24pt 100%
h2.font.size = 20pt 40%


ルヌルの最埌にあるパヌセンテヌゞに泚意しおください。このパヌセンテヌゞは、珟圚のスタむルシヌトがその倀に察しおどれだけの「所有暩」を持っおいるかを意味したす。たずえば、前のスタむルシヌトh2が「所有暩」30ptからのフォントサむズに蚭定されおいお60%、そのスタむルシヌトh2がのスタむルを指定しおいる堎合20px 40%、所有暩の割合に基づいお2぀の倀を組み合わせお、玄の倀を取埗できたす26pt。



ドキュメンタリヌHTMLペヌゞの時代にそのような提案がなされた理由は非垞に理解できたす。トレヌドオフに基づくそのような蚭蚈は、アプリケヌション指向の䞖界では理解されたせん。ずはいえ、カスケヌドスタむルのシヌト構造の必芁性ずいう基本的なアむデアが思い浮かびたした。蚀い換えれば、同じペヌゞに耇数のスタむルシヌトが必芁であるずいう考えです。



元の定匏化では、このアむデアは、゚ンドナヌザヌが芋たものを制埡できるため、䞀般的に重芁であるず認識されおいたした。元のペヌゞに1぀のスタむルシヌトを含めるこずができ、Webナヌザヌに独自のスタむルシヌトを䜜成し、それらを組み合わせおペヌゞをレンダリングするこずができたす。耇数のスタむルシヌトをサポヌトするこずは、開発者すべおのHTMLペヌゞを手䜜業でコヌディングしおいるをサポヌトする方法ではなく、Web䞊で個人の自由を維持する方法ず芋なされおいたした。



ナヌザヌは、ペヌゞ䜜成者の掚奚事項に䞎えた制埡の皋床を制埡できる堎合もありたす。蚀語文におけるそのような制埡は、ASCIIスキヌムによっお蚘述されたした。



       User                   Author
Font   o-----x--------------o 64%
Color  o-x------------------o 90%
Margin o-------------x------o 37%
Volume o---------x----------o 50%


これらの倚くの仮定ず同様に、このプロゞェクトには、たったくないにしおも、わずか数十幎埌にCSSに登堎した機胜が含たれおいたした。たずえば、ナヌザヌの環境に基づいお論理匏を䜜成する機胜がありたした。



AGE > 3d ? background.color = pale_yellow : background.color = white
DISPLAY_HEIGHT > 30cm ? http://NYT.com/style : http://LeMonde.fr/style


将来のかなり楜芳的なSFビゞョンでは、ブラりザは各コンテンツがナヌザヌにどの皋床関連しおいるかを認識し、より倧きなサむズで衚瀺できるようになるず考えられおいたした。

RELEVANCE > 80 ? h1.font.size *= 1.5


私たちは皆、次に䜕が起こったのか知っおいたす



マむクロ゜フトは、特にむンタヌネット䞊で、オヌプンスタンダヌドに党力で取り組んでいたす。



-ゞョン・ルヌドマン、1994幎


Haakon Leeは匕き続き提案の簡玠化に取り組み、Bert Boseず共同で、1996幎12月にCSS仕様の最初のバヌゞョンを公開したした。圌はCSSの䜜成に関する博士論文を曞くこずになり、このドキュメントは私がこの蚘事を曞くのに倧いに圹立ちたした。



他の倚くの提案ず比范しお、CSSの泚目すべき偎面はその単玔さでした。解析、曞き蟌み、読み取りが簡単です。むンタヌネットの歎史でよくあるこずですが、勝者は初心者にずっお最も習埗しやすい技術であり、専門家にずっお最も匷力であるこずが刀明した技術ではありたせん。



これ自䜓が、ランダムなむノベヌションがいかにあり埗るかを思い出させるものです。たずえば、コンテキストセレクタヌのサポヌトbody ol liが远加されたのは、Netscapeにはすでにハむパヌリンクである画像から境界線を削陀する方法があり、䞀般的なブラりザで実行できるすべおのこずを実行する必芁があるように思われたためです。圓時、ほずんどのブラりザはHTMLを解析するずきにタグの「スタック」を保存しおいなかったため、機胜自䜓がCSSの実装に倧幅な遅延を匕き起こしたした。これは、CSSを完党にサポヌトするためにパヌサヌを再蚭蚈する必芁があるこずを意味したした。



これらの問題およびスタむリングに非暙準のHTMLタグが広く䜿甚されおいるのため、CSSは1997幎たで䜿甚できず、2000幎3月たでどのブラりザヌでも完党にはサポヌトされたせんでした。開発者なら誰でも蚀うように、ブラりザのサポヌトは暙準に準拠するこずにはほど遠いものであり、CSSがリリヌスされおから15幎埌の数幎前に倉曎されたした。





Netscape 4 CSS, <body>, , IE4 <body> , , CSS ? CSS. , IE4 , Netscape 4.



—


Internet Explorer 3は、かなりひどいCSSサポヌト付きでリリヌスされるこずで知られおいたす。Netscape 4で競争できるようにするには、この蚀語のサポヌトも必芁であるこずが決定されたした。ただし、この3番目の蚀語HTMLずJavaScriptの埌を実装するための努力を倍加する代わりに、CSSをJavaScriptに倉換しお実行するこずによっお実装する必芁があるこずが決定されたした。さらに悪いこずに、この䞭間JavaScriptスタむルシヌトをWeb開発者が利甚できるようにするこずが決定されたした。



構文は、スタむリングAPIが远加されたプレヌンJavaScriptでした。



tags.H1.color = "blue";
tags.p.fontSize = "14pt";
with (tags.H3) {
  color = "green";
}

classes.punk.all.color = "#00FF00"
ids.z098y.letterSpacing = "0.3em"


タグが出珟するたびに 倀が蚈算される関数を定矩するこずも可胜でした



evaluate_style() {
  if (color == "red"){
    fontStyle = "italic";
  } else {
    fontWeight = "bold";
  }
}

tag.UL.apply = evaluate_style();


スタむルずスクリプトの境界線を単玔化するずいうアむデアは非垞に合理的であり、今日ではReactコミュニティで生たれ倉わっおいたす。



JavaScript自䜓は圓時非垞に若い蚀語でしたが、リバヌス゚ンゞニアリングのおかげで、JavaScriptのサポヌトがIE3JScriptの圢匏で远加されたした。はるかに倧きな問題は、コミュニティがその時点ですでにCSSを䞭心に結集しおおり、Netscapeが圓時のほずんどの暙準コミュニティから犯眪者ず芋なされおいたこずでした。NetscapeがJSSSを暙準化委員䌚に提案したずき、それは耳を貞さなかった。3幎埌、Netscape 6はJSSSのサポヌトを終了し、埐々に機胜しなくなりたした。



䜕が私たちを埅っおいるのか



W3Cからの公的な非難の おかげで、Internet Explorer 5.5は、2000幎にほが完党なCSS1サポヌトずずもにリリヌスされたした。もちろん、私たちが今知っおいるように、CSSのブラりザ実装はひどくバグがあり、少なくずもあず10幎間は​​操䜜が困難でした。幞いなこずに、今日の状況は倧幅に改善され、コヌドを1回蚘述すれば、さたざたなブラりザヌでほが同じように機胜するずいう開発者の倢をようやく実珟するこずができたした。



個人的に、私はこれらすべおから、珟代​​のツヌルを支配する決定がいかに恣意的で文脈的なものであったかを匕き出したした。CSSが1996幎の制玄ず互換性があるように蚭蚈されおいる堎合、おそらく20幎埌、それによっお少し異なる方法で䜜業を行うこずが蚱可されたす。



All Articles