CraSSh: CSS рдЧрдгрдирд╛рдУрдВ рдХреЗ рд╕рд╛рде рд╕рднреА рдЖрдзреБрдирд┐рдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдХреЛ рддреЛрдбрд╝рдирд╛

рд▓реЗрдЦ рд▓реЗрдЦрдХ: рдХреЙрдиреНрд╕реНрдЯреЗрдВрдЯрд┐рди рд╕рдлреЛрдиреЛрд╡

рдореИрдВ рдЗрд╕ рддрдХрдиреАрдХреА рдмрдХрд╡рд╛рд╕ рдХреЛ рдкрдврд╝рдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рддрд╛ред рдореЗрд░рд╛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЕрднреА рдЧрд┐рд░ рдЧрдпрд╛ рд╣реИред

CraSSh рдХреНрдпрд╛ рд╣реИ


CraSSh рдПрдХ рдХреНрд░реЙрд╕-рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╣реИ рдЬреЛ рд╡рд┐рд╢реБрджреНрдз рд░реВрдк рд╕реЗ рдШреЛрд╖рдгрд╛рддреНрдордХ DoS рдкрд░ рд╣рдорд▓рд╛ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдХрд┐ var() рдФрд░ calc() CSS рдиреЗрд╕реНрдЯреЗрдб рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЗ рдЦрд░рд╛рдм рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИред

CraSSh рдбреЗрд╕реНрдХрдЯреЙрдк рдФрд░ рдореЛрдмрд╛рдЗрд▓ рдЙрдкрдХрд░рдгреЛрдВ рдкрд░ рд╕рднреА рдкреНрд░рдореБрдЦ рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:

  • WebKit / Blink engine - рдХреНрд░реЛрдо, рдУрдкреЗрд░рд╛, рд╕рдлрд╛рд░реА, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд╕реНрдорд╛рд░реНрдЯ рдЯреАрд╡реА рдФрд░ рд░реЗрдлреНрд░рд┐рдЬрд░реЗрдЯрд░ рдкрд░ рд╕реИрдорд╕рдВрдЧ рдЗрдВрдЯрд░рдиреЗрдЯред
    • Android WebView, iOS UIWebView рднреА рдкреНрд░рднрд╛рд╡рд┐рдд рд╣реЛрддреЗ рд╣реИрдВ, рдЕрд░реНрдерд╛рдд, рдЖрдк рдХрд┐рд╕реА рднреА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдПрдХ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕реЗ рдХреНрд░реИрд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
  • рдЧреЗрдХреЛ рдЗрдВрдЬрди рдкрд░ - рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ рдФрд░ рдЗрд╕рдХреЗ рдХрд╛рдВрдЯреЗ, рдЬреИрд╕реЗ рдХрд┐ рдЯреЛрд░ рдмреНрд░рд╛рдЙрдЬрд╝рд░ред
    • рд╕рд░реНрд╡реЛ рдореЗрд░реА рдХрд┐рд╕реА рднреА рдорд╢реАрди рдкрд░ рд╢реБрд░реВ рдирд╣реАрдВ рд╣реБрдЖ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЗрд╕рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдирд╣реАрдВ рдХрд┐рдпрд╛ред
  • EdgeHTML рдЗрдВрдЬрди рдкрд░ - рд╡рд┐рдВрдбреЛрдЬ рдкрд░ рдмрдврд╝рдд, UWP рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдкрд░ WebView (рдХреНрдпрд╛ рдХреЛрдИ рдЙрдиреНрд╣реЗрдВ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ?)

IE рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЙрди рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рди рдкрд░ рд╣рдорд▓рд╛ рдЖрдзрд╛рд░рд┐рдд рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреА рд╕реНрд╡рдпрдВ рдХреА рдХрдИ рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реИрдВ (рд╢рд╛рдпрдж рдпрд╣ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЕрдиреНрдп рддрд░реАрдХреЛрдВ рд╕реЗ рдирд╖реНрдЯ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ - рд▓рдЧрднрдЧред) ред

рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ


рдХреНрд░реИрдбрд╢ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИ рдХрд┐ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЛ рд╕реАрдПрд╕рдПрд╕ рд╕рдВрдкрддреНрддрд┐ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдШрд╛рддреАрдп рд╕рдордп рдореЗрдВ рдиреЗрд╕реНрдЯреЗрдб рдЪрд░ рдХреЙрд▓ рдХреЗ рд╕рд╛рде рдФрд░ рд╡рд┐рд╢рд╛рд▓ рдореЗрдореЛрд░реА рдЙрдкрдпреЛрдЧ рдХреЗ рд╕рд╛рдеред

рд╣рдорд▓рд╛ рддреАрди рд╕реАрдПрд╕рдПрд╕ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ:

рд╕реАрдПрд╕рдПрд╕ рдЪрд░ ( рдХрд╕реНрдЯрдо рдЧреБрдг рдФрд░ var () )

рд╡реЗ рдЖрдкрдХреЛ рдШреЛрд╖рдгрд╛ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ: рдЪрд░ рдХреЛ рдЕрд╕рд╛рдЗрди рдХрд░реЗрдВ рдФрд░ рдкрдврд╝реЗрдВ:

 .variables { --variable: 1px; /* declare some variable */ height: var(--variable); /* read the previously declared variable */ } 


рдЪрд░ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддреЗ рд╣реИрдВ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╡реЗрдмрдХреАрдЯ рдореЗрдВ рдПрдХ рдмрдЧ рдерд╛ рдЬреЛ рдЕрдирдВрдд рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рдерд╛) рдпрд╛ рдЫреЛрд░реЛрдВ, рд▓реЗрдХрд┐рди рдЙрдиреНрд╣реЗрдВ рдЗрд╕ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ

рднрд╛рд╡ рдХреИрд▓реНрдХ ()

рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпрд╛рдБ рдХреИрд▓реНрдХ () рдЖрдкрдХреЛ рдирд┐рдпрдореЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╕рдордп рдХреБрдЫ рдмреБрдирд┐рдпрд╛рджреА рдЕрдВрдХрдЧрдгрд┐рддреАрдп рд╕рдВрдЪрд╛рд▓рди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, 'width: calc(50% - 10px)' ред

calc() рдЖрдкрдХреЛ рдЪрд░ рдХрд╛ рд╕рдВрджрд░реНрдн рджреЗрдиреЗ рдФрд░ рдПрдХ рд╣реА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдореЗрдВ рдХрдИ рдореВрд▓реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ:

 .calc { --variable: 1px; /* declare a constant */ height: calc(var(--variable) + var(--variable)); /* access --variable twice */ } 


рдпрд╣ рд╕рдВрднрд╡ рдмрдирд╛рддрд╛ рд╣реИ:

  • рдкрд┐рдЫрд▓реЗ рдЪрд░ рдХреЗ рд╕рдВрджрд░реНрдн рдЬреЛрдбрд╝рдХрд░ рдкреНрд░рддреНрдпреЗрдХ calc() рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдореЗрдВ рд░реИрдЦрд┐рдХ рд╡реГрджреНрдзрд┐ рдХрд░реЗрдВ;
  • calc() рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд╕рд╛рде рдкреНрд░рддреНрдпреЗрдХ рдЪрд░ рдШреЛрд╖рдгрд╛ рдХреЗ рд╕рд╛рде рддреЗрдЬреА рд╕реЗ рдЬрдЯрд┐рд▓рддрд╛ рдореЗрдВ рд╡реГрджреНрдзрд┐ рдЬреЛ рдЕрдиреНрдп рдЧрдгрдирд╛ рдХрд┐рдП рдЧрдП рдЪрд░ рдХрд╛ рд╕рдВрджрд░реНрдн рджреЗрддреА рд╣реИ:

 .calc_multiple { --variable-level-0: 1px; /*  */ --variable-level-1: calc(var(--variable-level-0) + var(--variable-level-0)); /* 2   */ --variable-level-2: calc(var(--variable-level-1) + var(--variable-level-1)); /* 2   , 4   */ /* ...    */ --variable-level-n: calc(var(--variable-level-n-1) + var(--variable-level-n-1)); /* 2   , 2 ^ n   */ } 


рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдШрд╛рддреАрдп рд╕рдордп рдкрд░ рдЧрдгрдирд╛ рдХреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдЖрдзреБрдирд┐рдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдереЛрдбрд╝рд╛ рдЪрд╛рд▓рд╛рдХ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╡реЗ рдЖрдорддреМрд░ рдкрд░ рдПрдХ рдмрд╛рд░ рдЪрд░ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреА рдЧрдгрдирд╛ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рдЬрдЯрд┐рд▓рддрд╛ рд░реИрдЦрд┐рдХ рдХреЛ рдХрдо рдХрд░ рджреЗрддреА рд╣реИред рдЪрд╛рд▓ рдпрд╣ рд╣реИ рдХрд┐ рдЪрд░ рдорд╛рдиреЛрдВ рдХреА рдХреИрд╢рд┐рдВрдЧ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ рдпрджрд┐ рдпрд╣ рд╣реИ

рд╡рд┐рд╖рдо рдЕрд░реНрде

рддрдХрдиреАрдХреА рд░реВрдк рд╕реЗ, рдпрд╣ calc() рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╡рд┐рд╢реЗрд╖ рдЙрд▓реНрд▓реЗрдЦ рдХреЗ рдпреЛрдЧреНрдп рд╣реИред рдПрдХ рд╡рд┐рд╖рдо рдЪрд░ рдореЗрдВ рдкреВрд░реНрдг рдФрд░ рд╕рд╛рдкреЗрдХреНрд╖ рджреЛрдиреЛрдВ рдЗрдХрд╛рдЗрдпрд╛рдБ рд╣реЛрддреА рд╣реИрдВред рд╡рд╣ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреА:

  • рдПрдХ рдирд┐рд░рдкреЗрдХреНрд╖ рдорд╛рди рдХреЗ рд░реВрдк рдореЗрдВ рдЧрдгрдирд╛ рдФрд░ рд╡рд┐рднрд┐рдиреНрди рддрддреНрд╡реЛрдВ рдХреЗ рд▓рд┐рдП рд╡рд┐рднрд┐рдиреНрди рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рджреНрд╡рд╛рд░рд╛ рд╕рд╛рдЭрд╛ рдХреА рдЬрд╛рддреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд▓рдХреНрд╖реНрдп рддрддреНрд╡ (рдЗрдХрд╛рдЗрдпреЛрдВ '%' / 'em' ) рдХреЗ рдЧреБрдгреЛрдВ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ;
  • рдПрдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдореЗрдВ рдПрдХ рдирд┐рд░рдкреЗрдХреНрд╖ рдорд╛рди рдХреЗ рд░реВрдк рдореЗрдВ рдЧрдгрдирд╛ рдХреА рдЬрд╛рддреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдпрд╣ рдЧреЛрд▓рд╛рдХрд╛рд░ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рд╕рдВрдЪрдп рдХреА рдУрд░ рд▓реЗ рдЬрд╛рдПрдЧрд╛, рдЬреЛ рдЕрдЬреАрдм рдЙрдк-рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдХрд╛рд░рдг рд╣реЛрддреЗ рд╣реИрдВ рдЬреЛ рдЬрдЯрд┐рд▓ рд▓реЗрдЖрдЙрдЯ рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдХрд░рддреЗ рд╣реИрдВ (рдХреНрдпрд╛ рдЖрдкрдХреЗ рдкрд╛рд╕ 12 рдХреЙрд▓рдо рд╣реИрдВ, рд╕реНрдХреНрд░реАрди рдЪреМрдбрд╝рд╛рдИ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ 1/12? рдХреЛрдИ рднрд╛рдЧреНрдп рдирд╣реАрдВ, рджреЛрд╕реНрдд, рд╡реЗ рдПрдХ рд╕рд╛рде рдЖрдПрдВрдЧреЗ? рдПрдХ рдирдИ рдкрдВрдХреНрддрд┐ рдореЗрдВ рдпрд╛ рдЕрдВрдд рдореЗрдВ рдПрдХ рднрджреНрджрд╛ рдЕрдВрддрд░ рдЫреЛрдбрд╝ рджреЗрдВ)ред

рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЗрд╕ рдореВрд▓реНрдп рдХреЛ рд╣рд░ рдмрд╛рд░ рдкреБрдирд░реНрдЧрдгрдирд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

 .non_cached { --const: calc(50% + 10px); /*  (50% + 10px) */ --variable: calc(var(--const) + var(--const)); /* -     */ width: var(--variable); /*    */ } 

рджреВрд╕рд░реЗ рдмрд┐рдВрджреБ рдХреЗ рд░реВрдк рдореЗрдВ, рдЕрдзрд┐рдХрд╛рдВрд╢ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗрд╡рд▓ рдШреВрдордиреЗ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдПрдХрд▓ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдореЗрдВ рд╡рд┐рд╖рдо рдорд╛рди рдХреЗ рд╕рд╛рде рдиреЗрд╕реНрдЯреЗрдб рд╡реЗрд░рд┐рдПрдмрд▓ рдПрдореНрдмреЗрдб рдХрд░рддреЗ рд╣реИрдВ:

 .mixed { --mixed:calc(1% + 1px); /*   */ --mixed-reference: calc(var(--mixed) + var(--mixed)); /*      */ --mixed-reference-evaluates-to: calc(1% + 1px + 1% + 1px); /*     */ --mixed-reference-computes-as: calc(2% + 2px); /*  ,        */ } 

рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдХрд┐ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдореЗрдВ рд▓рд╛рдЦреЛрдВ (рдпрд╛ рдЕрд░рдмреЛрдВ) рддрддреНрд╡ рд╣реИрдВ ... рд╕реАрдПрд╕рдПрд╕ рдЗрдВрдЬрди рдХрдИ рдЧреАрдЧрд╛рдмрд╛рдЗрдЯ рд░реИрдо рдХреЛ рдЖрд╡рдВрдЯрд┐рдд рдХрд░рдиреЗ, рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЛ рдХрдо рдХрд░рдиреЗ, рдИрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рдЬреЛрдбрд╝рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реИ, рддрд╛рдХрд┐ рдХреБрдЫ рдмрджрд▓рдиреЗ рдкрд░ рдЧреБрдгреЛрдВ рдХреЛ рдЧрд┐рдирд╛ рдЬрд╛ рд╕рдХреЗред рдЕрдВрдд рдореЗрдВ, рдпрд╣ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕реНрддрд░ рдкрд░ рд╣реЛрддрд╛ рд╣реИред

рддреЛ, рдореВрд▓ CraSSh рджреЗрдЦрд╛:

 .crassh { --initial-level-0: calc(1vh + 1% + 1px + 1em + 1vw + 1cm); /*   */ --level-1: calc(var(--initial-level-0) + var(--initial-level-0)); /* 2  */ --level-2: calc(var(--level-1) + var(--level-1)); /* 4  */ --level-3: calc(var(--level-2) + var(--level-2)); /* 8  */ --level-4: calc(var(--level-3) + var(--level-3)); /* 16  */ --level-5: calc(var(--level-4) + var(--level-4)); /* 32  */ --level-6: calc(var(--level-5) + var(--level-5)); /* 64  */ --level-7: calc(var(--level-6) + var(--level-6)); /* 128  */ --level-8: calc(var(--level-7) + var(--level-7)); /* 256  */ --level-9: calc(var(--level-8) + var(--level-8)); /* 512  */ --level-10: calc(var(--level-9) + var(--level-9)); /* 1024  */ --level-11: calc(var(--level-10) + var(--level-10)); /* 2048  */ --level-12: calc(var(--level-11) + var(--level-11)); /* 4096  */ --level-13: calc(var(--level-12) + var(--level-12)); /* 8192  */ --level-14: calc(var(--level-13) + var(--level-13)); /* 16384  */ --level-15: calc(var(--level-14) + var(--level-14)); /* 32768  */ --level-16: calc(var(--level-15) + var(--level-15)); /* 65536  */ --level-17: calc(var(--level-16) + var(--level-16)); /* 131072  */ --level-18: calc(var(--level-17) + var(--level-17)); /* 262144  */ --level-19: calc(var(--level-18) + var(--level-18)); /* 524288  */ --level-20: calc(var(--level-19) + var(--level-19)); /* 1048576  */ --level-21: calc(var(--level-20) + var(--level-20)); /* 2097152  */ --level-22: calc(var(--level-21) + var(--level-21)); /* 4194304  */ --level-23: calc(var(--level-22) + var(--level-22)); /* 8388608  */ --level-24: calc(var(--level-23) + var(--level-23)); /* 16777216  */ --level-25: calc(var(--level-24) + var(--level-24)); /* 33554432  */ --level-26: calc(var(--level-25) + var(--level-25)); /* 67108864  */ --level-27: calc(var(--level-26) + var(--level-26)); /* 134217728  */ --level-28: calc(var(--level-27) + var(--level-27)); /* 268435456  */ --level-29: calc(var(--level-28) + var(--level-28)); /* 536870912  */ --level-30: calc(var(--level-29) + var(--level-29)); /* 1073741824  */ --level-final: calc(var(--level-30) + 1px); /* 1073741824  */ /* ^        ->   -  */ border-width: var(--level-final); /* <-    */ /*     border-width,   style (=  ) */ border-style: solid; } 

 <div class="crassh">    ,      CSS     CraSSh </div> 

рдФрд░ рдпрд╣рд╛рдБ 1000 рд╕реЗ рдХрдо рд╡рд░реНрдгреЛрдВ рдХрд╛ рдирд┐рд░реНрдорд┐рдд рд╕рдВрд╕реНрдХрд░рдг (рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд▓рд┐рдП рдореАрдбрд┐рдпрд╛рд╡рд┐рдХрд┐) рд╣реИред

 <div style="--a:1px;--b:calc(var(--a) + var(--a));--c:calc(var(--b) + var(--b));--d:calc(var(--c) + var(--c));--e:calc(var(--d) + var(--d));--f:calc(var(--e) + var(--e));--g:calc(var(--f) + var(--f));--h:calc(var(--g) + var(--g));--i:calc(var(--h) + var(--h));--j:calc(var(--i) + var(--i));--k:calc(var(--j) + var(--j));--l:calc(var(--k) + var(--k));--m:calc(var(--l) + var(--l));--n:calc(var(--m) + var(--m));--o:calc(var(--n) + var(--n));--p:calc(var(--o) + var(--o));--q:calc(var(--p) + var(--p));--r:calc(var(--q) + var(--q));--s:calc(var(--r) + var(--r));--t:calc(var(--s) + var(--s));--u:calc(var(--t) + var(--t));--v:calc(var(--u) + var(--u));--w:calc(var(--v) + var(--v));--x:calc(var(--w) + var(--w));--y:calc(var(--x) + var(--x));--z:calc(var(--y) + var(--y));--vf:calc(var(--z) + 1px);border-width:var(--vf);border-style:solid;">CraSSh</div> 

рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВ


рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЕрдкрдиреА рд╕рд╛рдЗрдЯ рдпрд╛ рдмреНрд▓реЙрдЧ рд╕реЗ рджреВрд░ рдПрдХ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдкрд░ рдбреНрд░рд╛рдЗрд╡рд┐рдВрдЧ рдХрд░рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЬреЛ HTML рддрдХ рдкреВрд░реНрдг рдкрд╣реБрдВрдЪ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдЬреИрд╕реЗ Tumblr ( рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреНрд░реИрд╢ рдХреЗ рд╕рд╛рде рдЙрджрд╛рд╣рд░рдг ) рдпрд╛ LiveJournal ( рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреНрд░реИрд╢ рдХреЗ рд╕рд╛рде рдЙрджрд╛рд╣рд░рдг ), CraSSh рдЖрдкрдХреЛ рдЗрд╕рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ:

  • рд╕рд╛рдЗрдЯ рдХреЗ рдЙрди рдкреГрд╖реНрдареЛрдВ рдкрд░ UI рдХреЛ рддреЛрдбрд╝реЗрдВ рдЬреЛ рдЖрдкрдХреЗ рдирд┐рдпрдВрддреНрд░рдг рдореЗрдВ рд╣реИрдВ рдФрд░ рдЖрдкрдХреЛ HTML рдЯреЗрдореНрдкрд▓реЗрдЯ рдкреНрд░рджрд╛рди рдХрд┐рдП рдмрд┐рдирд╛, рдордирдорд╛рдиреЗ рдврдВрдЧ рд╕реЗ CSS рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред рдореИрдВ MyAnimeList ( рдПрдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреНрд░реИрд╢ рдХреЗ рд╕рд╛рде рдЙрджрд╛рд╣рд░рдг ) рдХреЛ рддреЛрдбрд╝рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣рд╛ред рд░реЗрдбрд┐рдЯ рдЗрд╕ рд╣рдорд▓реЗ рд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЙрдирдХреЗ рдкрд╛рд░реНрд╕рд░ рд╕реАрдПрд╕рдПрд╕ рдЪрд░ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред
  • рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ, рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд░реВрдк рд╕реЗ рд╕реБрд▓рдн рд▓реЗрдЦрди рдкреГрд╖реНрдареЛрдВ рдкрд░ UI рдХреЛ рддреЛрдбрд╝реЗрдВ рдЬреЛ рдЖрдкрдХреЛ рдЗрдирд▓рд╛рдЗрди рд╢реИрд▓рд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХреБрдЫ HTML рдЯреИрдЧ рдПрдореНрдмреЗрдб рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛ рдкрд░, рдореЗрд░реЗ рдЦрд╛рддреЗ рдХреЛ рдмрд░реНрдмрд░рддрд╛ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд╣рд╛рд▓рд╛рдБрдХрд┐ рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдирд┐рдЬреА рдкреГрд╖реНрда рдкрд░ рдПрдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╡рд┐рдлрд▓рддрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ рдерд╛ред рдпрд╣ рд╣рдорд▓рд╛ рдЬреНрдпрд╛рджрд╛рддрд░ рдореАрдбрд┐рдпрд╛рд╡рд┐рдХрд┐ рдЖрдзрд╛рд░рд┐рдд рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИред рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдПрдХ рдЯреВрдЯреЗ рд╣реБрдП рдкреГрд╖реНрда рдХреЛ рдпреВрдЖрдИ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмрд╣рд╛рд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
  • HTML- рд╕рдХреНрд╖рдо рдИрдореЗрд▓ рдХреНрд▓рд╛рдЗрдВрдЯ рдХрд╛ рдХрд╛рд░рдг

    • рдпрд╣ рдмрд╣реБрдд рдореБрд╢реНрдХрд┐рд▓ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдИрдореЗрд▓ рдХреНрд▓рд╛рдЗрдВрдЯ рдПрдЪрдЯреАрдПрдордПрд▓ рдХреЛ рд╣рдЯрд╛ / рдХрдо рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЖрдорддреМрд░ рдкрд░ рдЖрдзреБрдирд┐рдХ рд╕реАрдПрд╕рдПрд╕ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдХреНрд░реИрдбрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред
    • CraSSh рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ

      • Android рдХреЗ рд▓рд┐рдП рд╕реИрдорд╕рдВрдЧ рдореЗрд▓
    • CraSSh рдореЗрдВ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ

      • рдЖрдЙрдЯрд▓реБрдХ (рд╡реЗрдм)
      • Gmail (рд╡реЗрдм)
      • Gmail (Android)
      • рдпрд╛рд╣реВ (рд╡реЗрдм)
      • рдпрд╛рдВрдбреЗрдХреНрд╕ (рд╡реЗрдм)
      • рдкреНрд░реЛрдЯреЛрдирдореЗрд▓ (рд╡реЗрдм)
      • рдЬреЛрдореНрдмреНрд░рд╛ (рд╡реЗрдм, рдСрдлрд▓рд╛рдЗрди рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди)
      • рд╡рд┐рдВрдбреЛрдЬ рдореЗрд▓ (рд╡рд┐рдВрдбреЛрдЬ рдЬрд╛рд╣рд┐рд░ рд╣реИ)
    • рдореЗрдВ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП

      • рдореИрдХ рдХреЗ рд▓рд┐рдП рдЖрдЙрдЯрд▓реБрдХ (рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рд╡реЗрдмрдХрд┐рдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ)
    • рдЕрдиреНрдп рдиреЗ рдкрд░реАрдХреНрд╖рдг рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИред
  • рдореБрдЭреЗ рд╕рд┐рд░реНрдл рдЗрд╕ рдмрд╛рдд рдХрд╛ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдХреНрд░реИрд╕реНрдк рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рд╕реАрдИрдПрдл / рдлреИрдВрдЯрдордЬреЗрдПрд╕ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдмреЙрдЯреНрд╕ рдХреЗ рдЦрд┐рд▓рд╛рдл рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЖрдХреНрд░рдордг рдХреА рдЧрдИ рд╕рд╛рдЗрдЯ рд╣реЗрдбрд░ рдХреЗ рд╕рд╛рде рдХреНрд░реИрдбрд╢ рдХреЛрдб рдХреЛ ( рдЬреИрд╕реЗ рдпрд╣рд╛рдВ ) рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░ рд╕рдХрддреА рд╣реИ, рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ 403 рддреНрд░реБрдЯрд┐ рдкреНрд░рджрд░реНрд╢рд┐рдд рдирд╣реАрдВ рдХрд░рддреА рд╣реИред IIRC, рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╕реЗ рдПрдореНрдмреЗрдбреЗрдб рдЗрдВрдЬрди рдореЗрдВ рд╕рдВрднрд╛рд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП

    • рдпрд╣ рд╕рдВрднрд╡рддрдГ рдмреЙрдЯ рдХреЛ рдХреНрд░реИрд╢ рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░рдг рдмрдиреЗрдЧрд╛ (рдХреЛрдИ рднреА рд╣реЗрдбрд▓рд╛рдЗрдЯ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рд╕реНрдЯреИрдХ рдУрд╡рд░рдлреНрд▓реЛ рдпрд╛ рдХреБрдЫ рдХреА рдЙрдореНрдореАрдж рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ)
    • рдпрд╣ рдбреАрдмрдЧ рдХрд░рдирд╛ рдмрд╣реБрдд рдореБрд╢реНрдХрд┐рд▓ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЬрд╡рд╛рдм рдХреЗ рд╢рд░реАрд░ рдореЗрдВ рднреА рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ, рдЬреЛ рд▓реЙрдЧ рдореЗрдВ рдЬрд╛рдиреЗ рдХреА рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ


рдРрд╕рд╛ рдХреНрдпреЛрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ


  • рдпрд╛рдж рд╣реИ рдХрд┐ рд▓рд┐рдиреБрд╕ рдкреЛрд╕реНрдЯ ?

    рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдИрдЯреА рд╕реБрд░рдХреНрд╖рд╛ рдХреА рджреБрдирд┐рдпрд╛ рдПрдХ рдирдП рддрд▓ рдкрд░ рдкрд╣реБрдВрдЪ рдЧрдИ рд╣реИред

    рдпрджрд┐ рдЖрдк рд╕реБрд░рдХреНрд╖рд╛ рдореЗрдВ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╕реЛрдЪрддреЗ рд╣реИрдВ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рд╡рд┐рд╡реЗрдХ рд╣реИ, рддреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ:

    "рдирд╣реАрдВ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдореИрдВ рдПрдХ рд╡реЗрд╢реНрдпрд╛ рдирд╣реАрдВ рд╣реВрдБред рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ, рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ тАЭ

    рдЙрд╕рдХреЗ рд╡реНрдпрд╡рд╕рд╛рдп рдХрд╛рд░реНрдб рдкрд░ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рдерд╛ рдХрд┐ рдкреВрд░рд╛ рдЙрджреНрдпреЛрдЧ рд╕рдбрд╝рд╛ рд╣реБрдЖ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╣рд╛рд╕реНрдпрд╛рд╕реНрдкрдж рд╣реИред

    рд╕реБрд░рдХреНрд╖рд╛ рд▓реЛрдЧ рдХрд┐рд╕ рдмрд┐рдВрджреБ рдкрд░ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдЦреБрдж рдкрд░ рдзреНрдпрд╛рди рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдирд╛ рдкрд╕рдВрдж рд╣реИ?

    рдореИрдВ рдФрд░ рднреА рдЖрдЧреЗ рдмрдврд╝ рдЧрдпрд╛ рдФрд░ рдПрдХ рдкреВрд░реА рд╕рд╛рдЗрдЯ рдХреЛ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдмрдЧ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдкрд┐рдд рдХрд░ рджрд┐рдпрд╛, рдХреНрдпреЛрдВрдХрд┐ рд╕реБрдмрд╣ 4 рдмрдЬреЗ рддрдХ рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рдЖрдирдВрдж рдФрд░ рдкреНрд░рд╛рдкреНрдд рдкрд░рд┐рдгрд╛рдореЛрдВ рдкрд░ рдзреНрдпрд╛рди рджреЗрдирд╛ рдХреБрдЫ рдЪреАрдЬреЗрдВ рд╣реИрдВ рдЬреЛ рдореБрдЭреЗ рдЕрд╡рд╕рд╛рдж рд╕реЗ рдмрдЪрд╛рдП рд░рдЦрддреА рд╣реИрдВ рдФрд░ рдХрд╛рд░реНрдпрд╛рд▓рдп рдХреЗ рд╕рд╛рдордиреЗ рдЗрд╕ рд╕реБрдВрджрд░ рдлреБрдЯрдкрд╛рде рдкрд░ рдЧреЛрддрд╛рдЦреЛрд░реА рдХрд░рддреА рд╣реИрдВред
  • рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореИрдВ рдлреНрд░рдВрдЯрдПрдВрдб рд╕реЗ рдирдлрд░рдд рдХрд░рддрд╛ рд╣реВрдВ, рдЬреЛ рдХрд┐ рдлреБрд▓рд╕реНрдЯреИрдХ рдбреЗрд╡рд▓рдкрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдореЗрд░реА рдиреМрдХрд░реА рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ, рдФрд░ рдЗрд╕ рддрд░рд╣ рдХреА рдЪреАрдЬреЗрдВ рдореБрдЭреЗ рдереЛрдбрд╝рд╛ рдЖрд░рд╛рдо рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддреА рд╣реИрдВред

рд╕рдорд╛рди рд╕рд╛рдорд╛рди


рдЕрдм рдореИрдВ рдПрдХ рдЕрджреНрднреБрдд рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рднрд╛рдЧ рд▓реЗ рд░рд╣рд╛ рд╣реВрдВ, рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣рдо рдереЛрдбрд╝реА рджреЗрд░ рдмрд╛рдж рдмрд╛рдд рдХрд░реЗрдВрдЧреЗред рд╣рдореЗрдВ рдЯреНрд╡рд┐рдЯрд░ рдкрд░ рдлреЙрд▓реЛ рдХрд░реЗрдВред

рд╡рд┐рд╢реЗрд╖ рдзрдиреНрдпрд╡рд╛рдж


Source: https://habr.com/ru/post/hi431656/


All Articles