2012-03-27 2 views
4

Я пытаюсь создать PrimeFaces commandButtons разных цветов. В моей таблице стилей у меня есть что-то вроде этого:PrimeFaces переопределяет мой собственный стиль CSS

.styleGreen {  
    background-color: #009900; 
    font-family: Arial,Helvetica,sans-serif; 
} 

и компонент, как это:

<p:commandButton value="Green Button" styleClass="styleGreen" ... 

Это работает, когда CommandButton является не внутри PrimeFaces панель или какой-либо другой контейнер , Но когда я перемещаю его в тело моей страницы, все пользовательские правила CSS переопределяются.

Каков правильный способ его устранения?

+0

Каков фактический выход html для компонента?Кроме того, существует ли таблица стилей по умолчанию для PrimeFaces, и если да, то что содержится в ней? – ScottS

+0

PrimeFaces основан на системе JQuery и довольно сложный. Firebug показывает мне, что мой стиль применяется, а затем переопределяется. На этот вопрос, вероятно, ответит тот, кто знает, как PrimeFaces использует JQuery. – AlanObject

+0

Firebug также должен сообщать вам, какой переключатель его переопределяет. Это будет ключом к поиску решения вашей проблемы css. Скорее всего, он переопределяется селектором с более высоким приоритетом (включает в себя и «id» или другой «класс» в сочетании с чем-то другим) или один определенный _after_ ваш «класс» в порядке загрузки страницы css. – ScottS

ответ

8

Простого решения для вас, ребят:

Если у вас есть CommandButton в панели (или форма), как, что:

<h:form .... > 
    <p:commandButton value="Green Button" styleClass="styleGreen" ... /> 
</h:form> 

Вы просто определить ваш CSS как это:

form .styleGreen {  
    background-color: #009900; 
    font-family: Arial,Helvetica,sans-serif; 
} 

Это будет работать очень хорошо (я только что пробовал)

2

Это значение унаследуют может работать:

.styleGreen {  
    background-color: #009900 !important; 
    font-family: Arial,Helvetica,sans-serif !important; 
} 
+0

Интересно - я не знал о ключевом ключе! Кажется, это хаки, но я попробую. – AlanObject

+0

Я пробовал это, и он работал, поэтому я собираюсь отметить его как ответ на данный момент. BUt все еще кажется немного ястребиным. То, что я искал, - это способ «JQuery/Primefaces» для CSS. Это обходной путь, который я просто использую, пока у меня не будет возможности понять это. – AlanObject

+0

Если вы не хотите использовать! Важно (и я предлагаю вам не так, как это может стать кошмаром для обслуживания), попробуйте быть более конкретным с вашими классами CSS. Отметьте это сообщение: http://css-tricks.com/specifics-on-css-specificity/ мы переопределяем встроенные классы PF все время, не используя! Important. – jjross

3

В то время как важно, возможно, сделать это вы, вероятно, следует переопределить файлы ThemeBuilder CSS. Просмотрите руководство по интерфейсам в разделе «Как использовать пользовательскую таблицу стилей». Поверхности в основном построены на jQueryUI http://jqueryui.com/, поэтому переопределите его. (Кроме того, вы можете просто качать специальную тему, которая часто является лучшим выбором).

Просто найдите время, чтобы посмотреть на него, и если вам действительно нужен пользовательский компонент, вы можете построить стандартную библиотеку и настроить ее. Поскольку вы имеете дело с jQuery для начала, это простое обновление.

В ответ

Я думаю, что лучший маршрут может быть просто использовать стандартную кнопку и сделать составной компонент. Это полностью зависит от того, как часто вы его используете, насколько важно это для сайта и что вам нужно делать. В основном jQueryUI будет отображать кнопку и интервал, но из-за того, как сгруппированы перфорированные элементы, вы будете применять стили к OUTSIDE, поэтому внутреннее правило не будет применяться.

Таким образом, я хотел бы сделать пользовательский компонент вдоль линий ->

<h:commandButton styleClass="ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only ui-state-hover" style="${myOverridesHere}"> 
    <p:ajax event="click" ... etc... read the manual/> 
</h:commandButton> 

Конечного результата является то, что вы добавляете «Аякс» в CommandButton через API Primefaces (который живет наверх стандартного API JSF2. У меня не было необходимости специально проверять это на данный момент, но я уверен, что некоторые варианты этого будут делать то, что вам нужно, не заставляя важный каскад, который обычно является плохой практикой.) Для записи , вам нужны стили jQueryUI на странице, чтобы это работало (очевидно).

Надеется, что это помогает

+1

Я просмотрел материал темы, но я не хочу обновлять все кнопки, только те, которые я обозначил. Таким образом, страница может иметь одну зеленую кнопку, одну красную кнопку, одну синюю кнопку и т. Д. – AlanObject

+0

Удачи вам в этом, я не пробовал вышеуказанное решение в своей среде, но логически он должен работать, чтобы переопределить текст/цвет и т. Д. ... всегда может просто сделать «зеленую» версию оскорбительных классов. –

+0

OK Я собираюсь дать то, что вы предлагаете попробовать завтра. Единственное, на что я бы отказался, это сделать атрибут стиля, заполненный выражением EL, - для меня, что смешивает уровень представления с моделью. Я предпочитаю делать все мои константы стилей в файле XHTML, но мы увидим, как это работает. – AlanObject

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