Je veux utiliser Twitter Bootstrap, mais uniquement sur des éléments spécifiques. Je dois donc trouver un moyen de préfixer toutes les classes Twitter Bootstrap avec mon préfixe ou d'utiliser le moins de mixins. Je ne suis pas encore familiarisé avec cela, alors je ne comprends pas très bien comment faire cela. Voici un exemple du code HTML que j'essaie de styler:
<div class="normal-styles">
<h1>dont style this with bootstrap</h1>
<div class="bootstrap-styles">
<h1>use bootstrap</h1>
</div>
</div>
Dans cet exemple, Twitter Bootstrap appliquerait un style normal aux deux h1
s, mais je veux être plus sélectif quant aux zones sur lesquelles appliquer les styles Twitter Bootstrap.
Cela s'est avéré être plus facile que je pensais. Less et Sass prennent en charge l’espacement de noms (en utilisant la même syntaxe). Lorsque vous incluez bootstrap, vous pouvez le faire dans un sélecteur pour le nommer en espace de nom:
.bootstrap-styles {
@import 'bootstrap';
}
Update: Pour les nouvelles versions de LESS, voici comment procéder:
.bootstrap-styles {
@import (less) url("bootstrap.css");
}
@ Andrew excellente réponse. Vous voudrez également noter que bootstrap modifie le corps {}, principalement pour ajouter une police. Ainsi, lorsque vous l’espacerez en espace de noms via LESS/SASS, votre fichier css en sortie se présente comme suit: (dans bootstrap 3)
.bootstrap-styles body {
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
font-size: 14px;
line-height: 1.428571429;
color: #333333;
background-color: white;
}
mais évidemment il n'y aura pas de balise body dans votre div, donc votre contenu d'amorçage n'aura pas la police bootstrap (puisque tout bootstrap hérite de la police parent)
Pour résoudre ce problème, la réponse devrait être:
.bootstrap-styles {
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
font-size: 14px;
line-height: 1.428571429;
color: #333333;
background-color: white;
@import 'bootstrap';
}
En rassemblant les réponses de @Andrew, @Kevin et @ adamj (plus quelques autres styles), si vous incluez le texte suivant dans un fichier nommé "bootstrap-namespaced.less", vous pouvez simplement importer "bootstrap-namespaced.less" dans n'importe quel fichier moins fichier:
// bootstrap-namespaced.less
// This less file is intended to be imported from other less files.
// Example usage:
// my-custom-namespace {
// import 'bootstrap-namespaced.less';
// }
// Import bootstrap.css (but treat it as a less file) to avoid problems
// with the way Bootstrap is using the parent operator (&).
@import (less) 'bootstrap.css';
// Manually include styles using selectors that will not work when namespaced.
@import 'variables.less';
& {
// From normalize.less
// Previously inside "html {"
// font-family: sans-serif; // Overridden below
-ms-text-size-adjust: 100%;
-webkit-text-size-adjust: 100%;
// Previously inside "body {"
margin: 0;
// From scaffolding.less
// Previously inside "html {"
// font-size: 10px; // Overridden below
-webkit-tap-highlight-color: rgba(0,0,0,0);
// Previously inside "body {"
font-family: @font-family-base;
font-size: @font-size-base;
line-height: @line-height-base;
color: @text-color;
background-color: @body-bg;
}
L'ajout d'un espace de noms à l'amorçage de CSS annulera la fonctionnalité modale car l'amorçage ajoute une classe 'modal-backdrop' directement au corps. Une solution de contournement consiste à déplacer cet élément après avoir ouvert le modal, par exemple:
$('#myModal').modal();
var modalHolder = $('<div class="your-namespace"></div>');
$('body').append(modalHolder);
$('.modal-backdrop').first().appendTo(modalHolder);
Vous pouvez supprimer l'élément dans un gestionnaire pour l'événement 'hide.bs.modal'.
Utilisez la version .less des fichiers. Déterminez les fichiers de moins dont vous avez besoin, puis enveloppez ces fichiers .less avec:
.bootstrap-styles {
h1 { }
}
Cela vous donnera la sortie de:
.bootstrap-styles h1 { }
Pour mieux expliquer toutes les étapes dont parlait Andrew pour ceux qui ne savent pas ce que Less est ... Voici un lien qui explique assez bien comment cela se fait étape par étape Comment isoler Bootstrap ou d’autres bibliothèques CSS
J'ai fait un Gist avec Bootstrap 3 dans une classe nommée .bootstrap-wrapper https://Gist.github.com/onigetoc/20c4c3933cabd8672e3e
J'ai commencé avec cet outil: http://www.css-prefix.com/ Et réparer le reste avec search et remplacer dans PHPstorm . Toutes les polices @ font-face sont hébergées sur maxcdn.
Exemple de première ligne
.bootstrap-wrapper {font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}
Namespacing rompt l'arborescence backdrop du plugin Modal, car elle est toujours ajoutée directement à la balise <body>, en contournant votre élément namespacing auquel les styles sont appliqués.
Vous pouvez résoudre ce problème en changeant la référence du plugin en $body
avant que l'arrière-plan ne soit affiché:
myDialog.modal({
show: false
});
myDialog.data("bs.modal").$body = $(myNamespacingElement);
myDialog.modal("show");
La propriété $body
décide où le fond sera ajouté.
Comme une note supplémentaire pour tout le monde. Pour que les modaux fonctionnent avec un fond, vous pouvez simplement copier ces styles à partir de bootstrap3
.modal-backdrop {
position: fixed;
top: 0;
right: 0;
bottom: 0;
left: 0;
z-index: 1040;
background-color: #000;
}
.modal-backdrop.fade {
filter: alpha(opacity=0);
opacity: 0;
}
.modal-backdrop.in {
filter: alpha(opacity=50);
opacity: .5;
}
J'ai fait face au même problème et la méthode proposée par @Andrew n'a malheureusement pas aidé dans mon cas particulier. Les classes Bootstrap sont entrées en collision avec des classes d'un autre framework. Voici comment ce projet a été créé https://github.com/sneas/bootstrap-sass-namespace . N'hésitez pas à utiliser.
La solution la plus simple: commencez à utiliser des classes CSS isolées de génération personnalisée pour Bootstrap.
Par exemple, pour Bootstrap 4.1, téléchargez les fichiers du répertoire css4.1 -
https://github.com/cryptoapi/Isolate-Bootstrap-4.1-CSS-Themes
et envelopper votre HTML dans une div avec la classe bootstrapiso:
<div class="bootstrapiso">
<!-- Any HTML here will be styled with Bootstrap CSS -->
</div>
Le modèle de page avec bootstrap isolé 4 sera
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="X-UA-Compatible" content="IE=Edge">
<meta name="description" content="">
<title>Page1</title>
<!-- Isolated Bootstrap4 CSS - -->
<link rel="stylesheet" href="css4.1/bootstrapcustom.min.css" crossorigin="anonymous">
<!-- JS -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js" crossorigin="anonymous"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.1.0/js/bootstrap.min.js" crossorigin="anonymous"></script>
<script defer src="https://use.fontawesome.com/releases/v5.0.9/js/all.js" crossorigin="anonymous"></script>
</head>
<body>
<div class="bootstrapiso">
<!-- Any HTML here will be styled with Bootstrap CSS -->
</div>
</body>
</html>