Mvc: Criar uma<link/> Tag Helper com suporte para fontes alternativas

Criado em 18 nov. 2014  ·  3Comentários  ·  Fonte: aspnet/Mvc

Esta é a folha de estilo CSS equivalente a # 1576

Um LinkTagHelper que permite a especificação de uma folha de estilo substituta para carregar no caso de falha no carregamento do primário. A falha é determinada injetando uma tag fictícia <meta> com um nome de classe especificado ( asp-fallback-test-class attribute) e, em seguida, testando o estilo computado desse elemento para ver se uma propriedade CSS especificada ( asp-fallback-test-property attribute) é igual a um valor especificado ( asp-fallback-test-value ).

Uso

<link href=""
      asp-fallback-href=""
      asp-fallback-test-class=""
      asp-fallback-test-property=""
      asp-fallback-test-value="" />

Todos os atributos devem estar presentes e não nulos para que o Tag Helper opere. Se algum estiver faltando, ele registrará um aviso e não operará.

Argumentos

| Nome do atributo | Tipo | Detalhes |
| --- | --- | --- |
| asp-fallback-href | string | O URL para o qual fazer fallback se o principal falhar (conforme especificado no atributo href ) |
| asp-fallback-test-class | string | O nome da classe definido na folha de estilo a ser usado para o teste de fallback |
| asp-fallback-test-property | string | O nome da propriedade CSS a ser usada para o teste de fallback |
| asp-fallback-test-value | string | O valor da propriedade CSS a ser usado para o teste de fallback |

Exemplo

Fonte CSHTML

 <link href="https://ajax.aspnetcdn.com/ajax/bootstrap/3.3.0/css/bootstrap.min.css" rel="stylesheet"
       asp-fallback-href="~/lib/bootstrap/css/bootstrap.min.css"
       asp-fallback-test-class="hidden" asp-fallback-test-property="visibility" asp-fallback-test-value="hidden" />

HTML de saída

<link href="https://ajax.aspnetcdn.com/ajax/bootstrap/3.3.0/css/bootstrap.min.css" rel="stylesheet" />
<meta name="x-stylesheet-fallback-test" class="hidden" />
<script>
    (function (a, b, c) {
        var d = document,
            s = d.getElementsByTagName("SCRIPT"),
            meta = s[s.length-1].previousSibling;
        (d.defaultView.getComputedStyle(meta)[a] === b ||
            d.write('\u003clink rel="stylesheet" href="' + c + '" /\u003e'));
    })("visibility", "hidden", "/lib/bootstrap/css/bootstrap.min.css");
</script>
3 - Done enhancement feature-Tag-Helpers

Comentários muito úteis

Desculpe por comentar sobre um problema antigo / encerrado. Já houve alguma discussão sobre a opção de testar arquivos .css que não têm classes singulares?

Dois exemplos:

  • dataTables.bootstrap.css tem no mínimo dois seletores encadeados como table.dataTable { ... } mas nenhuma classe .dataTable autônoma.

  • Da mesma forma com skin-red.css , existem apenas seletores descendentes como .skin-red .main-header .navbar { ... } e novamente nenhuma classe .skin-red autônoma.

Todos 3 comentários

Desculpe por comentar sobre um problema antigo / encerrado. Já houve alguma discussão sobre a opção de testar arquivos .css que não têm classes singulares?

Dois exemplos:

  • dataTables.bootstrap.css tem no mínimo dois seletores encadeados como table.dataTable { ... } mas nenhuma classe .dataTable autônoma.

  • Da mesma forma com skin-red.css , existem apenas seletores descendentes como .skin-red .main-header .navbar { ... } e novamente nenhuma classe .skin-red autônoma.

@ kylef000 isso é interessante, eu não tenho certeza de como alguém poderia testar isso de uma forma genérica como fazemos usando o elemento <meta /> injetado.

@DamianEdwards Ah, certo. Não vi muitas perguntas a respeito disso em minha pesquisa apressada sobre o assunto, então pode não ser algo em que valha a pena investir tempo. Provavelmente, a melhor maneira de contornar isso é bifurcar, adicionar uma classe de teste (como .skin-red-fallback-test { ... } ) dentro do arquivo individual e, em seguida, fazer um PR para qualquer biblioteca particular que alguém possa estar usando.

Obrigado pela resposta. Realmente aprecio seu trabalho em todas as coisas do C #!

Esta página foi útil?
0 / 5 - 0 avaliações