CSS и управление изменением имени на страницах контента - PullRequest
0 голосов
/ 11 апреля 2010

У меня простой сайт с мастер-страницей.Чтобы установить свойства для элементов на странице содержимого (например, Textbox), я использую CSS.В дизайнере это работает хорошо, но когда я запускаю сайт, стиль не применяется к элементам управления.Причина проста.Скажем, у меня есть TextBox с id="TextBox1" на странице контента, она помещается в ContentPlaceHolder1.В файле CSS я устанавливаю свойства для объекта с идентификатором #TextBox1.Когда я запускаю сайт из-за искажения имени главной страницы, он получает идентификатор типа ctl00_ContentPlaceHolder1_TextBox1, который не определен в CSS-файле, включенном в мастер-страницу.

Как правильно решить эту проблему?Жесткое искаженное имя не кажется хорошим.

Ответы [ 3 ]

2 голосов
/ 11 апреля 2010

Используйте CssClass на элементах управления, например: CssClass="myClass", затем в таблице стилей вместо этого:

#TextBox1 { /* styles */ }

У вас будет это:

.myClass { /* styles */ }

Стоит отметить, что .Net 4 исправляет или позволяет лучше управлять идентификатором, сгенерированным в html, подробности см. Здесь .

2 голосов
/ 11 апреля 2010

Поскольку у Ника и Слэкс оба упомянутых класса являются лучшими. Вы можете назначить несколько классов в свойстве класса, и оно агрегирует все свойства из всех указанных классов, перезаписывая любые свойства, которые он разделяет с более ранними классами. Порядок определения классов в файле css устанавливает порядок их применения.

<style type="text/css">
.genericTextBox
{
background-color: #eee;
color: black;
}
.textbox1
{
background-color: #3ee;
font-size: larger;
}
</style>

<asp:TextBox id="textBox1" CssClass="textbox1 genericTextBox" runat="server"></asp:TextBox>

Порядок, к которому применяются стили, - это сначала genericTextBox, поскольку он первый определен в стиле (по сути, порядок в классе игнорируется). Он устанавливает цвет и цвет фона, затем применяется стиль textbox1, он перезаписывает цвет фона и добавляет размер шрифта. Таким образом, в конце вы получите цвет из generictextbox, цвет фона и размер шрифта из textbox1.

РЕДАКТИРОВАТЬ: в TextBox изменил класс на CssClass

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

Самое простое решение - применить ваши правила CSS, используя имена классов (которые не будут повреждены) вместо идентификаторов.

Правильным решением является использование свойства ClientID, которое возвращает искаженный идентификатор.

Например:

.Something #<%=TextBox1.ClientID %>` {
    color: red;
}

Однако это можно сделать только для встроенных таблиц стилей.

...