从CSS样式中隔离HTML元素

时间:2014-04-16 00:30:52

标签: css

我最近构建了一个小部件,当它在生产网站中使用时,会产生很大的不同,因为在sectionheader等元素上设置的全局样式会影响它。

因此,我必须向窗口小部件添加特定的CSS样式,以便覆盖网站设置的样式,例如:

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

将来如何避免这种情况?

我一直在研究Polymer Project,理论上我可以使用自定义Web组件来定义完全不受定义规则限制的元素。

另一种选择是使用:

.myWidget > * { all: unset; }

但它仅在Firefox 27上受支持。

我该怎么做呢?

3 个答案:

答案 0 :(得分:1)

如果元素位于使用CSS样式的文档中,则无法将CSS元素与CSS样式隔离。即使设置all: unset也没有这样做(即使你不知道初始值,默认值和继承值之间的差异,它似乎也可以这样做。)

您可以通过将窗口小部件放入单独的HTML文档中来消除其他样式表的影响,除了您的文档之外不会使用任何样式。但是它必须嵌入iframe元素(或其他一些嵌入元素),并且它可以独立工作,并且与嵌入文档的任何交互都必须单独排列(如果可能的话)

你可以做的是设计你的HTML和CSS,使它与其他CSS设置一起工作,即考虑到级联,而不是试图摆脱它。

答案 1 :(得分:0)

这有点像黑客,但based of this answer将类.reset-this应用于您想要的任何元素,然后应用其他样式。

Demo here...

在您的页面中包含此css类:

.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;
}

答案 2 :(得分:-1)

您要做的是重置CSS。我推荐normalize.css,但有几种已建立的流行风格。他们所做的是为每个元素定义一个共同的,知道的基本风格。

另外,我不建议在元素上设置样式,而是使用CSS类为可视组件定义规则。