O GitHub está se transformando ... O GitHub está se transformando ... no elegante Windows 95


Algum tempo atrás, no Twitter, eles publicaram uma piada em homenagem à Microsoft adquirir o Github - uma página do site, redesenhada no estilo do Windows 98 . Decidi que a piada era boa demais para continuar sendo uma piada.


Cores


O tema "clássico" do Windows realmente possui várias iterações. As primeiras versões do Windows (até 9x) foram distinguidas por janelas brancas, bordas levemente arredondadas dos botões e um pseudo-volume muito forte. No Windows 95, as janelas ficaram cinza, tudo ficou mais quadrado e as linhas para criar pseudo-volume diminuíram para um pixel. Gradientes foram adicionados no Windows 98, mas em geral o estilo permaneceu mais ou menos o mesmo. O Windows 2000 tem um tom levemente amarelado.


Eu decidi pelo Windows 95 e, para que as cores possam ser atualizadas posteriormente, eu as projetei como variáveis ​​CSS (bem, ou "propriedades personalizadas"):


--color-button-text: rgb(0, 0, 0); --color-button-face: rgb(192, 192, 192); --color-button-highlight: rgb(255, 255, 255); --color-button-shadow: rgb(128, 128, 128); --color-button-shadow-dark: rgb(0, 0, 0); --color-button-checked: rgb(223, 223, 223); --color-window-text: rgb(0, 0, 0); --color-window: rgb(255, 255, 255); --color-active-caption-text: rgb(255, 255, 255); --color-active-caption: rgb(0, 0, 128); --color-info-background: rgb(255, 255, 192); --color-highlight-text: rgb(255, 255, 255); --color-highlight: rgb(0, 0, 128); --color-gray-text: rgb(128, 128, 128); --color-link: rgb(0, 0, 255); --color-hover: rgb(223, 223, 255); 

Fontes


Não foi possível obter a renderização de fontes de pixel no navegador, por isso tive que me contentar com "MS Sans Serif":


  body { background: var(--color-button-face) !important; font: 12px/1.2 MS Sans Serif, MS Reference Sans Serif !important; } 

O tamanho da fonte era quase o mesmo em toda a interface do Windows, portanto, a font: inherit !important; precisa ser adicionada em muitos elementos font: inherit !important; . A cor da seleção de texto agora pode ser redefinida usando ::selection , mas no Firefox, por algum motivo, ainda é suportado apenas com um prefixo.


  ::selection { color: var(--color-highlight-text) !important; background: var(--color-highlight) !important; } 

E como a fonte principal era legível, decidi deixar a fonte padrão do código sozinha e não alterá-la para "Courier New".


Volume


O próximo problema é desenhar volume. As bordas CSS ainda podem estar apenas em uma camada, portanto box-shadow teve que ser usada para contornos duplos.


ListBox, TextBox, TreeView ...


Por exemplo, pinte as “caixas de folhas” e outros elementos brancos alagados:


  .file-wrap, .blob-wrapper, #readme, .overall-summary, .issues-listing > div[class^=border] { background: var(--color-window) !important; border: solid 1px black !important; border-color: var(--box-3d-border-color) !important; border-radius: 0 !important; box-shadow: var(--box-3d-box-shadow) !important; } 

onde


  --group-3d-border-color: var(--color-button-highlight) var(--color-button-shadow) var(--color-button-shadow) var(--color-button-highlight); --box-3d-box-shadow: 0 -1px 0 0 var(--color-button-shadow), -1px 0 0 0 var(--color-button-shadow), -1px -1px 0 0 var(--color-button-shadow), -1px 1px 0 0 var(--color-button-highlight), 1px 0 0 0 var(--color-button-highlight), 1px 1px 0 0 var(--color-button-highlight); 

É necessário um número tão grande de sombras para que, de um lado, não haja "filetes" de pixel único (se uma sombra for deixada para cima e a outra direita para baixo, haverá um pixel não pintado na parte superior direita e na parte inferior esquerda).


Botão


Fazemos o mesmo com os botões:


  .btn-link, .btn, .btn:hover, .subnav-item, .pagination > :not(.gap), #user-links .dropdown, .js-menu-close { font: inherit !important; font-weight: normal !important; background: var(--color-button-face) !important; color: var(--color-button-text) !important; border: solid 1px transparent !important; border-color: var(--button-3d-border-color-exact) !important; border-radius: 0 !important; box-shadow: var(--button-3d-box-shadow-exact) !important; margin: 1px 2px !important; } 

onde


  --button-3d-border-color-exact: var(--color-button-face) var(--color-button-shadow) var(--color-button-shadow) var(--color-button-face); --button-3d-box-shadow-exact: 0 -1px 0 0 var(--color-button-highlight), -1px 0 0 0 var(--color-button-highlight), -1px -1px 0 0 var(--color-button-highlight), -1px 1px 0 0 var(--color-button-shadow-dark), 1px 0 0 0 var(--color-button-shadow-dark), 1px 1px 0 0 var(--color-button-shadow-dark); 

É verdade que os botões têm mais elementos; quando pressionados, o estilo da borda muda e também há um retângulo de foco pontilhado. Desenhamos o foco usando o outline - a terceira propriedade CSS para as "bordas".


  .btn-link svg, .btn svg, .btn:hover svg, .subnav-item svg, #user-links .dropdown svg, .js-menu-close svg { fill: var(--color-window-text) !important; } .btn-link .dropdown-caret, .btn .dropdown-caret, .btn:hover .dropdown-caret, .subnav-item .dropdown-caret, #user-links .dropdown .dropdown-caret { color: var(--color-window-text) !important; border-top-color: var(--color-window-text) !important; } .btn-link:active, .btn:active, .btn.selected, [open] > .btn, .subnav-item:active, .pagination > :active, #user-links .dropdown:active, .js-menu-close:active { border-color: var(--color-button-shadow) !important; box-shadow: 0 0 0 1px var(--color-button-shadow-dark) !important; } .btn-link:focus, .btn:focus, .subnav-item:focus { outline: dotted 1px var(--color-button-text) !important; outline-offset: -4px !important; } 

Tabcontrol


As orelhas da aba são arredondadas. Felizmente, os navegadores podem desenhar cantos arredondados e você pode especificar um canto arredondado para cada canto.


  .tabnav-tabs a, .tabnav-tabs span:not(.Counter), .reponav-item, .select-menu-tab a { font-size: 12px; font-weight: normal !important; color: var(--color-button-text) !important; background: var(--color-button-face) !important; border: solid 1px transparent !important; border-color: var(--button-3d-border-color) !important; border-bottom: none !important; border-radius: 2px 2px 0 0 !important; box-shadow: 1px 0 0 var(--color-button-shadow-dark), 0 1px 0 var(--color-button-highlight) !important; margin: 0 1px -1px 0 !important; padding: 4px 6px !important; min-height: 26px; } 

Restam poucas coisas: texto em cinza para guias desativadas e nenhuma borda para as atuais (a falta de borda é percebida abaixando o ilhó sob o conteúdo da guia usando recuos negativos):


  .tabnav-tabs a.selected, .tabnav-tabs span:not(.Counter).selected, .reponav-item.selected, .select-menu-tab a.selected { box-shadow: 1px 0 0 var(--color-button-shadow-dark), 0 1px 0 var(--color-button-face) !important; margin: -2px 1px 1px 0 !important; min-height: 28px; } .tabnav-tabs span:not(.Counter) { color: var(--color-gray-text) !important; } 

Caixa de grupo


Bordas ao redor de grupos de elementos são desenhadas recuadas. Parece que você pode usar todos os tipos de groove e groove , mas não, é impossível definir cores específicas para eles, e a renderização em navegadores diferentes é muito diferente. Voltamos ao método comprovado:


  .Box:not(.position-absolute):not(.Popover-message), .blankslate, .border, .timeline-comment, .commit-tease { font: inherit !important; color: inherit !important; line-height: 20px !important; background: var(--color-button-face) !important; border: solid 1px black !important; border-color: var(--group-3d-border-color) !important; border-radius: 0 !important; box-shadow: var(--group-3d-box-shadow) !important; position: relative !important; padding: 12px 8px 4px 8px; margin-top: 2px !important; } 

No entanto, um grupo de elementos sem título não se parece mais com um grupo. Vamos adicionar cabeçalhos em pelo menos alguns lugares.


  .js-notice > .border::before, .commit-tease::before { color: var(--color-button-text) !important; background: var(--color-button-face) !important; position: absolute; left: 6px; top: -11px; padding: 0 3px; } .js-notice > .border::before { content: "Notice"; } .commit-tease::before { content: "Last commit"; } 

Outros


Também há janelas, dicas de ferramentas e muito mais, mas elas não são dignas de nota.


Ícones


Extrairemos os ícones da maneira antiga e antiquada que todos os idosos provavelmente se lembrarão - usando o Resource Hacker . Você não acredita: o programa ainda está vivo, ainda é frivara honesto e ainda está em desenvolvimento. Então, pegamos a distribuição do Windows 95 e examinamos todos os binários, escolhendo belos ícones ...


Agora, muitas horas depois, é hora de colocar os ícones no CSS. Para fazer isso, extraia ícones individuais da ICO para PNG (usei o plug-in Imagine para o Total Commander, mas qualquer programa que entenda o formato), otimizamos para o último bit (usei TinyPNG.com ) e codificamos na forma de um URI de dados em CSS (serviço Base64 -Image.de acabou por ser bastante conveniente). Acontece algo como isto:


  --image-folder: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAGFBMVEUAAAD//5nMzGYAAAD/zJmZmQD//8zx8fEIMK00AAAAAXRSTlMAQObYZgAAAE5JREFUCNdjQIDQ0GAwzVqWKGoAYgQpKSmFhoYyMISlgYCQAUOYIAg4QRgiIjARR4iICFzEESIiAgQghiMQuAAZQUpgYMDAbAwGBgwYAABoaBIom9Nm3gAAAABJRU5ErkJggg=='); --image-folder-documents: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAMFBMVEUAAACZmQD//5n/zJn///8zMwDn59aGhobMzGZVVVUAM5mAgADx8fH/+/Dq6upNTU2p3qmcAAAAAXRSTlMAQObYZgAAAGlJREFUCNdjAIECBghgfwmmGAVLrn0AMSTaXY68BDNKXNYem72BgUE8LSsrLXMDgyAYpH1gEHEBAguxTAYRJSUlZWWxAAZGJWUlI+NGIAMkoGwIZAAFjIyADAZhZYgIVD+QwRoKAgxwAADcLBkG7Oto1QAAAABJRU5ErkJggg=='); : image / png; base64, iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAGFBMVEUAAAD // 5nMzGYAAAD / zJmZmQD // 8zx8fEIMK00AAAAAXRSTlMAQObYZgAAAE5JREFUCNdjQIDQ0GAwzVqWKGoAYgQpKSmFhoYyMISlgYCQAUOYIAg4QRgiIjARR4iICFzEESIiAgQghiMQuAAZQUpgYMDAbAwGBgwYAABoaBIom9Nm3gAAAABJRU5ErkJggg ==');  --image-folder: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAGFBMVEUAAAD//5nMzGYAAAD/zJmZmQD//8zx8fEIMK00AAAAAXRSTlMAQObYZgAAAE5JREFUCNdjQIDQ0GAwzVqWKGoAYgQpKSmFhoYyMISlgYCQAUOYIAg4QRgiIjARR4iICFzEESIiAgQghiMQuAAZQUpgYMDAbAwGBgwYAABoaBIom9Nm3gAAAABJRU5ErkJggg=='); --image-folder-documents: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAMFBMVEUAAACZmQD//5n/zJn///8zMwDn59aGhobMzGZVVVUAM5mAgADx8fH/+/Dq6upNTU2p3qmcAAAAAXRSTlMAQObYZgAAAGlJREFUCNdjAIECBghgfwmmGAVLrn0AMSTaXY68BDNKXNYem72BgUE8LSsrLXMDgyAYpH1gEHEBAguxTAYRJSUlZWWxAAZGJWUlI+NGIAMkoGwIZAAFjIyADAZhZYgIVD+QwRoKAgxwAADcLBkG7Oto1QAAAABJRU5ErkJggg=='); 

  .octicon-file-directory, .octicon-file { fill: transparent !important; width: 16px !important; height: 16px !important; } .octicon-file-directory { background: var(--image-folder) !important; } .octicon-file { background: var(--image-file-text) !important; } 

Toques finais


O site tem um grande número de estilos, então você precisa ir a qualquer lugar e estilizar tudo. Os "botões" e as "caixas de listagem" têm classes bem diferentes. Também existem muitas pequenas coisas, como contadores de círculo, que podem ser logicamente convertidos em texto simples, como teriam feito no Windows 95:


  .Counter { background: inherit !important; font: inherit !important; color: inherit !important; padding: 0 !important; } .Counter::before { content: "("; } .Counter::after { content: ")"; } 

Chapéu


Como somos pessoas modernas, emitiremos um cabeçalho "padronizado" para o UserCSS, suportado pela Stylus:


 /* ==UserStyle== @name GitHub Windows Edition [Ath] @namespace https://github.com/Athari @version 0.5.0 @description Transforms GitHub's pages into GUI resembling Windows 9x. @author Athari @homepageURL https://github.com/Athari/CssGitHubWindows @license MIT ==/UserStyle== */ 

Agora, se você abrir esse arquivo em um navegador, a extensão oferecerá a aplicação do estilo e seguirá as atualizações. E nenhum UserStyles.org duvidoso é necessário.


Feito!


Bem, mais ou menos. O estilo é mais provável no estágio de prova de conceito / alfa, porque muitas páginas não são completamente redesenhadas. Mas um começo foi feito!



Se você possui extensões para estilos de usuário, aqui estão os links diretos para a instalação:



PS Cuidado, o Stylish foi removido recentemente da lista de extensões do Firefox e Chrome por espionagem. Aconselho que você mude para a moderna extensão de código aberto Stylus, se ainda não o fez.

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


All Articles