My js is embedded on a third party website and it creates an <iframe>
which contains a simple comments panel , but apparently on this specific website there is a CSS stylesheet which styles every <iframe>
tag in the dom with the !important
flag , so i can't change those css rules and the website dev team won't change this behaviour, there is another way to overcome this? can i change the tagname
and still be an iframe? anything?
Asked
Active
Viewed 1,808 times
3

avi dahan
- 539
- 3
- 19
-
is it possible for you to post the URL and give a bit more description of what you want to achieve? – He Wang Nov 27 '18 at 10:00
-
@Speir the url is currently blocked for the world, but that's quite simple to explain , the main page has something like that : "iframe { height : 20px !important;}" so every iframe in the page will have "height:20px" and i can't change it – avi dahan Nov 27 '18 at 10:03
-
Why not just give your iframe a unique ID or class to overwrite the site CSS? – He Wang Nov 27 '18 at 10:06
-
Can you show the styles you are trying to override – Pete Nov 27 '18 at 10:18
-
@Pete something like that : "iframe { height : 20px !important;}" – avi dahan Nov 27 '18 at 10:18
-
1you can add an inline style to the iframe with important too and that will take precedence - important is usually only used to override any inline styles, so an inline style with important should rule all – Pete Nov 27 '18 at 10:19
-
@Pete i know but for that i will need to change my code logic because you can't set the "!important" flag via the style property , i thought there might be an easy way out , like changing the iframe tag name but still be an iframe – avi dahan Nov 27 '18 at 10:21
-
1https://stackoverflow.com/questions/11150684/can-i-override-inline-important surely adding a style attribute will be easier than hacking up some non iframe version – Pete Nov 27 '18 at 10:22
-
Also if it is your code on their site - surely it should be them fixing their code to make it work, not you tailoring your code otherwise what happens when the next user wants a different implementation again? – Pete Nov 27 '18 at 10:25
2 Answers
2
You can use the all
property with the initial
value to default the styles for that element.
From the docs:
The all CSS shorthand property sets all of an element's properties (other than unicode-bidi and direction) to their initial or inherited values, or to the values specified in another stylesheet origin.
A code example:
#div-to-reset-styles {
all: initial;
* {
all: unset;
}
}
Just target your specific iframe
and you should be fine.

gd_silva
- 997
- 2
- 11
- 17
-
-
Using `!important` is almost always a bad practice but, since you can't change that page's code, you can add `!important` to this code. That way, you override the other `!important`. If your rules have more specificity, they will override the others. – gd_silva Nov 27 '18 at 10:14
-
yeah i know but i can't change this, and yes i can override the !important but i will need to change all my js logic because you can't set "!important" via the style property, i thought there might be another way like changing the tag name and still be an iframe – avi dahan Nov 27 '18 at 10:17
-
0
CSS Specificity is your friend here. From this overview:
- Specificity determines, which CSS rule is applied by the browsers.
- Specificity is usually the reason why your CSS-rules don’t apply to some elements, although you think they should.
- Every selector has its place in the specificity hierarchy.
- If two selectors apply to the same element, the one with higher specificity wins.
- There are four distinct categories which define the specificity level of a given selector: inline styles, IDs, classes, attributes, and elements. ...
The part in bold means that you can add a class to your element(s) in question and override the more generic iframe css definition like that.

Hoff
- 38,776
- 17
- 74
- 99