J'ai des fichiers HTML avec leur propre CSS. Je souhaite les utiliser dans une application GWT, donc j'ai copié les fichiers HTML et CSS de l'application.
Le problème est que lorsque j'ouvre le HTML, il utilise le style de thème GWT. Par exemple, dans mon CSS, la couleur de fond "corps" HTML est noire, mais elle a l'air blanc à moins que je désactive le thème.
Comment pourrais-je remplacer le style de thème GWT et utiliser mes styles CSS?
Comme Sarfaz a dit - !important
devrait être votre dernier recours car il est en quelque sorte défaite tout le concept de en cascade .
Quoi qu'il en soit, dans GWT, afin de remplacer facilement les styles de base GWT contenus dans le thème que vous avez sélectionné, vous devez localiser votre fichier de module (celui qui a un nom de fichier se terminant sur * .gwt.xml), puis localisez la ligne où vous Déclarez votre thème et mettez votre style personnalisé/quelle que soit la feuille de style après cela, comme ceci:
<inherits name='com.google.gwt.user.theme.standard.Standard' />
<stylesheet src="CustomStylesheet.css" />
Notez cependant que pour GWT 2.0 CssResource
et IBINDER est recommandé.
Assurez-vous de lire la touche section appropriée de la documentation pour plus de pointeurs.
Ceci POST sur la liste de diffusion GWT décrit une solution alternative. Vous devez créer un nouveau ClientBundle
qui fait référence à votre fichier CSS:
import com.google.gwt.core.client.GWT;
import com.google.gwt.resources.client.ClientBundle;
import com.google.gwt.resources.client.CssResource;
public interface Resources extends ClientBundle {
public static final Resources INSTANCE = GWT.create(Resources.class);
@Source("style.css")
@CssResource.NotStrict
CssResource css();
}
Et puis à l'intérieur de votre méthode onModuleLoad()
vous devez injecter le fichier CSS:
public class YourApp implements EntryPoint {
public void onModuleLoad() {
//...
Resources.INSTANCE.css().ensureInjected();
//...
}
À mon avis, c'est le moyen le plus propre et le plus simple de remplacer les styles.
Vous pouvez remplacer les styles de GWT en utilisant le mot-clé !important
Dans tous vos CSS des fichiers HTML, par exemple, si l'un de votre fichier HTML contient ce CSS:
background-color:#000000;
Ensuite, vous devriez l'écrire comme ceci:
background-color:#000000 !important;
Faites la même chose pour tous vos styles dans les fichiers HTML.
Notez que l'utilisation !important
n'est pas le meilleur moyen, si vous pouvez trouver un mieux Alternatives que vous devriez aller pour eux d'abord.
La solution <stylesheet src="CustomStylesheet.css" />
est obscutable et n'a pas fonctionné avec le nouveau SuperDevmode.
Une solution qui a fonctionné pour moi (à l'aide de GWT 2.7) consistait à créer un nouveau thème personnalisé:
ProjectPackage/Thèmes/MyCustomtheme/myCustomtheme.gwt.xml
<module>
<stylesheet src="gwt/MyCustomTheme/MyCss.css"/>
</module>
ProjectPackage/Thèmes/MyCustomtheme/MyCustomthemeressources.gwt.xml
</module>
ProjectBackage/Thèmes/MyCustomtheme/Public/GWT/MYCUSTOMTOMTHEME/MYCSS.CSS (Remarque: Supprimer le GWT/MyCustomtheme/Partie du chemin travaillé dans DevMode mais N'a pas fonctionné dans la version déployée, de cause que vous pouvez toujours renommer "myCustomtheme" à quelque chose de votre goût)
Le fichier CSS que vous souhaitez utiliser
projet.gwt.xml
<!DOCTYPE module PUBLIC "-//Google Inc.//DTD Google Web Toolkit 2.0//EN"
"http://google-web-toolkit.googlecode.com/svn/releases/2.0/distro-source/core/src/gwt-module.dtd">
<module rename-to="Project">
(...)
<!-- Inherit GWT theme. e.g. the Clean theme -->
<inherits name='com.google.gwt.user.theme.clean.Clean'/>
<!-- Our custom theme -->
<inherits name='projectPackage.themes.MyCustomTheme.MyCustomTheme'/>
(...)
</module>
Remarque: vous pouvez obtenir un exemple de thème personnalisé à l'aide de http://gwt-theme-generator.appspot.com/ et extraire le fichier .jar téléchargé.
En plus de l'utilisation !important
Vous pouvez également compter sur Sélecteur CSS Spécificité .
La plupart (tous?) Des styles GWT sont indiqués en utilisant juste la classe, par exemple:
.gwt-DisclosurePanel .header {
color: black;
cursor: pointer;
text-decoration: none;
}
Pour remplacer cela, vous pouvez utiliser !important
ou Vous pouvez être plus spécifique dans vos sélecteurs, par exemple:
table.gwt-DisclosurePanel .header {
text-decoration: underline;
}
Comment ça marche ? Cela fonctionne car l'ajout du nom d'élément (tableau) à la classe du sélecteur le rend plus spécifique que la seule classe. Cela remplacera d'autres styles, même des feuilles de style répertoriées dans l'en-tête.
Donner vos identifiants de widgets et utiliser ceux-ci est encore plus spécifique.
Je sais que ce n'est pas très élégant mais je l'ai trouvé plutôt efficace pour remplacer le standard.css
Fichier dans les fichiers de sortie générés par GWT avec un fichier vide .
(Maven peut prendre soin de ce de manière fiable.)