2010-04-11 5 views
0

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

Что такое правильное решение этой проблемы? Hardcoding искаженное имя не кажется хорошим.

+0

приложить усилия по созданию истинных листов файлов каскадных таблиц стилей, потому что то, что это слово в акроним. Похоже, вы, возможно, слишком много полагаетесь на идентификаторы. Используйте классы еще и используйте тег-селектор больше. – mare

ответ

2

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

#TextBox1 { /* styles */ } 

Вы бы это:

.myClass { /* styles */ } 

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

+0

Это очевидно, но я уже использую для них классы. Для некоторых элементов управления я использую классы для определения общих свойств (например, ширины и высоты) и идентификаторов для отдельных (например, фона). Поэтому в вашем решении мне придется много копировать-вставить, чтобы помещать свойства из общего класса в новые классы, созданные вместо их идентификаторов. – flashnik

+3

@flashnik - Не так! Вы можете сделать это: 'CssClass =" class1 class2 class3 "' просто используйте пробел между назначением нескольких классов. Если классы имеют одно и то же свойство, выигрывает последний из списка. –

+0

Спасибо, теперь ясно. Я не знал, что могу написать несколько классов в 'class ='. – flashnik

1

Простейшим решением является применение ваших правил CSS с использованием имен классов (которые не обрабатываются) вместо идентификаторов.

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

Например:

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

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

+0

Что следует добавить, чтобы использовать символы типа '<% =' не было бы ошибкой? VS показывает, что нет селектора. – flashnik

+0

VS покажет синтаксическую ошибку; это ошибка в редакторе. Если вы запустите страницу, она будет работать. (Только если CSS является встроенным) – SLaks

+0

Нет, он не был встроенным, он находится в отдельном файле. – flashnik

2

Как Ник, так и SLaks имеют обе указанные классы. Вы можете назначить несколько классов в свойстве класса, и он будет агрегировать все свойства из всех перечисленных классов, переписывая любые свойства, которые он разделяет с более ранними классами. Порядок определения классов в файле 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.

EDIT: на TextBox изменился класс CssClass

+0

@Felan, спасибо за расширенное объяснение. – flashnik

Смежные вопросы