Функция asp.net-mvc - один CSS-файл для каждого (view / master-page / user-control) - PullRequest
2 голосов
/ 30 апреля 2010

Я пытаюсь реализовать следующую функцию:

Я хочу, чтобы только один файл CSS был прикреплен к любой странице, которую я отрисовал. Например, возьмем сайт StackOverflow. Для страницы вопросов у нас будет файл questions.css.

so.com/questions              --->    questions.css
so.com/question/1234/title    --->    question.css
so.com/about                  --->    about.css
so.com/faq                    --->    faq.css

Теперь я знаю, что эти CSS-файлы имеют общий код, потому что они могут иметь одинаковые MasterPage (s) / UserControls. Таким образом, решение должно учитывать также MasterPages, views и usercontrols.

Итак, что будет правильным решением для такого рода проблем?

Я думаю об одном решении, я поставлю в качестве ответа, но, может быть, у вас есть лучшее решение для этого?

Ответы [ 4 ]

1 голос
/ 01 мая 2010

Но почему будет делать это?

Одна из причин использования CSS состоит в том, чтобы все было в одном месте, а не разбросано вокруг.

Если вам нужны очень разные стили для разных представлений, вы также можете поместить уникальный идентификатор в тег body в каждом представлении (<body id="index">), а затем использовать селекторы, такие как #index #subnav a, чтобы установить для этого явные стили. Посмотреть. Таким образом, вы можете иметь все в одной таблице стилей, и она по-прежнему будет выглядеть по-разному на разных страницах, а также легко обмениваться общими стилями. Одна большая таблица стилей с этим, вероятно, будет более эффективной, чем новые HTTP-запросы для каждой подстраницы, с точки зрения производительности и сэкономит вам много работы, когда вам нужно что-то изменить.

Другой подход будет включать две (или более) таблицы стилей на странице, где одна содержит все общие стили, а другая является уникальной для представления в некотором роде.

Если бы я был на вашем месте, я бы легко сделал одну большую таблицу стилей. Упрощает все так сильно.

1 голос
/ 30 апреля 2010

Одно из решений будет следующим: используйте то же соглашение, что и для папки views. В решении будет папка css, которая будет очень похожа на папку views.

Это наша папка просмотров:

Views
     Home
         Index.aspx
         About.aspx
         Faq.aspx
     Questions
         Questinos.aspx
         QuestionDetails.aspx
     Shared
         Site.master
         Admin.master

Итак, это папка css, которая нам нужна:

css
   Home
       Index.less
       About.less
       Faq.less
       index.css
       about.css
       faq.css
   Questions
       Questinos.less
       QuestionDetails.less
       questions.css
       question-details.css
   Shared
       Site.master.less
       Admin.master.less

Файлы less - это файлы, которые мы пишем. и файлы css - это файлы, которые мы хотим предоставить браузеру. Они создаются действием сборки. Но как?

Каждому представлению соответствует css файл. этот css файл будет построен из следующих less файлов:

  1. Файл с тем же именем представления. как: Questions.less.
  2. Посмотрит в представлении (Questions.aspx) любые главные страницы / пользовательские элементы управления и добавит их (Site.master.less).

Что вы думаете. Возможно ли это реализовать? Это хорошая идея?

0 голосов
/ 30 апреля 2010

Добавьте заполнитель содержимого в элемент <head> на главной странице и добавьте тег ссылок CSS в свои представления.

0 голосов
/ 30 апреля 2010

Вы можете разместить CSS-файлы на странице. Первое, что я хотел бы сделать, это добавить следующий заполнитель контента на свою главную страницу внутри тега <head>:

<asp:ContentPlaceHolder ID="ExtraContent" runat="server" />

Затем в отдельном представлении (например, в представлении вопросов) вы можете добавить это:

<asp:Content ID="Content3" ContentPlaceHolderID="ExtraContent" runat="server">
    <link href="/Content/question.css" rel="stylesheet" type="text/css" />
</asp:Content>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...