Outils pour utilisateurs

Outils du site


issue174:inkscape

This month, we’ll continue looking at the Selectors and CSS dialog (or just “Selectors dialog” for short). Now would be a good time to review the previous couple of instalments if you need to, before we dive in deeper. As with last month, we’ll be working with this collection of shapes arranged as four groups of objects, one for each row. Starting with a blank Selectors dialog, last month I showed you how to select the first item in each row (Ctrl-Shift-Click each one), and add a new class to them all, so that they appear in the dialog. Let’s do the same thing this time: Previously, we used this capability to add some override styling for those objects. But what if we don’t do that? What if we just leave the styles alone? In that case, what we’ve created is a convenient way to re-select all those objects any time we need to: clicking on the “.Class1” entry in the right-hand pane is all that is required. This, essentially, returns the capability of the Selection Sets dialog, which was introduced with version 0.92, but removed with version 1.0.

Ce mois-ci, nous allons continuer à étudier la boîte de dialogue Sélecteurs et CSS (ou simplement « dialogue des Sélecteurs »). C'est le moment idéal pour revoir les deux derniers épisodes, si nécessaire, avant d'y plonger plus avant. Comme le mois dernier, nous allons travailler avec cette collection de formes disposées en quatre groupes d'objets, un pour chaque ligne.

Le mois dernier, je vous ai montré, à partir d'un dialogue des Sélecteurs vierge, comment sélectionner le premier élément de chaque rangée (Ctrl-Maj + un clic sur chacun d'eux) et comment leur ajouter une nouvelle classe pour qu'ils apparaissent dans la boîte de dialogue. Faisons la même chose cette fois-ci :

Précédemment, nous avons utilisé cette possibilité pour ajouter un style prioritaire à ces objets. Mais que se passe-t-il si nous ne faisons pas cela ? Et si nous laissons les styles tranquilles ? Dans ce cas, nous avons créé un moyen pratique de re-sélectionner tous ces objets à tout moment : il suffit de cliquer sur l'entrée « .Class1 » dans le volet de droite.

En gros, cela nous ramène à la capacité de la boîte de dialogue Ensembles de sélection, qui a été introduite dans la version 0.92, mais supprimée dans la version 1.0.

The Selection Sets dialog allowed you to name (and re-name) your sets, change the label for each object, and add or remove items from sets. The new Selectors dialog is slightly more limited. Double-clicking on the CSS selector won’t let you edit it – so you’re stuck with the class name you initially created. The listed items are now shown as IDs rather than labels (they include the “#” prefix that CSS uses for IDs, making this difference a little clearer). Double-clicking on an ID just selects it, it doesn’t allow you to edit the label or the ID of the object in question. The Selectors dialog updates in real-time to changes in the SVG content, however, so if you really want to change your class name, you can edit it in the Edit > XML Editor dialog. Just be aware, however, that editing the selector name in the stylesheet won’t automatically apply that change to the class attributes in the individual elements – you will need to manually change all of those to suit, as well. In most cases, therefore, it’s easier to delete the class entry from the Selectors dialog and re-create it. You can still, however, add and remove things from the “set” – though in reality what you’re actually doing is adding and removing the class from the object. We looked at removing items last time – you just need to click on the delete button to the left of each thing you want to remove. Doing this will also remove any style overrides, most likely returning you to a black fill with no stroke, but if you’re using this dialog just for managing selection sets and haven’t modified any styles, then this won’t be a concern.

Le dialogue Ensembles de sélection vous permettait de nommer (et de renommer) vos ensembles, de modifier l'étiquette de chaque objet et d'ajouter ou de supprimer des éléments des ensembles. La nouvelle boîte de dialogue des Sélecteurs est légèrement plus limitée. Si vous double-cliquez sur le sélecteur CSS, vous ne pourrez pas le modifier. Vous devrez donc conserver le nom de la classe que vous avez initialement créée. Les éléments listés sont maintenant affichés en tant qu'ID plutôt qu'en tant qu'étiquettes (ils incluent le préfixe « # » que CSS utilise pour les ID, ce qui rend cette différence un peu plus claire). Un double-clic sur un ID ne fait que le sélectionner ; il ne vous permet pas de modifier l'étiquette ou l'ID de l'objet en question.

Toutefois, la boîte de dialogue Sélecteurs se met à jour en temps réel en fonction des modifications du contenu du SVG, donc si vous voulez vraiment changer le nom de votre classe, vous pouvez le modifier dans la boîte de dialogue Édition > Éditeur XML. Sachez seulement que la modification du nom du sélecteur dans la feuille de style n'appliquera pas automatiquement ce changement aux attributs de classe dans les éléments individuels - vous devrez également les modifier manuellement. Dans la plupart des cas, il est donc plus facile de supprimer l'entrée de classe de la boîte de dialogue des Sélecteurs et de la recréer.

Cependant, vous pouvez toujours ajouter et supprimer des éléments de l'ensemble, même si, en réalité, vous ajoutez et supprimez la classe dans l'objet. Nous avons examiné la suppression d'éléments la dernière fois - il suffit de cliquer sur le bouton de suppression à gauche de chaque élément que vous souhaitez supprimer. Si vous utilisez cette boîte de dialogue uniquement pour gérer les ensembles de sélection et que vous n'avez modifié aucun style, ce n'est pas un problème.

Adding new items to the set is also pretty straightforward. You simply have to select them on the canvas, then click the “+” button next to the CSS selector. In this example, I’ve selected the items from the second column and clicked the button, and you can clearly now see that the set contains eight items. Clicking CSS selector (the “.Class1” entry on the right) will select all eight items on the canvas. Using this technique, you can create new classes (i.e. selection sets) for any combination of items you want. Let’s go through the steps to create a set that contains all the squares: • De-select everything – by using Edit > Deselect, by pressing the Escape key, or simply by clicking on the canvas background. • Click the “+” button at the bottom of the Selectors dialog. Unfortunately, you’ll be presented with the same default class name (“.Class1”) every time you do this. It doesn’t auto-increment, so you need to make sure you change it by hand to something unique. In this case, I’m going to create a class called “squares” by just typing the name into the prompt, preceded by a dot. You don’t need to supply the leading dot to indicate a class – Inkscape will add that for you – but I recommend always including it, for reasons I’ll go into later in this article. • Select all the squares, by Ctrl-Shift-Clicking each of them. • Click the “+” next to the “.squares” CSS selector line in order to add the “squares” class to each item, thus making them appear in the set.

L'ajout de nouveaux éléments à l'ensemble est également assez simple. Il suffit de les sélectionner sur le canevas, puis de cliquer sur le bouton « + » situé à côté du sélecteur CSS. Dans cet exemple, j'ai sélectionné les éléments de la deuxième colonne et cliqué sur le bouton ; vous pouvez maintenant voir clairement que l'ensemble contient huit éléments.

En cliquant sur le sélecteur CSS (l'entrée « .Class1 » à droite), les huit éléments seront sélectionnés dans le canevas.

Grâce à cette technique, vous pouvez créer de nouvelles classes (c'est-à-dire des ensembles de sélection) pour toute combinaison d'éléments que vous souhaitez. Passons en revue les étapes de la création d'un ensemble qui contient tous les carrés : ••Désélectionnez tout, en utilisant Édition > Désélectionner, en appuyant sur la touche Échap ou simplement en cliquant sur l'arrière-plan du canevas. ••Cliquez sur le bouton « + » en bas de la boîte de dialogue Sélecteurs. Malheureusement, le même nom de classe par défaut (« .Class1 ») vous sera présenté chaque fois que vous ferez cette opération. Puisqu'il ne s'incrémente pas automatiquement, vous devez vous assurer de le modifier manuellement en quelque chose d'unique. Dans ce cas, je vais créer une classe appelée « squares » en tapant simplement le nom dans l'invite, précédé d'un point. Vous n'avez pas besoin de fournir le point pour indiquer une classe, car Inkscape l'ajoutera pour vous, mais je recommande de toujours l'inclure, pour des raisons que je développerai plus loin dans cet article. ••Sélectionnez tous les carrés, en faisant Ctrl-Shift + un clic sur chacun d'entre eux. ••Cliquez sur le « + » à côté de la ligne du sélecteur CSS « .squares » afin d'ajouter la classe « squares » à chaque élément, les faisant ainsi apparaître dans le jeu.

If done correctly, the dialog should now be showing both the “.squares” class (with four items) and the “.Class1” class (with the eight items we added previously). The sections can be collapsed and expanded using the toggle triangles next to the class name, and selecting either of them will select the corresponding set of items on the page. At any time you can select more items on the page and add them to the existing class using the plus button next to the relevant CSS class selector in the second pane. Or you can create another class entirely, using the plus button at the bottom of the dialog. As mentioned, clicking on a class selector in the second pane will not only show you the relevant CSS properties on the left, but it will also select all the objects with that class on the page – a replacement for the Selection Sets dialog. You should use this capability carefully, however. I recommend treating “Selection Set” classes and “Styling” classes as two different things.

Si cela a été fait correctement, la boîte de dialogue devrait maintenant afficher à la fois la classe « .squares » (avec quatre éléments) et la classe « .Class1 » (avec les huit éléments que nous avons ajoutés précédemment). Les sections peuvent être réduites et développées à l'aide des triangles à bascule situés à côté du nom de la classe et la sélection de l'une d'entre elles permet de sélectionner l'ensemble des éléments correspondants sur la page.

À tout moment, vous pouvez sélectionner d'autres éléments de la page et les ajouter à la classe existante à l'aide du bouton plus situé à côté du sélecteur de classe CSS correspondant dans le deuxième volet. Vous pouvez également créer une toute nouvelle classe à l'aide du bouton plus situé en bas de la boîte de dialogue.

Comme nous l'avons mentionné, si vous cliquez sur un sélecteur de classe dans le deuxième volet, vous verrez les propriétés CSS correspondantes sur la gauche, mais vous sélectionnerez également tous les objets de cette classe sur la page, ce qui remplace la boîte de dialogue Ensembles de Sélection. Vous devez toutefois utiliser cette fonctionnalité avec précaution. Je vous recommande de traiter les classes « Selection Set » et les classes « Styling » comme deux choses différentes.

What do I mean by that? Last time, I demonstrated how you could use classes to change the style of the selected elements. But if you do that, it’s very easy to end up with elements that have no styling applied at all, if you subsequently remove the class name from them. So if you want to use this dialog to manage classes as though they were selection sets, it’s best not to also apply any styles as part of those classes. I recommend using one class (or set of classes) for selections, with no style changes in the left-hand pane, and different classes for styling changes, even if it means you have two classes that actually select the same objects. Here’s that method in practice: the “.squares” class is as it was before, it just selects all the squares, but doesn’t change their style. The “.yellow-fill” class contains exactly the same objects, but changes their fill color. Now if I want to also change the stars to have a yellow fill, I can add them to the latter class, without disrupting the “selection set” formed by the “.squares” class.

Qu'est-ce que je veux dire par là ? La dernière fois, j'ai montré comment vous pouviez utiliser des classes pour modifier le style des éléments sélectionnés. Mais si vous faites cela, il est très facile de se retrouver avec des éléments qui n'ont aucun style appliqué, si vous supprimez ensuite le nom de la classe. Ainsi, si vous souhaitez utiliser cette boîte de dialogue pour gérer les classes comme s'il s'agissait d'ensembles de sélection, il est préférable de ne pas appliquer de style à ces classes. Je recommande d'utiliser une classe (ou un ensemble de classes) pour les sélections, sans modification de style dans le volet de gauche, et des classes différentes pour les modifications de style, même si cela signifie que vous avez deux classes qui sélectionnent de fait les mêmes objets.

Voici cette méthode en pratique : la classe « .squares » est comme avant, elle sélectionne simplement tous les carrés, mais ne change pas leur style. La classe « .yellow-fill » contient exactement les mêmes objets, mais change leur couleur de remplissage. Maintenant, si je veux aussi changer les étoiles pour qu'elles aient un remplissage jaune, je peux les ajouter à cette dernière classe, sans perturber l'« ensemble de sélection » formé par la classe « .squares ».

Up to now, I’ve looked at creating just class-based selectors in this dialog, but you can also use it to create other types of rules in your stylesheet. So far, we’ve added the “squares” and “yellow-fill” classes to all of the squares in the image, but because these are all the same type of SVG primitive, there’s an easier way to select or style them all: the element selector. The squares are all <rect> elements in the SVG, which means they can be targeted with a selector that literally just contains the word “rect”. Just create a new entry using the “+” button at the bottom of the dialog, but enter “rect” into the prompt, with no preceding dot. In this way, I’ve changed the stroke to a thick blue line on all of the squares, while still leaving them with the yellow fill from the previous class-based rule. Inkscape did not automatically prefix the word “rect” with a dot, as it would have done when creating a class selector. This implies that the program must maintain a whitelist of element names which are allowed to pass through untouched. To avoid accidentally creating an element selector when you meant to create a class selector, therefore, I recommend always including the leading dot when entering a new class name. In this case, for example, typing “.rect” into the prompt does create a class selector as expected, whereas omitting the dot creates an element selector.

Jusqu'à présent, j'ai étudié la création de sélecteurs basés sur les classes dans ce dialogue, mais vous pouvez également l'utiliser pour créer d'autres types de règles dans votre feuille de style. Jusqu'ici, nous avons ajouté les classes « squares » et « yellow-fill » à tous les carrés de l'image, mais, comme il s'agit du même type de primitive SVG, il existe un moyen plus simple de les sélectionner ou de les styliser tous : le sélecteur d'élément. Les carrés sont tous des éléments <rect> dans le SVG, ce qui signifie qu'ils peuvent être ciblés avec un sélecteur qui contient littéralement juste le mot « rect ». Il suffit de créer une nouvelle entrée à l'aide du bouton « + » situé en bas de la boîte de dialogue, mais de saisir « rect » dans l'invite, sans point précédent. De cette façon, j'ai transformé le trait en une ligne bleue épaisse sur tous les carrés, tout en leur laissant le remplissage jaune de la règle précédente basée sur la classe.

Inkscape n'a pas automatiquement fait précéder le mot « rect » d'un point, comme il l'aurait fait en créant un sélecteur de classe. Cela implique que le programme doit maintenir une liste blanche de noms d'éléments qui sont autorisés à le traverser sans être modifiés. Pour éviter de créer accidentellement un sélecteur d'élément alors que vous vouliez créer un sélecteur de classe, je recommande donc de toujours inclure le point de tête lorsque vous saisissez un nouveau nom de classe. Dans ce cas, par exemple, la saisie de « .rect » dans l'invite crée un sélecteur de classe comme prévu, alors que l'omission du point crée un sélecteur d'élément.

One advantage of element selectors is that they are dynamic in nature. Add another rectangle to the page and it will automatically be included in your “rect” selector. But be aware that inclusion in the selector may not be enough for it to behave the way you expect. In the example above, the “rect” selector defines a thick blue stroke, yet drawing a new rectangle doesn’t produce that result. The reason for this is that the new elements you draw will have their style properties set via their “style” attribute, as usual. As we found out previously, these will override those in the stylesheet, preventing the element rules from working. The solution is to remove the override rules from the “style” attribute – which can be done by selecting the element and then deleting the rules from the “element” section of the left pane in the Selectors dialog. Nevertheless, it’s an additional few steps that may get overlooked, and can become tedious when dealing with many elements. Unless you’ve got a good reason to do otherwise, it’s probably best to stick with class-based selectors for styling – at least you can then select all your new elements and add them to the class with a single click in the dialog.

L'un des avantages des sélecteurs d'éléments est qu'ils sont dynamiques par nature. Ajoutez un autre rectangle à la page et il sera automatiquement inclus dans votre sélecteur « rect ». Mais sachez que l'inclusion dans le sélecteur peut ne pas suffire pour qu'il se comporte comme vous l'attendriez. Dans l'exemple ci-dessus, le sélecteur « rect » définit un trait bleu épais, mais le dessin d'un nouveau rectangle ne produit pas ce résultat.

La raison en est que les nouveaux éléments que vous dessinez verront leurs propriétés de style définies via leur attribut « style », comme d'habitude. Comme nous l'avons vu précédemment, ces propriétés remplacent celles de la feuille de style, ce qui empêche les règles de l'élément de fonctionner. La solution consiste à supprimer les règles de remplacement de l'attribut « style », ce qui peut être fait en sélectionnant l'élément, puis en supprimant les règles de la section « élément » du volet gauche de la boîte de dialogue Sélecteurs. Néanmoins, il s'agit de quelques étapes supplémentaires qui peuvent être négligées et qui peuvent devenir fastidieuses lorsque vous traitez de nombreux éléments. À moins que vous n'ayez une bonne raison de faire autrement, il est probablement préférable de s'en tenir aux sélecteurs basés sur les classes pour le style car, au moins, vous pouvez alors sélectionner tous vos nouveaux éléments et les ajouter à la classe d'un simple clic dans la boîte de dialogue.

Element selectors also exhibit some odd behaviour within the dialog. Each matching element has its ID shown below the selector, as you would expect, but they still have delete buttons next to them. Clicking one of those buttons does nothing: it doesn’t delete the element itself (which would be the only practical way to remove them from the selector), so they appear to be completely redundant. Worse than that, clicking the selector itself ,then the “-” button at the bottom of the dialog, does not delete the selector. Removing an accidentally created element selector, or one that is no longer needed, requires a trip to the XML editor. Element and class-based aren’t the only types of CSS selectors supported by this dialog, however. The other types also come with a few potential inconsistencies and problems, but that’s the subject of next month’s instalment…

Les sélecteurs d'éléments présentent également un comportement étrange dans la boîte de dialogue. L'ID de chaque élément correspondant est affiché sous le sélecteur, comme on peut s'y attendre, mais il y a toujours des boutons de suppression à côté. Le fait de cliquer sur l'un de ces boutons n'a aucun effet : il ne supprime pas l'élément lui-même (ce qui serait la seule façon pratique de le retirer du sélecteur), de sorte qu'ils semblent être complètement redondants. Pire encore, le fait de cliquer sur le sélecteur lui-même, puis sur le bouton « - » en bas de la boîte de dialogue, ne supprime pas le sélecteur. La suppression d'un sélecteur d'élément créé accidentellement, ou d'un sélecteur qui n'est plus nécessaire, nécessite un passage par l'éditeur XML.

Les sélecteurs d'éléments et de classes ne sont pas les seuls types de sélecteurs CSS pris en charge par cette boîte de dialogue. Les autres types s'accompagnent également de quelques incohérences et problèmes potentiels, mais c'est le sujet de l'article du mois prochain…

issue174/inkscape.txt · Dernière modification : 2021/11/04 09:23 de auntiee