Безупречный способ предотвращения воздействия элемента на внешний css

Я делаю script, который будет реализован на нескольких страницах, и я пытаюсь помешать созданным им элементам стилизоваться на страницах css. У некоторых людей есть идея написать css следующим образом:

body>*{min-height:200px;}

Итак, я нашел это новое свойство css:

.elem{ all: initial }

И это работает очень хорошо, но у меня уже возникли некоторые проблемы, и я уверен, что может быть много, о которых я не знаю. Например, для Internet explorer (даже ie11!!!) до reset min-height, вы не можете использовать начальную, вы должны использовать 0! Поэтому all:initial не отменяет min-height...

Вы знаете лучший способ сделать это или, по крайней мере, список свойств, о которых я должен позаботиться индивидуально?

EDIT: лучше объяснить, что я хочу. Я сделаю это в JS (я уже упоминал, что это script), и меня интересуют не только решения. Я хотел бы знать, почему это решение работает и почему лучше, чем тот, который я предлагаю. Кроме того, я знаю о производительности, поэтому я бы предпочел использовать минимальное количество правил, если это возможно: я хотел бы узнать, например, наиболее опасные.

Ответы

Ответ 1

Сейчас у нас нет единых CSS-эффектов для всех основных браузеров! Но мы все же можем создать класс, который будет reset больше всего свойств 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;
}

Ознакомьтесь с этими ссылками для более подробной информации:

Источник свойств | Начальное значение MDN

Ответ 2

Я делаю script, который будет реализован на нескольких страницах, и я пытаюсь помешать созданным им элементам стилизоваться на страницах css.

Не самая распространенная вещь в CSS, обычно это наоборот, поэтому решения не будут распространяться. Если вы не хотите генерировать встроенные правила в JavaScript, но я останусь с решениями только для CSS.

Одно дело - использовать класс и определять правило для каждого тега с этим классом (чтобы сделать его более конкретным) - теперь он как класс reset для тегов, так что скажем, что класс называется untouched:

a.untouched
div.untouched
.someOther.untouched
...etc

Теперь, я не знаю, насколько хорошо структурирован ваш оригинальный CSS - чем лучше он структурирован, тем меньше будет untouched элементов, которые у вас есть.

Даже этого может быть недостаточно в некоторых случаях, когда исходные правила имеют более высокую специфичность, и для того, чтобы преодолеть это (и не нужно вручную переуступать все варианты экземпляра), я боюсь, что вам придется использовать пресловутое правило !important для всех этих правил reset, например:

a.untouched {color: black !important; font-size: 16px !important}

Это выглядит уродливым, и это определенно не лучшая практика, но это, вероятно, самое простое/наиболее распространенное решение в вашем случае.

И вот отличный инструмент для вычисления специфичности селектора: http://specificity.keegan.st/


Вот простой пример с несколькими вариантами абзаца:

p {color: #999; font-size: 14px; margin: 0 0 2px;}
p.red {color: red}
p.big {font-size: 20px}
p#superRed {color: red; text-shadow: 0 0 4px red;}
p > span {color: blue}

p.untouched, p.untouched > span {color: green !important; font-size: 12px !important; text-shadow: none !important;}
Originals: 

<p>Test</p>
<p class="red">Test</p>
<p class="big">Test</p>
<p class="big red">Test</p>
<p id="superRed">Test</p>
<p><span>Test</span></p>

<br><br>
Untouched: 

<p class="untouched">Test</p>
<p class="untouched red">Test</p>
<p class="untouched big">Test</p>
<p class="untouched big red">Test</p>
<p class="untouched" id="superRed">Test</p>
<p class="untouched"><span>Test</span></p>

Ответ 3

Как насчет использования Cleanslate?

Оберните созданные вами элементы контейнером, который имеет класс "очистить", и создайте элементы в этом контейнере с важными правилами. Более подробную информацию можно найти по ссылке выше.

Ответ 4

Ваша единственная работающая лучшая ставка - это переопределить стили в программе Javascript вручную для всех элементов, создаваемых вашей программой. Например, в jQuery:

$('.my-own-elem').css('attr', 'value');

То есть вы создаете элемент и сразу же ставите его так, как хотите. Чтобы предотвратить FOUC, вы можете создать необработанный элемент DOM, стилизовать его и прикрепить к нему после того, как он был полностью подготовлен.

Реально, переопределения стилей из Javascript имеют максимальный приоритет во всех браузерах. Однако довольно много работы по стилю с помощью Javascript, и будет еще больше работать, чтобы сделать восстановленный код более удобным.

Ответ 5

Если вы создаете элемент inline-ly, он не будет затронут внешним css, если вы не используете атрибут [style] для переопределения встроенного стиля.

Пример:

<p style="background: red;">Paragraph</p>

Единственный способ переопределить этот стиль во внешнем файле css будет следующим:

p[style] {background: black !important;}

Таким образом, элемент не будет затронут внешним css, если вы не хотите.