2013-04-10 2 views
1

Я думаю, это своего рода странный вопрос ... и я даже не знаю, хорошая ли это идея. Могу ли я создать элемент и сказать: «Мне все равно, что какой-либо из таблиц стилей, которые были до этого, вот как я хочу, чтобы он был стилизован?»Могу ли я предотвратить применение CSS к определенному элементу?

Так же, как, например, что у меня есть таблица стилей, которая говорит:

button { 
    /* whole bunch of stuff here, not even sure what all */ 
} 

.someClass button { 
    /* and some other crap here*/ 
} 

.anotherClass button { 
    /* and more here */ 
} 

А потом я хочу написать некоторые Javascript, что будет делать что-то вроде этого:

function insertConstantButton(elemId) { 
    var unchangeableButton = $('<button/>'); 
    unchangeableButton.css('whatIReallyWant', 'etc'); 
    $("#" + elemId).append(unchangeableButton); 
    andNowIMagicallyStopCSSFromApplyingTo(unchangeableButton); 
} 

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

Обновление: Да, похоже, это была плохая идея, просто было интересно, возможно ли это. Я не удивлен, что это не так, потому что это было бы любопытно, а, сломать CSS :)

Тому, кому нужна общая проблема, а не предполагаемое решение: у меня есть код, который добавит непрозрачный свиток кнопки точно так же, как команда UI хочет, чтобы они выглядели. Я пытаюсь поместить их в модальный диалог сейчас, и модальный диалог содержит кучу вещей в таблице стилей, например «.ourCompanyPopup button {stuffIDontWantOnMyScrollbars;}« Переопределение каждого из них будет PITA.

Возможно, я мог бы изменить таблицу стилей на что-то вроде «.OurCompanyPopup button: not (.myPreciousScrollButtons)» ... Это будет сделано, но может быть таким же кошмаром, как и все остальное. Хммм ...

+0

Нет, css будет применяться к нему независимо от того, если вы не отмените каждую вещь, которую делает css. –

+0

Я уверен, что на этом есть более чем существующие вопросы, но их трудно найти (трудно выбрать ключевые слова). В любом случае, ответ «Нет», и вы должны сформулировать вопрос, который описывает исходную проблему, а не предполагаемое решение, которое является тупиком. –

+0

Создайте класс, который переопределяет все CSS, используя '! Important' для каждого элемента. – Omar

ответ

2

Просто: нет.

CSS будет применяться в любом случае. Что вы можете сделать, это следующее:

  • перезаписать нежелательную CSS
  • сделать ненужный CSS настолько специфичны, что ваша кнопка не включена

Я рекомендовал бы это:

JQuery

function insertConstantButton(elemId) { 
     var unchangeableButton = $('<button class="dontchange" />'); 
     unchangeableButton.css('whatIReallyWant', 'etc'); 
     $("#" + elemId).append(unchangeableButton); 
    } 

CSS

button:not(.dontchange) { 
    /* whole bunch of stuff here, not even sure what all */ 
} 

.someClass button:not(.dontchange) { 
    /* and some other crap here*/ 
} 

.anotherClass button:not(.dontchange) { 
    /* and more here */ 
} 

Если этого не достаточно элегантный, что кнопка идентификатор и стиль его в таблице стилей. JQuery

function insertConstantButton(elemId) { 
     var unchangeableButton = $('<button id="dontchange" />'); 
     $("#" + elemId).append(unchangeableButton); 
    } 

CSS

button#dontchange { 
    /* your CSS */ 
} 
+0

Как я упоминал в своем обновлении, это, вероятно, самый быстрый способ сделать то, что я хочу ... Я ' m просто обсуждать, будет ли это кошмар ремонтируемости или нет. Можете сделать это в любом случае, что с крайними сроками и всеми (упс, я это так громко сказал?) – user435779

+0

Что касается дальнейшего размышления, я думаю, что на самом деле все в порядке. Это означает, что теперь всплывающее окно должно знать, что в нем могут быть кнопки прокрутки. Но таблица стилей читается очень естественно сейчас: «Любые кнопки внутри всплывающего окна получают этот стиль, кнопки прокрутки EXCEPT». Ярмарка. – user435779

0

Вы можете использовать модификатор !important, но вы должны пометить каждый стиль, который вы не хотите быть перезаписаны в !important:

button { 
    background-color: red; 
} 

.what-i-really-want { 
    background-color: blue !important; 
} 

function insertConstantButton(elemId) { 
    var unchangeableButton = $('<button/>'); 
    unchangeableButton.addClass('what-i-really-want'); 
    $("#" + elemId).append(unchangeableButton); 
    andNowIMagicallyStopCSSFromApplyingTo(unchangeableButton); 
} 
+0

Почему голос? Это не изящное решение, но оно является допустимым ... – Vapire

+1

Сдвиг может быть вызван тем, что ваша функция jQuery не нужна полностью, и потому, что слишком много хлопот, чтобы перезаписать каждое свойство с помощью оператора '! Important'. –

2

использовать идентификатор. Один идентификатор будет перекрывать 15 миллионов классов.

+3

256, а точнее –

+0

Дело в том, что кнопка может отображаться как потомок разных классов и не содержать чрезмерного указания CSS для КАЖДОЙ возможной вещи, которая может быть переопределена, ID не доставит вас нигде. – user435779

+0

Точка ID состоит в том, что не имеет значения, где и сколько потомков CLASSES существует, правило, установленное для идентификатора, переопределит его. Если вы не имеете дело с какой-либо CMS, которая вводит много мусора, а этот мусор содержит идентификатор, просто создайте функцию, которая создает кнопку с идентификатором и адрес ID в таблице стилей css. –

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