La plupart des concepts CSS se traduisent en concepts de style Roblox. Les exemples suivants montrent comment le CSS et HTML s'alignent sur les classes/propriétés Luau et Roblox.
Pour tester chacun des exemples de script Luau suivants :
Dans le explorateur, créez ce qui suit :
- Instance vide StyleRule comme enfant de CoreSheet .
- ScreenGui conteneur dans StarterGui .
- LocalScript instance à l'intérieur du ScreenGui.
Dans le LocalScript, collez le code de soutien suivant :
Lecteur localScriptlocal CollectionService = game:GetService("CollectionService")local ReplicatedStorage = game:GetService("ReplicatedStorage")local coreSheet = ReplicatedStorage:FindFirstChild("CoreSheet")local rule = coreSheet:FindFirstChildWhichIsA("StyleRule")local screenGui = script.ParentPour chaque exemple ci-dessous, collez les lignes de code Luau suivant les lignes de soutien 1–6.
Sélecteurs
La propriété Selector d'un StyleRule spécifie les instances auxquelles la règle doit s'appliquer.Les types de sélecteur suivants traduisent du CSS vers Luau et peuvent être utilisés avec des combinateurs.
Élément
Équivalent aux sélecteurs d'éléments CSS sont les sélecteurs de classe Roblox qui sélectionnent toutes les instances d'une classe donnée, par exemple , , , , etc.
CSS
button {background-color: #335FFF;color: #E1E1E1;width: 15%;height: 40px;border: none;}
HTML
<button>Main Menu</button>
Luau
-- Sélecteur de classerule.Selector = "TextButton"-- Définir les propriétés de règlesrule:SetProperties({["BackgroundColor3"] = Color3.fromHex("335FFF"),["TextColor3"] = Color3.fromHex("E1E1E1"),["Size"] = UDim2.new(0.15, 0, 0, 40),["BorderSizePixel"] = 0})local button = Instance.new("TextButton")button.Text = "Main Menu"button.Parent = screenGui
Classe
Les équivalents Roblox de CSS class sélecteurs sont des sélecteurs de balises qui utilisent des balises appliquées via CollectionService.
CSS
.button-primary {background-color: #335FFF;color: #E1E1E1;}
HTML
<button class="button-primary">Main Menu</button>
Luau
-- Sélecteur de baliserule.Selector = ".ButtonPrimary"-- Définir les propriétés de règlesrule:SetProperties({["BackgroundColor3"] = Color3.fromHex("335FFF"),["TextColor3"] = Color3.fromHex("E1E1E1"),["AutomaticSize"] = Enum.AutomaticSize.XY})local button = Instance.new("TextButton")button.Text = "Main Menu"button.Parent = screenGui-- Appliquer le tag au boutonCollectionService:AddTag(button, "ButtonPrimary")
Identifiant
La comparaison Roblox la plus proche à CSS id est le sélecteur #[name] qui sélectionne selon la valeur de Instance.Name .Contrairement à la spécification W3C de l'attribut id, les noms ne sont pas attendus pour être uniques.
CSS
#modal-frame {background-color: #000022;opacity: 0.5;width: 50%;min-height: 100px;}
HTML
<div id="modal-frame"></div>
Luau
-- Sélecteur de nom d'instancerule.Selector = "#ModalFrame"-- Définir les propriétés de règlesrule:SetProperties({["BackgroundColor3"] = Color3.fromHex("000022"),["BackgroundTransparency"] = 0.5,["Size"] = UDim2.new(0.5, 0, 0, 100),["AutomaticSize"] = Enum.AutomaticSize.Y})local frame = Instance.new("Frame")frame.Parent = screenGui-- Renommer le cadre pour correspondre au sélecteurframe.Name = "ModalFrame"
Combinateurs
Les combinateurs vous permettent de mélanger des sélecteurs de base pour correspondre à des relations de hiérarchie plus profondes.
Enfant
Le sélecteur d'enfant de > est identique entre CSS et Roblox.
CSS
.menu-container {width: 25%;}.menu-container > button {background-color: #335FFF;color: #E1E1E1;width: 80%;height: 40px;border: none;}
HTML
<div class="menu-container"><button>Options</button></div>
Luau
-- Sélecteur d'enfantrule.Selector = ".MenuContainer > TextButton"-- Définir les propriétés de règle pour l'enfantrule:SetProperties({["BackgroundColor3"] = Color3.fromHex("335FFF"),["TextColor3"] = Color3.fromHex("E1E1E1"),["Size"] = UDim2.new(0.8, 0, 0, 40),["BorderSizePixel"] = 0})-- Créer conteneur de menulocal menuContainer = Instance.new("Frame")menuContainer.Size = UDim2.new(0.25, 0, 0, 0)menuContainer.AutomaticSize = Enum.AutomaticSize.YmenuContainer.Parent = screenGui-- Appliquer la baliseCollectionService:AddTag(menuContainer, "MenuContainer")-- Créer boutonlocal button = Instance.new("TextButton")button.Text = "Options"-- Définir le conteneur de menu comme parent du boutonbutton.Parent = menuContainer
Descendant
Contrairement à la syntaxe d'espace blanc CSS, par exemple ici, Roblox utilise le combinateur pour indiquer une relation descendante.
CSS
.menu-container {width: 25%;}.sub-container {width: 75%;}.menu-container button {background-color: #335FFF;color: #E1E1E1;width: 80%;height: 40px;border: none;}
HTML
<div class="menu-container"><div class="sub-container"><button>Options</button></div></div>
Luau
-- Sélecteur descendantrule.Selector = ".MenuContainer >> TextButton"-- Définir les propriétés de règle pour le descendantrule:SetProperties({["BackgroundColor3"] = Color3.fromHex("335FFF"),["TextColor3"] = Color3.fromHex("E1E1E1"),["Size"] = UDim2.new(0.8, 0, 0, 40),["BorderSizePixel"] = 0})-- Créer conteneur de menulocal menuContainer = Instance.new("Frame")menuContainer.Size = UDim2.new(0.25, 0, 0, 0)menuContainer.AutomaticSize = Enum.AutomaticSize.YmenuContainer.Parent = screenGui-- Appliquer la baliseCollectionService:AddTag(menuContainer, "MenuContainer")-- Créer un sous-conteneurlocal subContainer = Instance.new("Frame")subContainer.Size = UDim2.new(0.75, 0, 0, 0)subContainer.AutomaticSize = Enum.AutomaticSize.Y-- Définir le conteneur de menu comme parent du sous-conteneursubContainer.Parent = menuContainer-- Créer boutonlocal button = Instance.new("TextButton")button.Text = "Options"-- Définir le sous-conteneur comme parent du boutonbutton.Parent = subContainer
Liste sélectrice
Plusieurs sélecteurs (y compris les sélecteurs avec des combinateurs) peuvent être déclarés avec le même bloc de propriété, séparés par des virgules, pour réduire la redondance.
CSS
img, p {background-color: #FF0033;}
HTML
<img src="gear.png" width="100" height="100"><p>Main Menu</p>
Luau
-- Sélecteur pour les étiquettes d'image ET les étiquettes de texterule.Selector = "ImageLabel, TextLabel"-- Définir une propriété commune pour les classesrule:SetProperty("BackgroundColor3", Color3.fromHex("ff0033"))-- Créer une étiquette d'imagelocal imageLabel = Instance.new("ImageLabel")imageLabel.Image = "rbxassetid://104919049969988"imageLabel.Size = UDim2.new(0, 100, 0, 100)imageLabel.Parent = screenGui-- Créer une étiquette de textelocal textLabel = Instance.new("TextLabel")textLabel.Size = UDim2.new(1, 0, 0, 0)textLabel.AutomaticSize = Enum.AutomaticSize.YtextLabel.TextXAlignment = Enum.TextXAlignment.LefttextLabel.TextYAlignment = Enum.TextYAlignment.ToptextLabel.Text = "Main Menu"textLabel.Parent = screenGui
Classements pseudo
Les équivalents Roblox de CSS pseudo-classes sélecteurs sont sélecteurs d'état qui correspondent à l'une des quatre valeurs Enum.GuiState telles que Hover ou Press.
CSS
img:hover {opacity: 0.5;}
HTML
<img src="gear.png" width="100" height="100">
Luau
-- Sélecteur d'étatrule.Selector = "ImageLabel:Hover"-- Définir la propriété de règlerule:SetProperty("ImageTransparency", 0.5)-- Créer une étiquette d'imagelocal label = Instance.new("ImageLabel")label.Image = "rbxassetid://104919049969988"label.Size = UDim2.new(0, 100, 0, 100)label.BackgroundTransparency = 1label.Parent = screenGui
Pseudo-instances
Semblable à la façon dont les pseudo-éléments CSS peuvent modifier des parties spécifiques d'un élément, Roblox peut créer un fantôme à travers la propriété d'une règle de style .Par exemple, la règle suivante crée efficacement un modifieur UICorner sous chaque étiquette Frame avec RoundedCorner20 et définit les pixels de chaque modifieur CornerRadius à 20.
Luau
-- Sélecteur de composants d'interface utilisateurrule.Selector = "Frame.RoundedCorner20::UICorner"-- Définir la propriété de règlerule:SetProperty("CornerRadius", UDim.new(0, 20))-- Créer cadrelocal frame = Instance.new("Frame")frame.Size = UDim2.new(0.4, 0, 0.2, 0)frame.Parent = screenGui-- Appliquer la balise à la框架CollectionService:AddTag(frame, "RoundedCorner20")
Variables
CSS vous permet de déclarer et de référencer variables à travers un système de style.Roblox y parvient grâce aux jetons et au système d'attributs d'instance .En utilisant $ comme préfixe, vous pouvez référencer les attributs déclarés dans une chaîne d'héritage StyleRule ou StyleSheet lorsque vous définissez des propriétés de style.
CSS
:root {--button-bg-color: #335FFF;--button-text-color: #E1E1E1;}button {background-color: var(--button-bg-color);color: var(--button-text-color);}
HTML
<button>Main Menu</button>
Luau
-- Définir des jetons de feuille de style en utilisant des attributscoreSheet:SetAttribute("ButtonBgColor", Color3.fromHex("335FFF"))coreSheet:SetAttribute("ButtonTextColor", Color3.fromHex("E1E1E1"))-- Sélecteur de classerule.Selector = "TextButton"-- Définir les propriétés de règlesrule:SetProperties({["BackgroundColor3"] = "$ButtonBgColor",["TextColor3"] = "$ButtonTextColor"})-- Créer boutonlocal button = Instance.new("TextButton")button.AutomaticSize = Enum.AutomaticSize.XYbutton.Text = "Main Menu"button.Parent = screenGui
Nidification et fusion
En empruntant un concept de SCSS, StyleRules peut être imbriqué ensemble et leurs sélecteurs se combineront fusionner .
SCSS
#menu-frame {background-color: #000022;width: 25%;min-height: 200px;display: flex;flex-direction: column;justify-content: space-evenly;align-items: center;> button {background-color: #335FFF;color: #E1E1E1;width: 80%;height: 40px;border: none;&:hover {opacity: 0.5;}}}
HTML
<div id="menu-frame"><button>Charms</button><button>Mana</button><button>Scrolls</button></div>
Luau
-- Règle de menu cadrelocal menuFrameRule = Instance.new("StyleRule")menuFrameRule.Parent = coreSheetmenuFrameRule.Selector = "#MenuFrame"menuFrameRule:SetProperties({["BackgroundColor3"] = Color3.fromHex("000022"),["Size"] = UDim2.new(0.25, 0, 0, 200),["AutomaticSize"] = Enum.AutomaticSize.Y})-- Règle de mise en page du menulocal menuLayoutRule = Instance.new("StyleRule")menuLayoutRule.Parent = menuFrameRule -- Définir la règle de menu comme règle parentmenuLayoutRule.Selector = "::UIListLayout"menuLayoutRule:SetProperties({["FillDirection"] = Enum.FillDirection.Vertical,["VerticalFlex"] = Enum.UIFlexAlignment.SpaceEvenly,["HorizontalAlignment"] = Enum.HorizontalAlignment.Center})-- Règle de boutonlocal buttonRule = Instance.new("StyleRule")buttonRule.Parent = menuFrameRule -- Définir la règle de menu comme règle parentbuttonRule.Selector = "> TextButton"buttonRule:SetProperties({["BackgroundColor3"] = Color3.fromHex("335FFF"),["TextColor3"] = Color3.fromHex("E1E1E1"),["Size"] = UDim2.new(0.8, 0, 0, 40),["BorderSizePixel"] = 0})-- Règle de survie des boutonslocal buttonHoverRule = Instance.new("StyleRule")buttonHoverRule.Parent = buttonRule -- Définir la règle de bouton comme parentbuttonHoverRule.Selector = ":hover"buttonHoverRule:SetProperty("BackgroundTransparency", 0.5)-- Créer cadre parentlocal menuFrame = Instance.new("Frame")menuFrame.Parent = screenGuimenuFrame.Name = "MenuFrame"-- Créer des boutons à l'intérieur du cadrelocal button1 = Instance.new("TextButton")button1.Text = "Charms"button1.Parent = menuFramelocal button2 = Instance.new("TextButton")button2.Text = "Mana"button2.Parent = menuFramelocal button3 = Instance.new("TextButton")button3.Text = "Scrolls"button3.Parent = menuFrame