or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

Files

docs

animation-interaction.mdborders-effects.mdcolors.mdflexbox.mdform-layout.mdgrid-system.mdimage.mdindex.mdlayout.mdlist-style.mdmisc.mdoverflow.mdspacing.mdtypography.mduser-select.mdzindex.md

spacing.mddocs/

0

# Spacing Utilities

1

2

PrimeFlex provides comprehensive spacing utilities for padding and margin using a consistent scale. The spacing system supports directional control, auto margins, negative margins, and responsive variants.

3

4

## Spacing Scale

5

6

The spacing scale is based on a `1rem` base unit with the following values:

7

8

- `0`: 0

9

- `1`: 0.25rem (4px)

10

- `2`: 0.5rem (8px)

11

- `3`: 1rem (16px)

12

- `4`: 1.5rem (24px)

13

- `5`: 2rem (32px)

14

- `6`: 3rem (48px)

15

- `7`: 4rem (64px)

16

- `8`: 5rem (80px)

17

18

## Padding Utilities

19

20

```scss { .api }

21

// All sides padding

22

.p-0 { padding: 0; }

23

.p-1 { padding: 0.25rem; }

24

.p-2 { padding: 0.5rem; }

25

.p-3 { padding: 1rem; }

26

.p-4 { padding: 1.5rem; }

27

.p-5 { padding: 2rem; }

28

.p-6 { padding: 3rem; }

29

.p-7 { padding: 4rem; }

30

.p-8 { padding: 5rem; }

31

32

// Top padding

33

.pt-0 { padding-top: 0; }

34

.pt-1 { padding-top: 0.25rem; }

35

.pt-2 { padding-top: 0.5rem; }

36

.pt-3 { padding-top: 1rem; }

37

.pt-4 { padding-top: 1.5rem; }

38

.pt-5 { padding-top: 2rem; }

39

.pt-6 { padding-top: 3rem; }

40

.pt-7 { padding-top: 4rem; }

41

.pt-8 { padding-top: 5rem; }

42

43

// Right padding

44

.pr-0 { padding-right: 0; }

45

.pr-1 { padding-right: 0.25rem; }

46

.pr-2 { padding-right: 0.5rem; }

47

.pr-3 { padding-right: 1rem; }

48

.pr-4 { padding-right: 1.5rem; }

49

.pr-5 { padding-right: 2rem; }

50

.pr-6 { padding-right: 3rem; }

51

.pr-7 { padding-right: 4rem; }

52

.pr-8 { padding-right: 5rem; }

53

54

// Bottom padding

55

.pb-0 { padding-bottom: 0; }

56

.pb-1 { padding-bottom: 0.25rem; }

57

.pb-2 { padding-bottom: 0.5rem; }

58

.pb-3 { padding-bottom: 1rem; }

59

.pb-4 { padding-bottom: 1.5rem; }

60

.pb-5 { padding-bottom: 2rem; }

61

.pb-6 { padding-bottom: 3rem; }

62

.pb-7 { padding-bottom: 4rem; }

63

.pb-8 { padding-bottom: 5rem; }

64

65

// Left padding

66

.pl-0 { padding-left: 0; }

67

.pl-1 { padding-left: 0.25rem; }

68

.pl-2 { padding-left: 0.5rem; }

69

.pl-3 { padding-left: 1rem; }

70

.pl-4 { padding-left: 1.5rem; }

71

.pl-5 { padding-left: 2rem; }

72

.pl-6 { padding-left: 3rem; }

73

.pl-7 { padding-left: 4rem; }

74

.pl-8 { padding-left: 5rem; }

75

76

// Horizontal padding (left + right)

77

.px-0 { padding-left: 0; padding-right: 0; }

78

.px-1 { padding-left: 0.25rem; padding-right: 0.25rem; }

79

.px-2 { padding-left: 0.5rem; padding-right: 0.5rem; }

80

.px-3 { padding-left: 1rem; padding-right: 1rem; }

81

.px-4 { padding-left: 1.5rem; padding-right: 1.5rem; }

82

.px-5 { padding-left: 2rem; padding-right: 2rem; }

83

.px-6 { padding-left: 3rem; padding-right: 3rem; }

84

.px-7 { padding-left: 4rem; padding-right: 4rem; }

85

.px-8 { padding-left: 5rem; padding-right: 5rem; }

86

87

// Vertical padding (top + bottom)

88

.py-0 { padding-top: 0; padding-bottom: 0; }

89

.py-1 { padding-top: 0.25rem; padding-bottom: 0.25rem; }

90

.py-2 { padding-top: 0.5rem; padding-bottom: 0.5rem; }

91

.py-3 { padding-top: 1rem; padding-bottom: 1rem; }

92

.py-4 { padding-top: 1.5rem; padding-bottom: 1.5rem; }

93

.py-5 { padding-top: 2rem; padding-bottom: 2rem; }

94

.py-6 { padding-top: 3rem; padding-bottom: 3rem; }

95

.py-7 { padding-top: 4rem; padding-bottom: 4rem; }

96

.py-8 { padding-top: 5rem; padding-bottom: 5rem; }

97

```

98

99

## Margin Utilities

100

101

```scss { .api }

102

// All sides margin

103

.m-0 { margin: 0; }

104

.m-1 { margin: 0.25rem; }

105

.m-2 { margin: 0.5rem; }

106

.m-3 { margin: 1rem; }

107

.m-4 { margin: 1.5rem; }

108

.m-5 { margin: 2rem; }

109

.m-6 { margin: 3rem; }

110

.m-7 { margin: 4rem; }

111

.m-8 { margin: 5rem; }

112

113

// Top margin

114

.mt-0 { margin-top: 0; }

115

.mt-1 { margin-top: 0.25rem; }

116

.mt-2 { margin-top: 0.5rem; }

117

.mt-3 { margin-top: 1rem; }

118

.mt-4 { margin-top: 1.5rem; }

119

.mt-5 { margin-top: 2rem; }

120

.mt-6 { margin-top: 3rem; }

121

.mt-7 { margin-top: 4rem; }

122

.mt-8 { margin-top: 5rem; }

123

124

// Right margin

125

.mr-0 { margin-right: 0; }

126

.mr-1 { margin-right: 0.25rem; }

127

.mr-2 { margin-right: 0.5rem; }

128

.mr-3 { margin-right: 1rem; }

129

.mr-4 { margin-right: 1.5rem; }

130

.mr-5 { margin-right: 2rem; }

131

.mr-6 { margin-right: 3rem; }

132

.mr-7 { margin-right: 4rem; }

133

.mr-8 { margin-right: 5rem; }

134

135

// Bottom margin

136

.mb-0 { margin-bottom: 0; }

137

.mb-1 { margin-bottom: 0.25rem; }

138

.mb-2 { margin-bottom: 0.5rem; }

139

.mb-3 { margin-bottom: 1rem; }

140

.mb-4 { margin-bottom: 1.5rem; }

141

.mb-5 { margin-bottom: 2rem; }

142

.mb-6 { margin-bottom: 3rem; }

143

.mb-7 { margin-bottom: 4rem; }

144

.mb-8 { margin-bottom: 5rem; }

145

146

// Left margin

147

.ml-0 { margin-left: 0; }

148

.ml-1 { margin-left: 0.25rem; }

149

.ml-2 { margin-left: 0.5rem; }

150

.ml-3 { margin-left: 1rem; }

151

.ml-4 { margin-left: 1.5rem; }

152

.ml-5 { margin-left: 2rem; }

153

.ml-6 { margin-left: 3rem; }

154

.ml-7 { margin-left: 4rem; }

155

.ml-8 { margin-left: 5rem; }

156

157

// Horizontal margin (left + right)

158

.mx-0 { margin-left: 0; margin-right: 0; }

159

.mx-1 { margin-left: 0.25rem; margin-right: 0.25rem; }

160

.mx-2 { margin-left: 0.5rem; margin-right: 0.5rem; }

161

.mx-3 { margin-left: 1rem; margin-right: 1rem; }

162

.mx-4 { margin-left: 1.5rem; margin-right: 1.5rem; }

163

.mx-5 { margin-left: 2rem; margin-right: 2rem; }

164

.mx-6 { margin-left: 3rem; margin-right: 3rem; }

165

.mx-7 { margin-left: 4rem; margin-right: 4rem; }

166

.mx-8 { margin-left: 5rem; margin-right: 5rem; }

167

168

// Vertical margin (top + bottom)

169

.my-0 { margin-top: 0; margin-bottom: 0; }

170

.my-1 { margin-top: 0.25rem; margin-bottom: 0.25rem; }

171

.my-2 { margin-top: 0.5rem; margin-bottom: 0.5rem; }

172

.my-3 { margin-top: 1rem; margin-bottom: 1rem; }

173

.my-4 { margin-top: 1.5rem; margin-bottom: 1.5rem; }

174

.my-5 { margin-top: 2rem; margin-bottom: 2rem; }

175

.my-6 { margin-top: 3rem; margin-bottom: 3rem; }

176

.my-7 { margin-top: 4rem; margin-bottom: 4rem; }

177

.my-8 { margin-top: 5rem; margin-bottom: 5rem; }

178

```

179

180

## Auto Margins

181

182

```scss { .api }

183

.m-auto { margin: auto; }

184

.mt-auto { margin-top: auto; }

185

.mr-auto { margin-right: auto; }

186

.mb-auto { margin-bottom: auto; }

187

.ml-auto { margin-left: auto; }

188

.mx-auto { margin-left: auto; margin-right: auto; }

189

.my-auto { margin-top: auto; margin-bottom: auto; }

190

```

191

192

## Negative Margins

193

194

```scss { .api }

195

// Negative all sides margin

196

.-m-1 { margin: -0.25rem; }

197

.-m-2 { margin: -0.5rem; }

198

.-m-3 { margin: -1rem; }

199

.-m-4 { margin: -1.5rem; }

200

.-m-5 { margin: -2rem; }

201

.-m-6 { margin: -3rem; }

202

.-m-7 { margin: -4rem; }

203

.-m-8 { margin: -5rem; }

204

205

// Negative top margin

206

.-mt-1 { margin-top: -0.25rem; }

207

.-mt-2 { margin-top: -0.5rem; }

208

.-mt-3 { margin-top: -1rem; }

209

.-mt-4 { margin-top: -1.5rem; }

210

.-mt-5 { margin-top: -2rem; }

211

.-mt-6 { margin-top: -3rem; }

212

.-mt-7 { margin-top: -4rem; }

213

.-mt-8 { margin-top: -5rem; }

214

215

// Negative right margin

216

.-mr-1 { margin-right: -0.25rem; }

217

.-mr-2 { margin-right: -0.5rem; }

218

.-mr-3 { margin-right: -1rem; }

219

.-mr-4 { margin-right: -1.5rem; }

220

.-mr-5 { margin-right: -2rem; }

221

.-mr-6 { margin-right: -3rem; }

222

.-mr-7 { margin-right: -4rem; }

223

.-mr-8 { margin-right: -5rem; }

224

225

// Negative bottom margin

226

.-mb-1 { margin-bottom: -0.25rem; }

227

.-mb-2 { margin-bottom: -0.5rem; }

228

.-mb-3 { margin-bottom: -1rem; }

229

.-mb-4 { margin-bottom: -1.5rem; }

230

.-mb-5 { margin-bottom: -2rem; }

231

.-mb-6 { margin-bottom: -3rem; }

232

.-mb-7 { margin-bottom: -4rem; }

233

.-mb-8 { margin-bottom: -5rem; }

234

235

// Negative left margin

236

.-ml-1 { margin-left: -0.25rem; }

237

.-ml-2 { margin-left: -0.5rem; }

238

.-ml-3 { margin-left: -1rem; }

239

.-ml-4 { margin-left: -1.5rem; }

240

.-ml-5 { margin-left: -2rem; }

241

.-ml-6 { margin-left: -3rem; }

242

.-ml-7 { margin-left: -4rem; }

243

.-ml-8 { margin-left: -5rem; }

244

245

// Negative horizontal margin

246

.-mx-1 { margin-left: -0.25rem; margin-right: -0.25rem; }

247

.-mx-2 { margin-left: -0.5rem; margin-right: -0.5rem; }

248

.-mx-3 { margin-left: -1rem; margin-right: -1rem; }

249

.-mx-4 { margin-left: -1.5rem; margin-right: -1.5rem; }

250

.-mx-5 { margin-left: -2rem; margin-right: -2rem; }

251

.-mx-6 { margin-left: -3rem; margin-right: -3rem; }

252

.-mx-7 { margin-left: -4rem; margin-right: -4rem; }

253

.-mx-8 { margin-left: -5rem; margin-right: -5rem; }

254

255

// Negative vertical margin

256

.-my-1 { margin-top: -0.25rem; margin-bottom: -0.25rem; }

257

.-my-2 { margin-top: -0.5rem; margin-bottom: -0.5rem; }

258

.-my-3 { margin-top: -1rem; margin-bottom: -1rem; }

259

.-my-4 { margin-top: -1.5rem; margin-bottom: -1.5rem; }

260

.-my-5 { margin-top: -2rem; margin-bottom: -2rem; }

261

.-my-6 { margin-top: -3rem; margin-bottom: -3rem; }

262

.-my-7 { margin-top: -4rem; margin-bottom: -4rem; }

263

.-my-8 { margin-top: -5rem; margin-bottom: -5rem; }

264

```

265

266

## Responsive Variants

267

268

All spacing utilities support responsive breakpoints:

269

270

```scss { .api }

271

// Small screens (≥576px)

272

.sm\\:p-3 { /* padding: 1rem at sm+ */ }

273

.sm\\:m-4 { /* margin: 1.5rem at sm+ */ }

274

.sm\\:mx-auto { /* margin-left: auto; margin-right: auto at sm+ */ }

275

// ... all spacing classes with sm: prefix

276

277

// Medium screens (≥768px)

278

.md\\:p-6 { /* padding: 3rem at md+ */ }

279

.md\\:mb-0 { /* margin-bottom: 0 at md+ */ }

280

// ... all spacing classes with md: prefix

281

282

// Large screens (≥992px)

283

.lg\\:px-8 { /* padding-left: 5rem; padding-right: 5rem at lg+ */ }

284

.lg\\:my-6 { /* margin-top: 3rem; margin-bottom: 3rem at lg+ */ }

285

// ... all spacing classes with lg: prefix

286

287

// Extra large screens (≥1200px)

288

.xl\\:p-8 { /* padding: 5rem at xl+ */ }

289

.xl\\:-mt-4 { /* margin-top: -1.5rem at xl+ */ }

290

// ... all spacing classes with xl: prefix

291

```

292

293

## Usage Examples

294

295

### Card with Consistent Spacing

296

297

```html

298

<div class="p-4 surface-card border-round shadow-2">

299

<h3 class="m-0 mb-3 text-primary">Card Title</h3>

300

<p class="m-0 mb-4 text-color-secondary line-height-3">

301

Card content with consistent spacing between elements.

302

</p>

303

<div class="flex gap-2">

304

<button class="px-3 py-2 bg-primary text-white border-none border-round">

305

Primary

306

</button>

307

<button class="px-3 py-2 border-1 border-primary text-primary bg-transparent border-round">

308

Secondary

309

</button>

310

</div>

311

</div>

312

```

313

314

### Form Layout

315

316

```html

317

<form class="p-4 surface-section border-round">

318

<div class="mb-4">

319

<label class="block mb-2 font-semibold">Name</label>

320

<input type="text" class="w-full p-3 border-1 border-surface-300 border-round">

321

</div>

322

<div class="mb-4">

323

<label class="block mb-2 font-semibold">Email</label>

324

<input type="email" class="w-full p-3 border-1 border-surface-300 border-round">

325

</div>

326

<div class="mb-6">

327

<label class="block mb-2 font-semibold">Message</label>

328

<textarea rows="4" class="w-full p-3 border-1 border-surface-300 border-round"></textarea>

329

</div>

330

<button type="submit" class="px-4 py-3 bg-primary text-white border-none border-round">

331

Submit

332

</button>

333

</form>

334

```

335

336

### Navigation with Auto Margins

337

338

```html

339

<nav class="flex align-items-center p-3 bg-primary">

340

<div class="flex align-items-center gap-2">

341

<img src="logo.png" alt="Logo" class="w-2rem h-2rem">

342

<span class="text-white font-bold">Brand</span>

343

</div>

344

<!-- Auto margin pushes content to the right -->

345

<div class="ml-auto flex gap-3">

346

<a href="#" class="text-white no-underline px-2 py-1">Home</a>

347

<a href="#" class="text-white no-underline px-2 py-1">About</a>

348

<a href="#" class="text-white no-underline px-2 py-1">Contact</a>

349

</div>

350

</nav>

351

```

352

353

### Responsive Spacing

354

355

```html

356

<div class="p-3 md:p-6 lg:p-8 surface-card border-round">

357

<h2 class="m-0 mb-2 md:mb-4 text-2xl md:text-3xl font-bold">

358

Responsive Title

359

</h2>

360

<p class="m-0 mb-4 md:mb-6 text-color-secondary">

361

Content with responsive spacing that adapts to screen size.

362

</p>

363

<div class="flex flex-column md:flex-row gap-3 md:gap-4">

364

<button class="px-4 py-2 md:px-6 md:py-3 bg-primary text-white border-none border-round">

365

Button 1

366

</button>

367

<button class="px-4 py-2 md:px-6 md:py-3 border-1 border-primary text-primary bg-transparent border-round">

368

Button 2

369

</button>

370

</div>

371

</div>

372

```

373

374

### Negative Margin Overlap

375

376

```html

377

<div class="relative">

378

<div class="h-8rem bg-primary"></div>

379

<div class="p-4 -mt-4 mx-3 bg-white border-round shadow-2">

380

<h3 class="m-0 mb-2">Overlapping Card</h3>

381

<p class="m-0">This card overlaps the element above using negative margin.</p>

382

</div>

383

</div>

384

```

385

386

### Centered Content

387

388

```html

389

<div class="text-center py-8">

390

<div class="inline-block mx-auto max-w-30rem">

391

<h1 class="m-0 mb-4 text-4xl font-bold">Welcome</h1>

392

<p class="m-0 mb-6 text-lg text-color-secondary">

393

Centered content block with auto margins and consistent vertical spacing.

394

</p>

395

<button class="px-6 py-3 bg-primary text-white border-none border-round">

396

Get Started

397

</button>

398

</div>

399

</div>

400

```