Каков наилучший способ изменить CSS другого веб-сайта на моем веб-сайте? [Дубликат]

Я согласен с ответом от zacherates.

Но вы можете сделать вызов intern () в ваших нелиберальных строках.

Из примера zacherates:

// ... but they are not the same object
new String("test") == "test" ==> false 

Если вы ставите нелитеральное равенство строки, это правда

new String("test").intern() == "test" ==> true 
19
задан dippas 13 December 2017 в 23:20
поделиться

12 ответов

Помимо использования !important, что большинство ответов советуют вам использовать, это вопрос Специфика CSS

Концепция

Специфика - это способ, с помощью которого браузер решает, какие значения свойств наиболее важны для элемента и может применяться. Специфика основана только на правилах сопоставления, которые состоят из селекторов разного рода.

Как он вычисляется?

Специфика вычисляется по конкатенации счетчика каждого типа селекторов , Это вес, который применяется к соответствующему совпадающему выражению.

В случае равенства спецификаций к элементу применяется последнее объявление, найденное в CSS.

Некоторые эмпирические правила

  • Никогда не используйте! важно на сайте css.
  • Используйте только значение на странице css, которое переопределяет общесистемные или внешние css (из ExtJs или YUI для пример).
  • Никогда не используйте! важно, когда вы пишете плагин / mashup.
  • Всегда ищите способ использовать специфику, прежде чем даже подумать! important

может быть представлена ​​четырьмя столбцами приоритета:

inline = 1 | 0 | 0 | 0

id = 0 | 1 | 0 | 0

class = 0 | 0 | 1 | 0

element = 0 | 0 | 0 | 1

Слева направо наибольшее число имеет приоритет.

Вот фрагмент с Полный пример специфичности CSS

/*demo purposes*/
body {margin: 0;padding: 0}
div,article {min-height: 200px;height: 100%;width: 100%}

/*CSS Specificity */

/* SPECIFICITY 0/1/0/0 */
#id {
  background-color: green/*going to be green - overridden by style yellow */
}

/* SPECIFICITY  0/0/1/0 */
.class {
  background-color: yellow /*going to be yellow - overridden by style blue */
}

/* SPECIFICITY  0/0/0/1 */
section {
  background-color: blue /*going to be blue - overridden by style red */
}
  
/* ------------ just to remove inline demo ----------- */

/*now remove background for inline elements we should
use !important and a parent in order to make it more specific

/* SPECIFICITY  1/0/0/1 */

section > div {
  background-color: purple !IMPORTANT /*going to be purple - final result */ 
}
<article>
  <div id="id">
    <div class="class">
      <section>
        <div style="background-color:red">
          <!--SPECIFICITY 1/0/0/0 - overridden by style purple -->
        </div>
      </section>
    </div>
  </div>
</article>

Теперь вот полный фрагмент шаг за шагом

ID: GREEN

/*demo purposes*/
body {margin: 0;padding: 0}
div,article {min-height: 200px;height: 100%;width: 100%}

/*CSS Specificity */

/* SPECIFICITY 0/1/0/0 */
#id {
  background-color: green
}
   
<article>
  <div id="id">
    <div class="class">
      <section>
        <div>             
        </div>
      </section>
    </div>
  </div>
</article>

КЛАСС: ЖЕЛТЫЙ

/*demo purposes*/
body {margin: 0;padding: 0}
div,article {min-height: 200px;height: 100%;width: 100%}

/*CSS Specificity */

/* SPECIFICITY  0/0/1/0 */
.class {
  background-color: yellow
}
<article>
  <div id="id">
    <div class="class">
      <section>
        <div>
        </div>
      </section>
    </div>
  </div>
</article>

ELEMENT: BLUE

/*demo purposes*/
body {margin: 0;padding: 0}
div,article {min-height: 200px;height: 100%;width: 100%}

/*CSS Specificity */

/* SPECIFICITY  0/0/0/1 */
section {
  background-color: blue
}
<article>
  <div id="id">
    <div class="class">
      <section>
        <div>
        </div>
      </section>
    </div>
  </div>
</article>

INLINE STYLE: RED

/*demo purposes*/
body {margin: 0;padding: 0}
div,article {min-height: 200px;height: 100%;width: 100%}

 
<article>
  <div id="id">
    <div class="class">
      <section>
        <div style="background-color:red">
        <!--SPECIFICITY 1/0/0/0 -->
        </div>
      </section>
    </div>
  </div>
</article>

OVERRIDDEN INLINE STYLE: PURPLE

/*demo purposes*/
body {margin: 0;padding: 0}
div,article {min-height: 200px;height: 100%;width: 100%}
/*CSS Specificity */

/* SPECIFICITY  1/0/0/1 */

section > div {
  background-color: purple !IMPORTANT
}

 
<article>
  <div id="id">
    <div class="class">
      <section>
        <div style="background-color:red">
        <!--SPECIFICITY 1/0/0/0 -->
        </div>
      </section>
    </div>
  </div>
</article>


Вы можете вычислить специфичность вашего элемента (ов) здесь

< hr>

Примечание:

A необходимо прочитать на эту тему

40
ответ дан dippas 15 August 2018 в 22:05
поделиться

К сожалению, я должен согласиться с phari .

Цитата:

1) Вы не можете полностью изменить HTML-страницу страницы , и поэтому не может содержать другой файл CSS. 2) Вы можете изменить файлы CSS, но разработчики могут позже их модифицировать и удалить любые сделанные вами изменения. Следовательно, вы не можете постоянно изменять файлы CSS. 3) Вы не можете / не хотите использовать Javascript и JQuery). Если все это верно, нет решения вашей проблемы.

Комментирует phari 26 марта в 14:29

Позвольте мне сломать это. Я попытаюсь изо всех сил объяснить, почему нет решения (исправьте меня, если я ошибаюсь в любом из этих вариантов);

Вариант 1: Использование jQuery или Javascript. Вы не можете изменить HTML страницы вообще! Вы не хотите использовать jquery или javascript. Это означает, что все ответы на ваш вопрос, упомянутые на этой странице, которые включают jquery или javascript, не учитываются. Это не означает, что ответы, приведенные на этой странице, неверны. В вашем случае это невозможно.

Вариант 2: @import url(css4.css); На вашем веб-сайте есть 3 файла css, которые автоматически включаются как часть веб-сайта, но, к сожалению, у вас нет доступ к ЛЮБОЙ из этих файлов css. Вы не можете поместить этот фрагмент кода в css3.css или в любой из этих файлов. Вы можете изменить файлы CSS, но разработчики могут позже их модифицировать и удалить любые сделанные вами изменения, что означает, что @import url(css4.css); также можно удалить. Также использование @import url(css4.css); было бы совершенно бесполезным. Вам нужно будет поместить @import url(css4.css); в конец css3.css, но это не сработает, потому что правила @import всегда должны быть первыми в документе. Если я не ошибаюсь, Илья (который прокомментировал 23 марта в 9:42) означал, что код может быть размещен в любом месте файла. @import url(css4.css); должен быть наверху. Ссылка ilia, представленная как «доказать», также указывает, что это требование , чтобы поместить его в начале .. Проверьте две ссылки ниже. Подробнее посетите http://webdesign.about.com/cs/css/qt/tipcssatimport.htm или https://developer.mozilla.org/en/docs/Web/CSS / @ импорт # Технические характеристики . Вариант 2 также игнорируется.

Я не думаю, что может быть другой способ сделать то, что вы хотите сделать. Следовательно, решения вашей проблемы нет.

0
ответ дан chippie3000 15 August 2018 в 22:05
поделиться

Если я понимаю, что вы правильно задали вопрос, добавив @import url(css4.css) в начало css3.css, импортируйте свою таблицу стилей в css3.css. Но ваши стили переопределяются стилями в css3.css. Это связано с каскадным порядком и Specificity . Чтобы ваши стили css4.css были использованы, ваши селекторы должны иметь более высокую специфичность, чем селектор в css.3.css, который вы пытаетесь переопределить.

Пример: теги <h1> будут окрашены в красный цвет.

body h1 { //this is more specific
   color: blue;
}

h1 { //this is less specific
   color: red;
}

Но поскольку вы @import url(css4.css) строка кода будет удаляться каждый раз, когда разработчики обновят css3.css file это не «пуленепробиваемое решение»

У вас есть возможность добавить любой javascript на сайт? Если это так, вы можете использовать следующее решение

jQuery

$('head').append('<link rel="stylesheet" type="text/css" href="css4.css">');

Javascript

var head = document.head
  , link = document.createElement('link')

link.type = 'text/css'
link.rel = 'stylesheet'
link.href = 'css4.css'

head.appendChild(link)

Источник: https://stackoverflow.com/ а / 11833777/2687861

0
ответ дан Community 15 August 2018 в 22:05
поделиться
  • 1
    Не хотите использовать какой-либо javascript, потому что есть тонны страниц, которые мне придется изменить, чтобы это работало правильно. Я бы предпочел сделать это с помощью CSS. – Neophile 26 March 2015 в 13:26
  • 2
    Если на всех страницах был бы один файл js, это было бы не так сложно. В css нет решения с указанными вами периметрами. Возможно, если бы вы подробно рассказали о своей конкретной ситуации, мы могли бы найти решение. – Craig Harshbarger 30 March 2015 в 13:53
  • 3
    К сожалению нет. Я проверил почти все страницы, и файлы js меняются по каждому. Единственными файлами, которые являются общими, являются файлы css. – Neophile 1 April 2015 в 08:23
  • 4
    Тогда я боюсь, что ваш единственный вариант - использовать @import и повторно добавить его обратно каждый раз, когда разработчики обновляют файл css3.css – Craig Harshbarger 1 April 2015 в 16:27

Вот веселое решение, о котором никто не упомянул.

Факты:

  1. Вы вообще не можете изменять HTML-страницу - не проблема!
  2. Вы можете изменять файлы CSS, но разработчики могут позже их модифицировать и удалить любые сделанные вами изменения - не беспокоиться.
  3. Вы не можете / не хотите использовать Javascript и JQuery - отлично от меня .
  4. Вы можете добавить больше файлов на сервер - Отлично!

Давайте сделаем некоторые .htacess взломать удовольствие и прибыль!

Документ root .htaccess file:

Options +FollowSymlinks
RewriteEngine on
RewriteBase /

RewriteRule ^(.*?)css3.css(.*?) $1hackedCSS3.php$2 [L]

Результат: hackedCSS3.php беззвучно подается вместо css3.css для каждого запроса.

REF: http://httpd.apache.org/docs/2.2/howto/htaccess.html

файл hackedCSS3.php:

<?php

// Send the right header information!
header("Content-type: text/css; charset: UTF-8");

// Output the css3.css file
echo file_get_contents("css3.css");
?>

// Add your CSS here with any neat !important or override tricks (read: specificity)
div { ... }

Бонус:

Вы можете расширить это решение, включив все три файла .css в этот файл .php (но только, скажем, css3.css и отправьте css1.css и css2.css в черную дыру с помощью .htaccess ) и использовать умные регулярные выражения для удаления / изменения CSS этого разработчика, не касаясь каких-либо их файлов. Возможности дразнят.

Приложение:

Можете ли вы быть более конкретным, где включать эти файлы?

. Файл .htaccess должен быть в корневом каталоге документа на веб-сайте. Это где www.example.com/index.html будет загружать index.html

Если файл hackedCSS3.php находится в том же каталоге, что и другие css-файлы?

Он может быть в любом каталоге, указанном в файле .htaccess. Корень документа отлично. Измените

RewriteRule ^(.*?)css3.css(.*?) $1hackedCSS3.php$2 [L]

на

RewriteRule ^(.*?)css3.css(.*?) /folders/you/want/hackedCSS3.php$2 [L]

Если наш css-контент (где вы указали // Добавить свой CSS здесь ...) должен быть в тегах стиля html?

№. Относитесь к своему CSS-коду в этом разделе, как если бы он был .css-файлом. Вам не нужны теги <style>.

7
ответ дан Drakes 15 August 2018 в 22:05
поделиться
  • 1
    Где я могу найти этот файл .htaccess, пожалуйста? – Neophile 1 April 2015 в 10:14
  • 2
    Просто создайте его с помощью текстового редактора. Назовите его ".htaccess & quot; и оставьте его в корневом каталоге вашего сервера. Обратите внимание на ведущую точку. Вот удобный документ: javascriptkit.com/howto/htaccess.shtml – Drakes 1 April 2015 в 10:15
  • 3
    @TheNewbie Привет, любая удача с этим решением? Я могу помочь вам с дополнительными вопросами об этом – Drakes 1 April 2015 в 13:00
  • 4
    Я по делу, и я пытаюсь. Опубликует обновление, если я его заработаю. – Neophile 1 April 2015 в 15:26
  • 5
    У меня мало вопросов; 1. Могу ли я сделать то же самое из файла virtualhost. У меня уже есть RewriteEngine на 2. Можете ли вы быть более конкретным, где включить эти файлы. Я понял, что файл .htaccess должен находиться в корневом каталоге веб-сайта, является ли папка ROOT или корнем веб-сайта? 3. Должен ли файл hackedCSS3.php находиться в том же каталоге, что и другие css-файлы? css1, 2 и 3 находятся в отдельных каталогах в момент 4. Если наш контент css (где вы указали // Добавьте свой CSS здесь ...), должен быть в тегах стиля html? – Neophile 1 April 2015 в 16:25

Используйте @import url('css4.css') на одной из ваших существующих страниц css. Затем используйте спецификацию для выделения вашего нового кода:

Html:

<ul class='ulclass'>
 <li class='liclass'>
  <a class='aclass>The text</a>
 </li>
</ul>

css1.css:

.aclass{
   color : red;
}

css4.css:

ul.ulclass li.liclass a.aclass{
   color: green;
}

Тогда у вас будет green цвет в вашем элементе a

3
ответ дан Eranda 15 August 2018 в 22:05
поделиться

Альтернатива: полагайтесь на каскад вместо специфичности

. Ряд решений здесь рекомендуют использовать @import для включения вашего файла css4.css, а затем модифицировать селектора в нем, чтобы иметь большую специфичность или для использования объявления !important, но есть еще один способ.

Вставить все содержимое css4.css в конце css3.css. Таким образом, вам не нужно полагаться на !important или специфичность, потому что каскадное наследование примет ваши правила в конце файла, если они имеют одинаковую специфичность.

С помощью этого метода вы жертвуете

<div class="mycooldiv">Hello World</div>

Однако, это было бы достаточно легко создать большую специфичность, просто добавив html к началу каждого правила в css4.css, если вы не хотите вставлять его в конце css3.css. Это предпочтительнее добавления !important, где он работает.

Пример импорта, основанный на большей специфичности:

/* @import of css4.css with greater specificity */
html .mycooldiv {
    color: lime;
}

/* Contents of css3.css */
.mycooldiv {
    font: bold 1.2em sans-serif;
    color: tomato;
}
<div class="mycooldiv">Hello World</div>

1
ответ дан gfullam 15 August 2018 в 22:05
поделиться

В новом файле CSS добавьте !important в блок кода, например:

, если у вас есть это на css1.css:

 h2{
 color:#000;
 }

В css4 .css помещает один и тот же элемент, но с !important следующим образом:

 h2{
 color:#ccc !important;
 }

Поэтому !important заставит этот стиль быть во всех отношениях стилем, установленным для элемента, применяется.

3
ответ дан Herland Cid 15 August 2018 в 22:05
поделиться
  • 1
    Пожалуйста, прочитайте мой вопрос еще раз. Я этого не спрашивал. Я спросил, как я могу получить этот новый файл css в качестве моего последнего файла css без какого-либо доступа к исходному коду веб-сайта и просто использовать css для этого. – Neophile 26 March 2015 в 13:04
  • 2
    Это как можно ближе к правильному ответу, поскольку этот вопрос когда-либо появится. Невозможно вставить новый файл CSS в качестве последнего, просто изменив другие файлы CSS, но добавив! Important, как описано здесь , имеет тот же эффект . – radiaph 26 March 2015 в 15:39

Для двойных определений CSS последнее определение будет иметь приоритет.

Если добавленный файл css4.css на самом деле ссылается после «3 css-файлов, которые автоматически включаются», тогда файл css4.css определения должны переопределять предыдущие дубликаты определений из этих других файлов.

Если вы не видите ожидаемых результатов, используйте параметр «источник просмотра» вашего браузера, чтобы подтвердить последовательность, в которой находятся файлы CSS ссылки. Также используйте «Инструменты разработчика» браузера Chrome или «Firebug» для браузера Firefox, чтобы узнать, как браузер интерпретирует определения CSS, чтобы получить результат, которого вы не ожидали. Эти инструменты должны обеспечить понимание вашей проблемы.

0
ответ дан JohnH 15 August 2018 в 22:05
поделиться

Я думаю, у меня есть ответ. Способ, которым я пытался достичь этого, это:

1) Скажем, мой css3 - это последний CSS в списке, и у меня есть все мои изменения в css4. Я сделал копию css3 и назвал ее «css3-Original.css» и добавил мой css4 в ту же папку. Затем я создал еще один css-файл под названием «css3.css» (потому что это последний из них, который требуется для этого списка) и добавлен сначала импорт исходного Css3, а затем мой переопределяющий файл css4.css, как указано ниже:

css3.css (новый)

@import url("css3-Original.css")
@import url("css4.css")

Это лучший способ найти работу. Таким образом, хотя я знаю, что мой css3.css-файл будет изменяться при обновлениях, но я знаю, как я могу заменить его очень легко и быстро. Я использовал! Важно в моем css4.css везде, где это необходимо (если требуется), но в основном из-за его последнего файла css, он использует этот стиль по сравнению с любыми предыдущими (если они не важны).

Спасибо за предложения, ребята. Наконец, мне удалось найти решение.

1
ответ дан Neophile 15 August 2018 в 22:05
поделиться

напишите новый css и используйте идентификатор элементов, а не класс. Также используйте! Important в css.

3
ответ дан Shariq Ansari 15 August 2018 в 22:05
поделиться

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

-1
ответ дан vaibhavkatariya 15 August 2018 в 22:05
поделиться

Чтобы использовать только CSS, лучший способ - использовать инструменты разработчика Chrome или FireFox и найти различный стиль, который вы хотите перезаписать.

Для каждого стиля, который вы найдете, который нужно настроить, используйте модификатор !important.

.newClass {
  color:red !important;
}

Другой способ - написать уникальные имена класса css и снова использовать !important, если вам нужно , Настоящий трюк здесь в особенности. Если идентификатор более специфичен, правило будет применено.

6.4.1 Каскадный порядок

6.4.1.4 Наконец, сортировка по порядку : если два объявления имеют одинаковый вес, происхождение и специфичность, последний указывает на выигрыши. Объявления в импортированных таблицах стилей считаются перед любыми объявлениями в самой таблице стилей.

<a class="my-most-awesome-link its-really-cool">Most awesome link</a>

.my-most-awesome-link.its-really-cool {
  text-decoration:none !important;
  color:red !important;
}

Если вы в отчаянии, вы можете использовать javascript для удаления нежелательных css.

См. JSBin для рабочего примера.

Я нашел эту интересную технику

<script>
function removejscssfile(filename, filetype){
    var targetelement=(filetype=="js")? "script" : (filetype=="css")? "link" : "none"; //determine element type to create nodelist from
    var targetattr=(filetype=="js")? "src" : (filetype=="css")? "href" : "none"; //determine corresponding attribute to test for
    var allsuspects=document.getElementsByTagName(targetelement);
    for (var i=allsuspects.length; i>=0; i--){ //search backwards within nodelist for matching elements to remove
      if (allsuspects[i] && allsuspects[i].getAttribute(targetattr)!=null && allsuspects[i].getAttribute(targetattr).indexOf(filename)!=-1){
          allsuspects[i].parentNode.removeChild(allsuspects[i]); //remove element by calling parentNode.removeChild()
      }
    }
}

removejscssfile("css1.css", "css") ;
removejscssfile("css2.css", "css") ;
removejscssfile("css3.css", "css") ;
</script>
5
ответ дан whoacowboy 15 August 2018 в 22:05
поделиться
  • 1
    Невозможно / Не использовать Javascript. – Neophile 26 March 2015 в 13:28
  • 2
    Первые два метода будут работать. Если вы хотите указать один конкретный пример, я могу ответить на вашу проблему более непосредственно. – whoacowboy 26 March 2015 в 16:30