0

I recently built a widget that, when used in the production site, resulted very different because global styles set on elements like section, or header were affecting it.

As a result, I had to add specific CSS styles to the widget that had the purpose of overriding the styles set by the site, for example:

header {
  height: auto;
  max-height: none;
  background: transparent;
  font-size: inherit;
}

How can I avoid this in the future?

I've been looking into the Polymer Project, which could in theory allow me to use custom web components to define elements that are completely off the defined rules.

Another alternative is using:

.myWidget > * { all: unset; }

But it's only supported on Firefox 27.

How should I go about doing this?

Giacomo1968
  • 25,759
  • 11
  • 71
  • 103
Alain Jacomet Forte
  • 4,575
  • 6
  • 29
  • 41

3 Answers3

1

It is not possible to isolate an HTML element from CSS styles, if the element is in document that uses CSS styles. Even the setting all: unset does not do that (even though it might seem to do that if you don’t know the differences between initial, default, and inherited values).

You could get rid of the effects of other style sheets by putting your widget into a separate HTML document, which does not use any styles except yours. But then it would have to be embedded with an iframe element (or some other embedding element), and it would work on its own, and any interaction with the embedding document would have to arranged separately (if possible at all).

What you can do is to design your HTML and CSS so that it works together with other CSS settings, i.e. works with the cascade in mind, rather than trying to get rid of it.

Jukka K. Korpela
  • 195,524
  • 37
  • 270
  • 390
0

This is sort of a hack but based of this answer apply the class .reset-this to any element you want and then apply your additional styles.

Demo here...

Include this css class in your page:

.reset-this {
    animation : none;
    animation-delay : 0;
    animation-direction : normal;
    animation-duration : 0;
    animation-fill-mode : none;
    animation-iteration-count : 1;
    animation-name : none;
    animation-play-state : running;
    animation-timing-function : ease;
    backface-visibility : visible;
    background : 0;
    background-attachment : scroll;
    background-clip : border-box;
    background-color : transparent;
    background-image : none;
    background-origin : padding-box;
    background-position : 0 0;
    background-position-x : 0;
    background-position-y : 0;
    background-repeat : repeat;
    background-size : auto auto;
    border : 0;
    border-style : none;
    border-width : medium;
    border-color : inherit;
    border-bottom : 0;
    border-bottom-color : inherit;
    border-bottom-left-radius : 0;
    border-bottom-right-radius : 0;
    border-bottom-style : none;
    border-bottom-width : medium;
    border-collapse : separate;
    border-image : none;
    border-left : 0;
    border-left-color : inherit;
    border-left-style : none;
    border-left-width : medium;
    border-radius : 0;
    border-right : 0;
    border-right-color : inherit;
    border-right-style : none;
    border-right-width : medium;
    border-spacing : 0;
    border-top : 0;
    border-top-color : inherit;
    border-top-left-radius : 0;
    border-top-right-radius : 0;
    border-top-style : none;
    border-top-width : medium;
    bottom : auto;
    box-shadow : none;
    box-sizing : content-box;
    caption-side : top;
    clear : none;
    clip : auto;
    color : inherit;
    columns : auto;
    column-count : auto;
    column-fill : balance;
    column-gap : normal;
    column-rule : medium none currentColor;
    column-rule-color : currentColor;
    column-rule-style : none;
    column-rule-width : none;
    column-span : 1;
    column-width : auto;
    content : normal;
    counter-increment : none;
    counter-reset : none;
    cursor : auto;
    direction : ltr;
    display : inline;
    empty-cells : show;
    float : none;
    font : normal;
    font-family : inherit;
    font-size : medium;
    font-style : normal;
    font-variant : normal;
    font-weight : normal;
    height : auto;
    hyphens : none;
    left : auto;
    letter-spacing : normal;
    line-height : normal;
    list-style : none;
    list-style-image : none;
    list-style-position : outside;
    list-style-type : disc;
    margin : 0;
    margin-bottom : 0;
    margin-left : 0;
    margin-right : 0;
    margin-top : 0;
    max-height : none;
    max-width : none;
    min-height : 0;
    min-width : 0;
    opacity : 1;
    orphans : 0;
    outline : 0;
    outline-color : invert;
    outline-style : none;
    outline-width : medium;
    overflow : visible;
    overflow-x : visible;
    overflow-y : visible;
    padding : 0;
    padding-bottom : 0;
    padding-left : 0;
    padding-right : 0;
    padding-top : 0;
    page-break-after : auto;
    page-break-before : auto;
    page-break-inside : auto;
    perspective : none;
    perspective-origin : 50% 50%;
    position : static;
    /* May need to alter quotes for different locales (e.g fr) */
    quotes : '\201C' '\201D' '\2018' '\2019';
    right : auto;
    tab-size : 8;
    table-layout : auto;
    text-align : inherit;
    text-align-last : auto;
    text-decoration : none;
    text-decoration-color : inherit;
    text-decoration-line : none;
    text-decoration-style : solid;
    text-indent : 0;
    text-shadow : none;
    text-transform : none;
    top : auto;
    transform : none;
    transform-style : flat;
    transition : none;
    transition-delay : 0s;
    transition-duration : 0s;
    transition-property : none;
    transition-timing-function : ease;
    unicode-bidi : normal;
    vertical-align : baseline;
    visibility : visible;
    white-space : normal;
    widows : 0;
    width : auto;
    word-spacing : normal;
    z-index : auto;
}
Community
  • 1
  • 1
Krimson
  • 7,386
  • 11
  • 60
  • 97
  • and so why the downvote? I mean the answer I took this stuff of got 33 up votes so you must have pretty good reason for downvoting... – Krimson Apr 17 '14 at 01:41
-2

What you are trying to do is a CSS reset. I recommend normalize.css, but there are several established, popular styles. What they do is defined a common, know base style for each element.

Also I do not recommend setting style on elements, but rather use a CSS class to define rules for you visual components.

Chris Love
  • 3,740
  • 1
  • 19
  • 16
  • What if we're talking about something more complex than just resetting elements. Using 2 bootstrap versions, one for the global styles, and one for the widget, for example? What would you do with classes like .btn in this case? – Alain Jacomet Forte Apr 16 '14 at 01:44
  • CSS resets are completely different; they *add* something to the CSS cascade, whereas the goal (which is impossible in CSS) is to *remove* something from the cascade. – Jukka K. Korpela Apr 16 '14 at 05:23
  • "resulted very different because global styles set on elements like section, or header were affecting it." This implies the base styles set by the browser were problematic. So a reset would resolve that problem. It is never impossible to override rules in the cascade, you just need to know where to add your rules, which should be after any 3rd party CSS. – Chris Love Apr 18 '14 at 11:45