Documentation

StyleBop is a visual CSS editor for Mac. Open a folder of stylesheets and browse them as interactive node diagrams — edit properties, colors, and variables without touching the code editor unless you want to.

Installation

Download the DMG from the StyleBop page, open it, and drag StyleBop.app into your Applications folder. Then double-click to launch. macOS 14 or later is required. Apple Silicon only.

Opening a Project

StyleBop works with folders — it reads every .css file in the folder you open, recursively, and renders the folder hierarchy in the sidebar.

The sidebar shows the folder you opened as a tree: subfolders are expandable rows, CSS files are leaves. Each file row shows the filename, a count of rulesets, and the number of CSS variables (--custom-properties) defined in the file. A dot appears when a file has unsaved changes.

Folders

Click the disclosure triangle to expand or collapse a folder. The + button at the bottom of the sidebar offers both New CSS File and New Folder; each is created inside the currently-selected file's folder, or at the project root if no file is selected.

Right-click a folder to access: New CSS File Here, New Folder Here, Rename…, Show in Finder, and Delete… (moves the folder and its contents to Trash after confirmation).

Drag and drop

Drag any file or folder onto another folder row to move it inside. Drop onto empty space in the sidebar to move it back to the project root. Folder rows highlight while a drag is hovering over them. Moves use FileManager directly, so unsaved changes, selection, and open state are preserved.

File actions

Right-click any file to access: Duplicate, Rename, Show in Finder, Revert to Saved, and Delete. These are also available in the File menu for the currently selected file.

Rulesets Canvas

The canvas shows every ruleset in the selected file as a draggable node. Descendant selectors (like .card .title) are indented based on their combinator depth, so nesting is visible at a glance.

Selecting nodes

Reordering

Drag any node to a new position. Undo (⌘Z) reverses the move.

Renaming a selector

Double-click a node's selector text to edit it inline. Press Return to confirm.

Creating rulesets

Deleting rulesets

Select one or more nodes and press Delete or Backspace. The deletion is undoable.

Media Queries

StyleBop treats @media blocks as first-class citizens on the canvas, so responsive variants stay visually grouped with the rule they modify.

The media query badge

Any ruleset wrapped in a media query shows a rounded badge on its node with the query text (e.g. max-width: 680px). The parentheses are stripped for readability but preserved on disk.

Hoisting under the base selector

A media-wrapped ruleset is hoisted directly beneath the first non-media ruleset that matches its selector (or its base token for descendants). A .card inside @media (max-width: 680px) appears indented under the unqualified .card — regardless of where it sits in the file. If there's no match, it renders at its natural position in file order with no hoisting.

Wrapping an existing ruleset

Hover a node and click the media wrap icon (next to the + icon). A sheet opens with a combo box listing every media query already used in the document — pick one, or type a new one. Bare feature expressions like max-width: 680px are auto-parenthesized; comma- and and-joined expressions are handled too.

Editing or removing the query

When a media-wrapped ruleset is selected, the Property Editor shows a media row above the CSS properties. Click it to open the same combo box and change the query. Clear the field to unwrap the ruleset entirely.

Creating a responsive variant

Use the related + button on an existing node, then pick a media query in the sheet — you get a second copy of that selector, already wrapped and grouped with the original.

Nested Selectors

StyleBop understands native CSS nesting. If your source file uses nested blocks with & or bare descendant selectors inside another rule, the parser desugars them into flat rulesets so every nested child becomes its own node on the canvas, but the original nesting is restored byte-for-byte when the file is saved.

Unknown At-Rules & Comments

Anything StyleBop doesn't interpret — @font-face, @keyframes, @supports, @layer, @container, vendor at-rules, license headers, inline /* comments */ between declarations — is preserved verbatim through the load → save round trip. You won't lose comments or at-rules by opening a file and saving it.

Property Editor

The panel on the right shows the CSS properties of the selected ruleset(s). Click any property to edit it. The name field has autocomplete for standard CSS property names; the value field has autocomplete for valid values for that property.

Editing existing properties

Deleting properties

Select one or more properties with the checkbox on the left (or click the row and use Delete) and press Delete or Backspace.

Variables Panel

Switch to the Variables tab to see all CSS custom properties (--name: value) in the file, grouped by the ruleset that defines them.

Code Editor

Switch to the Code tab for a full-text view of the CSS file with syntax highlighting and a line-number gutter. Edits here are reflected on the canvas immediately. When you switch back to the canvas, the selected ruleset and variable are preserved and the scroll position adjusts to keep them visible.

Adding Properties

Press + at the bottom of the property list, or press Return when a property is selected (if no field is in edit mode). A new row appears with the name field focused.

  1. Type the property name. Autocomplete suggests matching CSS properties.
  2. Press Tab to move to the value field.
  3. Type a value, or use Tab to cycle through available pickers (see below).
  4. Press Return to commit the new property.
  5. Press Escape to cancel without saving.
Tip: Picker cycling is only available when the value field is empty. Once you've typed a value, Tab commits the property instead of cycling pickers.

Picker Cycling (Tab)

When adding a new property with the value field empty, Tab and Shift-Tab cycle through whichever pickers are relevant for the current property name:

Tab opens the next picker in sequence (cycling back to the first after the last). Shift-Tab goes backwards. Choosing a value from any picker fills the value field and returns focus to the value input, ready for you to press Return to commit.

Color Picker

The color swatch button (colored square) opens a popover with:

Press Return while the hex field is focused to confirm the value and close the popover.

Shadow Popover

For box-shadow properties, a dedicated popover opens in place of the text field. It writes a valid box-shadow value as you change it, so you never have to memorize the syntax.

The live preview updates the property value on every change, so the canvas/code editor reflects the shadow in real time. Press Return or click outside the popover to close it.

Flex Visualizer

For flex properties, the button (appears as a grid icon) opens a visual picker showing the effect of each value in context. Click a value to apply it.

Variable Picker

The { } button opens a searchable list of all CSS custom properties defined in the current file that are compatible with the selected CSS property. Typing in the search field filters the list. Click a variable to insert it as var(--name).

File Actions

Files autosave when you switch away from them, or you can save explicitly with ⌘S. Unsaved changes are shown as a dot in the sidebar.

ActionHow to access
New CSS fileClick + at the bottom of the sidebar → New CSS File, or File → New CSS File
New folderClick + at the bottom of the sidebar → New Folder, or right-click a folder → New Folder Here
Move file / folderDrag onto a folder row (into that folder) or onto empty sidebar space (to project root)
Save⌘S
Revert to savedRight-click file → Revert to Saved…, or File → Revert…
RenameClick the selected file's name, or right-click → Rename…
DuplicateRight-click → Duplicate
Show in FinderRight-click → Show in Finder
DeleteRight-click → Delete… (moves to Trash after confirmation)

Undo & Redo

Every action in StyleBop is undoable: property edits, renames, reorders, color changes, additions, deletions, and file operations.

Each file has its own undo stack. Switching files preserves your undo history for each file independently.

Keyboard Shortcuts

Global

ShortcutAction
⌘OOpen folder
⌘SSave current file
⌘ZUndo
⌘⇧ZRedo
⌘WClose window

Canvas

ShortcutAction
⌘-click / ⇧-clickAdd / remove node from selection
Double-click selectorRename ruleset inline
Drag nodeReorder ruleset
Delete / BackspaceDelete selected ruleset(s)
Click below last nodeAdd a new ruleset
Hover node + + iconAdd a related (descendant) ruleset
Hover node + media iconWrap this ruleset in a media query

Property Editor

ShortcutAction
ReturnAdd new property (when none is being edited)
TabMove to next field; or, when adding a property with an empty value, open next picker
⇧TabMove to previous field; or, when adding a property with an empty value, open previous picker
ReturnCommit edit / confirm picker hex input
EscapeCancel edit or cancel new property
DeleteDelete selected properties

Sidebar

ShortcutAction
Click file name (already selected)Rename file inline
ReturnConfirm rename
EscapeCancel rename
Drag file or folder onto folderMove into that folder
Drag file or folder onto empty spaceMove to project root
Right-click fileDuplicate, Rename, Show in Finder, Revert, Delete
Right-click folderNew CSS File Here, New Folder Here, Rename, Show in Finder, Delete