Reset/remove CSS styles for element only

前端 未结 14 869
长情又很酷
长情又很酷 2020-11-22 00:52

I\'m sure this must have been mentioned/asked before but have been searching for an age with no luck, my terminology must be wrong!

I vaguely remember a twee

相关标签:
14条回答
  • 2020-11-22 01:23

    Any chance you're looking for the !important rule? It doesn't undo all declarations but it provides a way to override them.

    "When an !important rule is used on a style declaration, this declaration overrides any other declaration made in the CSS, wherever it is in the declaration list. Although, !important has nothing to do with specificity."

    https://developer.mozilla.org/en-US/docs/CSS/Specificity#The_!important_exception

    0 讨论(0)
  • 2020-11-22 01:26

    The CSS3 keyword initial sets the CSS3 property to the initial value as defined in the spec. The initial keyword has broad browser support except for the IE and Opera Mini families.

    Since IE's lack of support may cause issue here are some of the ways you can reset some CSS properties to their initial values:

    .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;
        /* basic modern patch */
        all: initial;
        all: unset;
    }
    
    /* basic modern patch */
    
    #reset-this-root {
        all: initial;
        * {
            all: unset;
        }
    }
    
    • Relevent github repo with a december 2017 more exaustive list
    • Related
    • Related from MDN
    • Related W3C specs

    As mentioned in a comment by @user566245 :

    this is correct in principle, but individual mileage may vary. For example certain elements like textarea by default have a border, applying this reset will render those textarea's border less.

    [POST EDIT FEB 4, '17] Upvoted for becoming a modern norm, user Joost

    #reset-this-parent {
      all: initial;
      * {
        all: unset;
      }
    }
    

    EXAMPLE FROM W3

    For example, if an author specifies all: initial on an element it will block all inheritance and reset all properties, as if no rules appeared in the author, user, or user-agent levels of the cascade.

    This can be useful for the root element of a "widget" included in a page, which does not wish to inherit the styles of the outer page. Note, however, that any "default" style applied to that element (such as, e.g. display: block from the UA style sheet on block elements such as ) will also be blown away.


    JAVASCRIPT ?

    Nobody thought about other than css to reset css? Yes?

    There is that snip fully relevant : https://stackoverflow.com/a/14791113/845310

    getElementsByTagName("*") will return all elements from DOM. Then you may set styles for each element in the collection:

    answered Feb 9 '13 at 20:15 by VisioN

    var allElements = document.getElementsByTagName("*");
    for (var i = 0, len = allElements.length; i < len; i++) {
        var element = allElements[i];
        // element.style.border = ...
    }
    

    With all this said; i don't think a css reset is something feasable unless we end up with only one web browser .. if the 'default' is set by browser in the end.

    For comparison, here is Firefox 40.0 values list for a <blockquote style="all: unset;font-style: oblique"> where font-style: oblique triggers DOM operation.

    align-content: unset;
    align-items: unset;
    align-self: unset;
    animation: unset;
    appearance: unset;
    backface-visibility: unset;
    background-blend-mode: unset;
    background: unset;
    binding: unset;
    block-size: unset;
    border-block-end: unset;
    border-block-start: unset;
    border-collapse: unset;
    border-inline-end: unset;
    border-inline-start: unset;
    border-radius: unset;
    border-spacing: unset;
    border: unset;
    bottom: unset;
    box-align: unset;
    box-decoration-break: unset;
    box-direction: unset;
    box-flex: unset;
    box-ordinal-group: unset;
    box-orient: unset;
    box-pack: unset;
    box-shadow: unset;
    box-sizing: unset;
    caption-side: unset;
    clear: unset;
    clip-path: unset;
    clip-rule: unset;
    clip: unset;
    color-adjust: unset;
    color-interpolation-filters: unset;
    color-interpolation: unset;
    color: unset;
    column-fill: unset;
    column-gap: unset;
    column-rule: unset;
    columns: unset;
    content: unset;
    control-character-visibility: unset;
    counter-increment: unset;
    counter-reset: unset;
    cursor: unset;
    display: unset;
    dominant-baseline: unset;
    empty-cells: unset;
    fill-opacity: unset;
    fill-rule: unset;
    fill: unset;
    filter: unset;
    flex-flow: unset;
    flex: unset;
    float-edge: unset;
    float: unset;
    flood-color: unset;
    flood-opacity: unset;
    font-family: unset;
    font-feature-settings: unset;
    font-kerning: unset;
    font-language-override: unset;
    font-size-adjust: unset;
    font-size: unset;
    font-stretch: unset;
    font-style: oblique;
    font-synthesis: unset;
    font-variant: unset;
    font-weight: unset;
    font: ;
    force-broken-image-icon: unset;
    height: unset;
    hyphens: unset;
    image-orientation: unset;
    image-region: unset;
    image-rendering: unset;
    ime-mode: unset;
    inline-size: unset;
    isolation: unset;
    justify-content: unset;
    justify-items: unset;
    justify-self: unset;
    left: unset;
    letter-spacing: unset;
    lighting-color: unset;
    line-height: unset;
    list-style: unset;
    margin-block-end: unset;
    margin-block-start: unset;
    margin-inline-end: unset;
    margin-inline-start: unset;
    margin: unset;
    marker-offset: unset;
    marker: unset;
    mask-type: unset;
    mask: unset;
    max-block-size: unset;
    max-height: unset;
    max-inline-size: unset;
    max-width: unset;
    min-block-size: unset;
    min-height: unset;
    min-inline-size: unset;
    min-width: unset;
    mix-blend-mode: unset;
    object-fit: unset;
    object-position: unset;
    offset-block-end: unset;
    offset-block-start: unset;
    offset-inline-end: unset;
    offset-inline-start: unset;
    opacity: unset;
    order: unset;
    orient: unset;
    outline-offset: unset;
    outline-radius: unset;
    outline: unset;
    overflow: unset;
    padding-block-end: unset;
    padding-block-start: unset;
    padding-inline-end: unset;
    padding-inline-start: unset;
    padding: unset;
    page-break-after: unset;
    page-break-before: unset;
    page-break-inside: unset;
    paint-order: unset;
    perspective-origin: unset;
    perspective: unset;
    pointer-events: unset;
    position: unset;
    quotes: unset;
    resize: unset;
    right: unset;
    ruby-align: unset;
    ruby-position: unset;
    scroll-behavior: unset;
    scroll-snap-coordinate: unset;
    scroll-snap-destination: unset;
    scroll-snap-points-x: unset;
    scroll-snap-points-y: unset;
    scroll-snap-type: unset;
    shape-rendering: unset;
    stack-sizing: unset;
    stop-color: unset;
    stop-opacity: unset;
    stroke-dasharray: unset;
    stroke-dashoffset: unset;
    stroke-linecap: unset;
    stroke-linejoin: unset;
    stroke-miterlimit: unset;
    stroke-opacity: unset;
    stroke-width: unset;
    stroke: unset;
    tab-size: unset;
    table-layout: unset;
    text-align-last: unset;
    text-align: unset;
    text-anchor: unset;
    text-combine-upright: unset;
    text-decoration: unset;
    text-emphasis-position: unset;
    text-emphasis: unset;
    text-indent: unset;
    text-orientation: unset;
    text-overflow: unset;
    text-rendering: unset;
    text-shadow: unset;
    text-size-adjust: unset;
    text-transform: unset;
    top: unset;
    transform-origin: unset;
    transform-style: unset;
    transform: unset;
    transition: unset;
    user-focus: unset;
    user-input: unset;
    user-modify: unset;
    user-select: unset;
    vector-effect: unset;
    vertical-align: unset;
    visibility: unset;
    white-space: unset;
    width: unset;
    will-change: unset;
    window-dragging: unset;
    word-break: unset;
    word-spacing: unset;
    word-wrap: unset;
    writing-mode: unset;
    z-index: unset;
    
    0 讨论(0)
  • 2020-11-22 01:30

    No, this is just a matter of managing your css structure better.

    In your case i would order my css something like this:

    .element, .element1, .element2 p{z-index: 50; display: block}
    .element, .element1{margin: 0 10}
    .element2 p{transform: translate3d(0, 0, 0)}
    
    @media only screen and (min-width: 980px) {
    .element, .element1, .element2 p{display: none}
    }
    

    Just experiment.

    0 讨论(0)
  • 2020-11-22 01:33

    BETTER SOLUTION

    Download "copy/paste" stylesheet‎ to reset css properties to default (UA style):
    https://github.com/monmomo04/resetCss.git

    Thanks@Milche Patern!
    I was really looking for reset/default style properties value. My first try was to copy the computed value from the browser Dev tool of the root(html) element. But as it computed, it would have looked/worked different on every system.
    For those who encounter a browser crash when trying to use the asterisk * to reset the style of the children elements, and as I knew it didn't work for you, I have replaced the asterisk "*" with all the HTML tags name instead. The browser didn't crash; I am on Chrome Version 46.0.2490.71 m.
    At last, it's good to mention that those properties will reset the style to the default style of topest root element but not to the initial value for each HTML element. ‎So to correct this, I have taken the "user-agent" styles of webkit based browser and implemented it under the "reset-this" class.

    Useful link:


    Download "copy/paste" stylesheet‎ to reset css properties to default (UA style):
    https://github.com/monmomo04/resetCss.git

    User-agent style:
    Browsers' default CSS for HTML elements
    http://trac.webkit.org/browser/trunk/Source/WebCore/css/html.css

    Css specifity (pay attention to specifity) :
    https://css-tricks.com/specifics-on-css-specificity/

    https://github.com/monmomo04/resetCss.git

    0 讨论(0)
  • 2020-11-22 01:34

    Let me answer this question thoroughly, because it's been a source of pain for me for several years and very few people really understand the problem and why it's important for it to be solved. If I were at all responsible for the CSS spec I'd be embarrassed, frankly, for having not addressed this in the last decade.

    The Problem

    You need to insert markup into an HTML document, and it needs to look a specific way. Furthermore, you do not own this document, so you cannot change existing style rules. You have no idea what the style sheets could be, or what they may change to.

    Use cases for this are when you are providing a displayable component for unknown 3rd party websites to use. Examples of this would be:

    1. An ad tag
    2. Building a browser extension that inserts content
    3. Any type of widget

    Simplest Fix

    Put everything in an iframe. This has it's own set of limitations:

    1. Cross Domain limitations: Your content will not have access to the original document at all. You cannot overlay content, modify the DOM, etc.
    2. Display Limitations: Your content is locked inside of a rectangle.

    If your content can fit into a box, you can get around problem #1 by having your content write an iframe and explicitly set the content, thus skirting around the issue, since the iframe and document will share the same domain.

    CSS Solution

    I've search far and wide for the solution to this, but there are unfortunately none. The best you can do is explicitly override all possible properties that can be overridden, and override them to what you think their default value should be.

    Even when you override, there is no way to ensure a more targeted CSS rule won't override yours. The best you can do here is to have your override rules target as specifically as possible and hope the parent document doesn't accidentally best it: use an obscure or random ID on your content's parent element, and use !important on all property value definitions.

    0 讨论(0)
  • 2020-11-22 01:35

    In my specific scenario i wanted to skip applying common styles to a specific part of the page, better illustrated like this:

    <body class='common-styles'>
        <div id='header'>Wants common styles</div>
        <div id='container'>Does NOT want common styles</div>
        <div id='footer'>Wants common styles</div>
    </body>
    

    After messing with CSS reset which didn't bring much success (mainly because of rules precedence and complex stylesheet hierarchy), brought up ubiquitous jQuery to the rescue, which did the job very quickly and reasonably dirty:

    $(function() {
        $('body').removeClass('common-styles');
        $('#header,#footer').addClass('common-styles');
    });
    

    (Now tell how evil it is to use JS to deal with CSS :-) )

    0 讨论(0)
提交回复
热议问题