Итак, в основном у меня есть страница с собственным CSS. На моем сервере у меня есть папка с разными файлами стиля CSS, поэтому я хочу, чтобы на них было окно предварительного просмотра. Могу ли я каким-то образом, возможно, использовать javascript, применить внешний файл CSS только к определенному DIV, а не ко всей странице, чтобы я мог получить "предварительный просмотр" пользовательского файла CSS? Я бы предпочел не использовать iframes.
Загрузите внешний CSS для определенного DIV
Ответ 1
CSS применяется ко всем документам.
Если вы хотите ограничить область действия, вам нужно использовать селектор потомков.
например. #id_of_div .the .rest .of .the .selector {}
Вы должны применить это к каждому селектору и принять во внимание groups (так что это не так просто, как просто префикс всей таблицы стилей и суффиксом каждого }
)
Вы также найдете таблицу стилей для основного документа, применяемую к вашему превью.
Кадр, вероятно, будет лучшим подходом к решению этой проблемы.
Ответ 2
Как сказал Квентин, вы можете использовать селектор потомков, чтобы ограничить область действия. Что-то вроде less может многое помочь. Например, я хотел бы иметь "bootstrap.css" применимо только к #MyDiv, в "my.less":
#MyDiv {
@import "bootstrap.less";
}
"bootstrap.css" следует переименовать (или связать) с "bootstrap.less". Run:
lessc my.less my.css
добавит #MyDiv к каждому селектору в импортированном файле.
Ответ 3
Для одного из моих проектов мне нужно было точно то же самое, но также поддерживалось в CSS версии 2.
После долгого поиска по всему миру я не нашел ничего полезного, поэтому решил создать эту функциональность с помощью JavaScript, который может реально применить целое css к определенному элементу в DOM.
Просто вызовите функцию applyCSSFileToElement, как описано ниже (зависит от библиотеки jQuery):
function renderCSSForSelector(css, selector) {
return ((css+"")||"").replace(/\n|\t/g, " ")
.replace(/\s+/g, " ")
.replace(/\s*\/\*.*?\*\/\s*/g, " ")
.replace(/(^|\})(.*?)(\{)/g, function($0, $1, $2, $3) {
var collector = [], parts = $2.split(",");
for (var i in parts) {
collector.push(selector + " " + parts[i].replace(/^\s*|\s*$/, ""));
}
return $1 + " " + collector.join(", ") + " " + $3;
});
}
function applyCSSToElement(css, elementSelector) {
$("head").append("<style type=\"text/css\">" + renderCSSForSelector(css, elementSelector) + "</style>");
}
function applyCSSFileToElement(cssUrl, elementSelector, callbackSuccess, callbackError) {
callbackSuccess = callbackSuccess || function(){};
callbackError = callbackError || function(){};
$.ajax({
url: cssUrl,
dataType: "text/css",
success: function(data) {
applyCSSToElement(data, elementSelector);
callbackSuccess();
},
error: function(jqXHR) {
callbackError();
}
})
}
Объяснения функций:
- renderCSSForSelector - фактически добавляет селектор для каждого определения стиля.
- applyCSSToElement - принимает исходные данные CSS, применяет renderCSSForSelector и вводит его в тег HEAD.
- applyCSSFileToElement. Применяет файл CSS (cssUrl) в определенную область (elementSelector) в DOM. Вызов callbackSuccess вызывается, когда файл загружен успешно и применяется CSS. Вызов callbackError вызывается при ошибке загрузки файла CSS.
Удачи!
Ответ 4
Вы можете использовать iframe для загрузки страницы предварительного просмотра или динамической загрузки CSS на страницу. Но, если вы хотите, чтобы стили использовались только при применении к div, вы должны префиксные ваши селекторы CSS с идентификатором div. #div-id #element-inside-div { }
.
script для его загрузки может выглядеть примерно так:
var cssFile = document.createElement( "link" );
cssFile.rel = "stylesheet";
cssFile.type = "text/css";
cssFIle.href = "file.css";
document.getElementsByTagName( "head" )[0].appendChild( cssFile );