├── LICENSE ├── README.md ├── img ├── brand.png ├── defaults.svg ├── html.svg ├── icon-copy.png ├── icon-quote.svg ├── idea.svg ├── license.svg ├── logo.png ├── mobile.svg ├── stock.jpeg └── stock.jpg ├── index.html ├── mvp.css ├── mvp.html └── package.json /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2025 Andy Brewer 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # MVP.css — Minimalist stylesheet for HTML elements 2 | 3 | ![MVP.css](img/brand.png) 4 | 5 | Out of the box CSS styling for HTML elements. No class names, no framework to learn. 6 | 7 | Documentation: 8 | 9 | Usage: `` 10 | 11 | Download: 12 | 13 | NPM: 14 | -------------------------------------------------------------------------------- /img/brand.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybrewer/mvp/0e42e0ebf95478c02c9941ca168e6fd908cf0142/img/brand.png -------------------------------------------------------------------------------- /img/defaults.svg: -------------------------------------------------------------------------------- 1 | Designer 3 -------------------------------------------------------------------------------- /img/html.svg: -------------------------------------------------------------------------------- 1 | Code html -------------------------------------------------------------------------------- /img/icon-copy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybrewer/mvp/0e42e0ebf95478c02c9941ca168e6fd908cf0142/img/icon-copy.png -------------------------------------------------------------------------------- /img/icon-quote.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /img/idea.svg: -------------------------------------------------------------------------------- 1 | Looking for idea with team -------------------------------------------------------------------------------- /img/license.svg: -------------------------------------------------------------------------------- 1 | code 1 -------------------------------------------------------------------------------- /img/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybrewer/mvp/0e42e0ebf95478c02c9941ca168e6fd908cf0142/img/logo.png -------------------------------------------------------------------------------- /img/mobile.svg: -------------------------------------------------------------------------------- 1 | 29. Mobile -------------------------------------------------------------------------------- /img/stock.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybrewer/mvp/0e42e0ebf95478c02c9941ca168e6fd908cf0142/img/stock.jpeg -------------------------------------------------------------------------------- /img/stock.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybrewer/mvp/0e42e0ebf95478c02c9941ca168e6fd908cf0142/img/stock.jpg -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | MVP.css - Minimalist stylesheet for HTML elements 12 | 13 | 14 | 15 |
16 | 25 |

MVP.css — A minimalist stylesheet for HTML elements

26 |

No class names, no frameworks, just semantic HTML and you're done.

27 |
28 |

29 | Download HTML ↗Download MVP.css (10kb) ↗ 31 |

32 |

33 |

34 | PRO TIP Add this code to a new HTML file:

<link rel="stylesheet" href="https://unpkg.com/mvp.css"> 37 |

38 |
39 |
40 |
41 |
42 |
43 |

Simple, reusable components

44 |

For a clean looking design that doesn't get in the way

45 |
46 | 54 | 60 | 66 |
67 |
68 |
69 |
70 | Quote
71 | "By far the easiest stylesheet I've ever used. It integrates easily into one all of my startup projects." 72 |
MVP.css

- Andy Brewer, Author of MVP.css
73 |
74 |
75 |
76 |
77 |
78 |

Flexibility without complexity

79 |

A few, clean styling options without all the bells and whistles

80 |
81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 |
MVP.cssNo CSSCustom CSS
Mobile friendly
Works out of the box
Easy to customize
Only semantic HTML
No class names
Perfect for an MVP
127 |
128 |
129 |
130 |
131 |

A decent MVP in no time

132 |

More building and less designing with "set and forget" styling.

133 |
134 |
135 | Stock photo 136 |
"Uber for X" brainstorming session
137 |
138 |
139 |
140 |
141 |

Docs

142 |

HTML Reference

143 | 146 |
147 |

MVP.css works with the following HTML elements:

148 |
    149 |
  • 150 | <a> — text links 151 |
      152 |
    • <a><b>, <a><strong> — solid link buttons
    • 153 |
    • <a><em>, <a><i> — outlined link buttons
    • 154 |
    155 |
  • 156 |
  • 157 | <article> — content area with normal styling 158 |
      159 |
    • <article><aside> — text callout
    • 160 |
    161 |
  • 162 |
  • 163 | <blockquote> — quote callout 164 |
      165 |
    • <blockquote><footer> — quote attribution
    • 166 |
    167 |
  • 168 |
  • <body> — default parent element
  • 169 |
  • <button> — form buttons
  • 170 |
  • <code> — inline code highlighting
  • 171 |
  • 172 | <details> — default expandable content section 173 |
      174 |
    • <details><summary> — expandable heading
    • 175 |
    176 |
  • 177 |
  • <dialog> — popup windows
  • 178 |
  • <div> — unstyled element
  • 179 |
  • 180 | <figure> — image callouts 181 |
      182 |
    • <figure><figcaption> — image callout captions
    • 183 |
    184 |
  • 185 |
  • <footer> — footer area
  • 186 |
  • 187 | <form> — small form area 188 |
      189 |
    • <form><input> — short input field
    • 190 |
    • <form><label> — form field labels
    • 191 |
    • 192 | <form><select> — dropdown options container 193 |
        194 |
      • <form><select><option> — dropdown option items
      • 195 |
      196 |
    • 197 |
    • <form><textarea> — large input field
    • 198 |
    199 |
  • 200 |
  • <header> — content area with centered styling
  • 201 |
  • <h1>, <h2>, <h3>, <h4>, <h5>, <h6> — headings
  • 202 |
  • <hr> — horizontal rule (divider)
  • 203 |
  • <main> — main content area
  • 204 |
  • <mark> — text highlighting
  • 205 |
  • 206 | <nav> — top navigation 207 |
      208 |
    • <nav><ul> — nav links container
    • 209 |
    • <nav><ul><li> — nav link items
    • 210 |
    • <nav><ul><li><ul> — nav dropdown container
    • 211 |
    • <nav><ul><li><ul><li> — nav dropdown link items
    • 212 |
    213 |
  • 214 |
  • 215 | <ol> — numbered list container 216 |
      217 |
    • <ol><li> — numbered list items
    • 218 |
    219 |
  • 220 |
  • <p> — paragraph tag
  • 221 |
  • 222 | <pre> — preformatted text 223 |
      224 |
    • <pre><code> — code block
    • 225 |
    • <pre><samp> — computer output block
    • 226 |
    227 |
  • 228 |
  • <samp> — inline computer output
  • 229 |
  • 230 | <section> — content area for centered / special content 231 |
      232 |
    • <section><aside> — content card
    • 233 |
    234 |
  • 235 |
  • <small> — smaller text
  • 236 |
  • <sup> — raised text (notification bubbles)
  • 237 |
  • 238 | <table> — data table 239 |
      240 |
    • <table><td> — data table cell
    • 241 |
    • <table><th> — data table header cell
    • 242 |
    • <table><thead> — data table header section
    • 243 |
    • <table><tr> — data table row
    • 244 |
    245 |
  • 246 |
  • 247 | <ul> — unordered list container 248 |
      249 |
    • <ul><li> — unordered list item
    • 250 |
    251 |
  • 252 |
253 |
254 |

Modifying the CSS variables

255 |

MVP.css includes a list of CSS variables. Editing these variables will change the styles globally.

256 |
257 |                 
258 | :root {
259 |     --active-brightness: 0.85;
260 |     --border-radius: 5px;
261 |     --box-shadow: 2px 2px 10px;
262 |     --color-accent: #118bee15;
263 |     --color-bg: #fff;
264 |     --color-bg-secondary: #e9e9e9;
265 |     --color-link: #118bee;
266 |     --color-secondary: #920de9;
267 |     --color-secondary-accent: #920de90b;
268 |     --color-shadow: #f4f4f4;
269 |     --color-table: #118bee;
270 |     --color-text: #000;
271 |     --color-text-secondary: #999;
272 |     --font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;
273 |     --hover-brightness: 1.2;
274 |     --justify-important: center;
275 |     --justify-normal: left;
276 |     --line-height: 1.5;
277 |     --width-card: 285px;
278 |     --width-card-medium: 460px;
279 |     --width-card-wide: 800px;
280 |     --width-content: 1080px;
281 | }
282 |                 
283 |             
284 | 285 |

Custom styles can be added inside a <style> tag, or at the end of your local mvp.css file

286 |
287 |
288 |
289 |

Frequently Asked Questions

290 |
291 | Why would I use this? 292 |

If you just want to launch already.

293 |

PRO TIP An MVP is a temporary site, it doesn't have to be and shouldn't be perfect.

294 |
295 |
296 | What skills will I need? 297 |

Mostly HTML, maybe a hint of CSS if you want to get fancy.

298 |

CSS        5

299 |

Design   0

300 |

HTML     100

301 |
302 |
303 | Is there a minified version? 304 |

No, you don't need one for an MVP.

305 |
306 |
307 | How can I improve my design? 308 |

Here are some helpful resources:

309 | 320 |
321 |
322 | How do I handle a user's dark mode preference? 323 |

324 | By default <html> will force users into light mode. By using <html color-mode="user"> MVP.css will respect the user's dark mode preferences. The 325 | original concept and additional tips can be found in this article: https://ryanfeigenbaum.com/dark-mode/ 326 |

327 |
328 |
329 | What if I don't like the default styles? 330 |

Most styles are editable through CSS variables. You can also add your own styles inline, at the end of MVP.css or in a new stylesheet.

331 |

PRO TIP If there are two conflicting CSS styles, the last one will take precedence.

332 |
333 |                     
334 | :root {
335 |     --color-bg: #fff;
336 | }
337 | 
338 | /* Lower in the CSS, or in a 2nd stylesheet */
339 | 
340 | :root {
341 |     --color-bg: #000; /* This will take precedence */
342 | }
343 |                     
344 |                 
345 |
346 |
347 | What if I still don't like it? 348 |

That's OK, you probably shouldn't love your MVP. The goal of MVP.css is to help you feel slightly less embarrased about it.

349 |

350 | 👉 If you want a CSS framework with more features check out 351 | Bulma ↗ or Tailwind ↗. 352 |

353 |
354 |
355 |
356 |
357 |
358 | Idea 359 |

What can you build with MVP.css?

360 |

Free ideas below ↓

361 |
362 |
363 |
364 | MVP.css 365 |
366 | 367 | 368 | 369 | 370 | 371 | 375 | 376 | 377 | 378 | 379 | 380 | 381 | 382 | 383 | 384 |
385 | 386 |
387 | 388 |
389 | 390 |
391 |
392 | 393 | 394 |
395 | 396 | 397 | 398 |

Hello, I am a header of the modal

399 |
400 |

401 | Lorem ipsum dolor sit amet consectetur adipisicing elit. Quos ullam at assumenda cum placeat aperiam ab error, doloribus eligendi sit. Lorem ipsum dolor sit amet consectetur adipisicing 402 | elit. Quos ullam. 403 |

404 |
405 |
406 |
407 | 411 | 412 | 449 | 450 | 451 | -------------------------------------------------------------------------------- /mvp.css: -------------------------------------------------------------------------------- 1 | /* MVP.css v1.17.2 - https://github.com/andybrewer/mvp */ 2 | 3 | :root { 4 | --active-brightness: 0.85; 5 | --border-radius: 5px; 6 | --box-shadow: 2px 2px 10px; 7 | --color-accent: #118bee15; 8 | --color-bg: #fff; 9 | --color-bg-secondary: #e9e9e9; 10 | --color-link: #118bee; 11 | --color-secondary: #920de9; 12 | --color-secondary-accent: #920de90b; 13 | --color-shadow: #f4f4f4; 14 | --color-table: #118bee; 15 | --color-text: #000; 16 | --color-text-secondary: #999; 17 | --color-scrollbar: #cacae8; 18 | --font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; 19 | --hover-brightness: 1.2; 20 | --justify-important: center; 21 | --justify-normal: left; 22 | --line-height: 1.5; 23 | --width-card: 285px; 24 | --width-card-medium: 460px; 25 | --width-card-wide: 800px; 26 | --width-content: 1080px; 27 | } 28 | 29 | @media (prefers-color-scheme: dark) { 30 | :root[color-mode="user"] { 31 | --color-accent: #0097fc4f; 32 | --color-bg: #333; 33 | --color-bg-secondary: #555; 34 | --color-link: #0097fc; 35 | --color-secondary: #e20de9; 36 | --color-secondary-accent: #e20de94f; 37 | --color-shadow: #bbbbbb20; 38 | --color-table: #0097fc; 39 | --color-text: #f7f7f7; 40 | --color-text-secondary: #aaa; 41 | } 42 | } 43 | 44 | html { 45 | scroll-behavior: smooth; 46 | } 47 | 48 | @media (prefers-reduced-motion: reduce) { 49 | html { 50 | scroll-behavior: auto; 51 | } 52 | } 53 | 54 | /* Layout */ 55 | article aside { 56 | background: var(--color-secondary-accent); 57 | border-left: 4px solid var(--color-secondary); 58 | padding: 0.01rem 0.8rem; 59 | } 60 | 61 | body { 62 | background: var(--color-bg); 63 | color: var(--color-text); 64 | font-family: var(--font-family); 65 | line-height: var(--line-height); 66 | margin: 0; 67 | overflow-x: hidden; 68 | padding: 0; 69 | } 70 | 71 | footer, 72 | header, 73 | main { 74 | margin: 0 auto; 75 | max-width: var(--width-content); 76 | padding: 3rem 1rem; 77 | } 78 | 79 | hr { 80 | background-color: var(--color-bg-secondary); 81 | border: none; 82 | height: 1px; 83 | margin: 4rem 0; 84 | width: 100%; 85 | } 86 | 87 | section { 88 | display: flex; 89 | flex-wrap: wrap; 90 | justify-content: var(--justify-important); 91 | } 92 | 93 | section img, 94 | article img { 95 | max-width: 100%; 96 | } 97 | 98 | section pre { 99 | overflow: auto; 100 | } 101 | 102 | section aside { 103 | border: 1px solid var(--color-bg-secondary); 104 | border-radius: var(--border-radius); 105 | box-shadow: var(--box-shadow) var(--color-shadow); 106 | margin: 1rem; 107 | padding: 1.25rem; 108 | width: var(--width-card); 109 | } 110 | 111 | section aside:hover { 112 | box-shadow: var(--box-shadow) var(--color-bg-secondary); 113 | } 114 | 115 | [hidden] { 116 | display: none; 117 | } 118 | 119 | /* Headers */ 120 | article header, 121 | div header, 122 | main header { 123 | padding-top: 0; 124 | } 125 | 126 | header { 127 | text-align: var(--justify-important); 128 | } 129 | 130 | header a b, 131 | header a em, 132 | header a i, 133 | header a strong { 134 | margin-left: 0.5rem; 135 | margin-right: 0.5rem; 136 | } 137 | 138 | header nav img { 139 | margin: 1rem 0; 140 | } 141 | 142 | section header { 143 | padding-top: 0; 144 | width: 100%; 145 | } 146 | 147 | /* Nav */ 148 | nav { 149 | align-items: center; 150 | display: flex; 151 | font-weight: bold; 152 | justify-content: space-between; 153 | margin-bottom: 7rem; 154 | } 155 | 156 | nav ul { 157 | list-style: none; 158 | padding: 0; 159 | } 160 | 161 | nav ul li { 162 | display: inline-block; 163 | margin: 0 0.5rem; 164 | position: relative; 165 | text-align: left; 166 | } 167 | 168 | /* Nav Dropdown */ 169 | nav ul li:hover ul { 170 | display: block; 171 | } 172 | 173 | nav ul li ul { 174 | background: var(--color-bg); 175 | border: 1px solid var(--color-bg-secondary); 176 | border-radius: var(--border-radius); 177 | box-shadow: var(--box-shadow) var(--color-shadow); 178 | display: none; 179 | height: auto; 180 | left: -2px; 181 | padding: 0.5rem 1rem; 182 | position: absolute; 183 | top: 1.7rem; 184 | white-space: nowrap; 185 | width: auto; 186 | z-index: 1; 187 | } 188 | 189 | nav ul li ul::before { 190 | /* fill gap above to make mousing over them easier */ 191 | content: ""; 192 | position: absolute; 193 | left: 0; 194 | right: 0; 195 | top: -0.5rem; 196 | height: 0.5rem; 197 | } 198 | 199 | nav ul li ul li, 200 | nav ul li ul li a { 201 | display: block; 202 | } 203 | 204 | /* Nav for Mobile */ 205 | @media (max-width: 768px) { 206 | nav { 207 | flex-wrap: wrap; 208 | } 209 | 210 | nav ul li { 211 | width: calc(100% - 1em); 212 | } 213 | 214 | nav ul li ul { 215 | border: none; 216 | box-shadow: none; 217 | display: block; 218 | position: static; 219 | } 220 | } 221 | 222 | /* Typography */ 223 | code, 224 | samp { 225 | background-color: var(--color-accent); 226 | border-radius: var(--border-radius); 227 | color: var(--color-text); 228 | display: inline-block; 229 | margin: 0 0.1rem; 230 | padding: 0 0.5rem; 231 | } 232 | 233 | details { 234 | margin: 1.3rem 0; 235 | } 236 | 237 | details summary { 238 | font-weight: bold; 239 | cursor: pointer; 240 | } 241 | 242 | h1, 243 | h2, 244 | h3, 245 | h4, 246 | h5, 247 | h6 { 248 | line-height: var(--line-height); 249 | text-wrap: balance; 250 | } 251 | 252 | mark { 253 | padding: 0.1rem; 254 | } 255 | 256 | ol li, 257 | ul li { 258 | padding: 0.2rem 0; 259 | } 260 | 261 | p { 262 | margin: 0.75rem 0; 263 | padding: 0; 264 | width: 100%; 265 | } 266 | 267 | pre { 268 | margin: 1rem 0; 269 | max-width: var(--width-card-wide); 270 | padding: 1rem 0; 271 | } 272 | 273 | pre code, 274 | pre samp { 275 | display: block; 276 | max-width: var(--width-card-wide); 277 | padding: 0.5rem 2rem; 278 | white-space: pre-wrap; 279 | } 280 | 281 | small { 282 | color: var(--color-text-secondary); 283 | } 284 | 285 | sup { 286 | background-color: var(--color-secondary); 287 | border-radius: var(--border-radius); 288 | color: var(--color-bg); 289 | font-size: xx-small; 290 | font-weight: bold; 291 | margin: 0.2rem; 292 | padding: 0.2rem 0.3rem; 293 | position: relative; 294 | top: -2px; 295 | } 296 | 297 | /* Links */ 298 | a { 299 | color: var(--color-link); 300 | display: inline-block; 301 | font-weight: bold; 302 | text-decoration: underline; 303 | } 304 | 305 | a:hover { 306 | filter: brightness(var(--hover-brightness)); 307 | } 308 | 309 | a:active { 310 | filter: brightness(var(--active-brightness)); 311 | } 312 | 313 | a b, 314 | a em, 315 | a i, 316 | a strong, 317 | button, 318 | input[type="submit"] { 319 | border-radius: var(--border-radius); 320 | display: inline-block; 321 | font-size: medium; 322 | font-weight: bold; 323 | line-height: var(--line-height); 324 | margin: 0.5rem 0; 325 | padding: 1rem 2rem; 326 | } 327 | 328 | button, 329 | input[type="submit"] { 330 | font-family: var(--font-family); 331 | } 332 | 333 | button:hover, 334 | input[type="submit"]:hover { 335 | cursor: pointer; 336 | filter: brightness(var(--hover-brightness)); 337 | } 338 | 339 | button:active, 340 | input[type="submit"]:active { 341 | filter: brightness(var(--active-brightness)); 342 | } 343 | 344 | a b, 345 | a strong, 346 | button, 347 | input[type="submit"] { 348 | background-color: var(--color-link); 349 | border: 2px solid var(--color-link); 350 | color: var(--color-bg); 351 | } 352 | 353 | a em, 354 | a i { 355 | border: 2px solid var(--color-link); 356 | border-radius: var(--border-radius); 357 | color: var(--color-link); 358 | display: inline-block; 359 | padding: 1rem 2rem; 360 | } 361 | 362 | article aside a { 363 | color: var(--color-secondary); 364 | } 365 | 366 | /* Images */ 367 | figure { 368 | margin: 0; 369 | padding: 0; 370 | } 371 | 372 | figure img { 373 | max-width: 100%; 374 | } 375 | 376 | figure figcaption { 377 | color: var(--color-text-secondary); 378 | } 379 | 380 | /* Forms */ 381 | button:disabled, 382 | input:disabled { 383 | background: var(--color-bg-secondary); 384 | border-color: var(--color-bg-secondary); 385 | color: var(--color-text-secondary); 386 | cursor: not-allowed; 387 | } 388 | 389 | button[disabled]:hover, 390 | input[type="submit"][disabled]:hover { 391 | filter: none; 392 | } 393 | 394 | form { 395 | border: 1px solid var(--color-bg-secondary); 396 | border-radius: var(--border-radius); 397 | box-shadow: var(--box-shadow) var(--color-shadow); 398 | display: block; 399 | max-width: var(--width-card-wide); 400 | min-width: var(--width-card); 401 | padding: 1.5rem; 402 | text-align: var(--justify-normal); 403 | } 404 | 405 | form header { 406 | margin: 1.5rem 0; 407 | padding: 1.5rem 0; 408 | } 409 | 410 | input, 411 | label, 412 | select, 413 | textarea { 414 | display: block; 415 | font-size: inherit; 416 | max-width: var(--width-card-wide); 417 | } 418 | 419 | input[type="checkbox"], 420 | input[type="radio"] { 421 | display: inline-block; 422 | } 423 | 424 | input[type="checkbox"] + label, 425 | input[type="radio"] + label { 426 | display: inline-block; 427 | font-weight: normal; 428 | position: relative; 429 | top: 1px; 430 | } 431 | 432 | input[type="range"] { 433 | padding: 0.4rem 0; 434 | } 435 | 436 | input, 437 | select, 438 | textarea { 439 | border: 1px solid var(--color-bg-secondary); 440 | border-radius: var(--border-radius); 441 | margin-bottom: 1rem; 442 | padding: 0.4rem 0.8rem; 443 | } 444 | 445 | input[type="text"], 446 | input[type="password"], 447 | input[type="email"], 448 | textarea { 449 | width: calc(100% - 1.6rem); 450 | } 451 | 452 | input[readonly], 453 | textarea[readonly] { 454 | background-color: var(--color-bg-secondary); 455 | } 456 | 457 | label { 458 | font-weight: bold; 459 | margin-bottom: 0.2rem; 460 | } 461 | 462 | /* Popups */ 463 | dialog { 464 | max-width: 90%; 465 | max-height: 85dvh; 466 | margin: auto; 467 | padding-block: 0; 468 | padding-inline: 20px; 469 | border: 1px solid var(--color-bg-secondary); 470 | border-radius: 0.5rem; 471 | overscroll-behavior: contain; 472 | scroll-behavior: smooth; 473 | scrollbar-width: none; /* Hide scrollbar for Firefox */ 474 | -ms-overflow-style: none; /* Hide scrollbar for IE and Edge */ 475 | scrollbar-color: transparent transparent; 476 | animation: bottom-to-top 0.25s ease-in-out forwards; 477 | } 478 | 479 | dialog::-webkit-scrollbar { 480 | width: 0; 481 | display: none; 482 | } 483 | 484 | dialog::-webkit-scrollbar-track { 485 | background: transparent; 486 | } 487 | 488 | dialog::-webkit-scrollbar-thumb { 489 | background-color: transparent; 490 | } 491 | 492 | @media (min-width: 650px) { 493 | dialog { 494 | max-width: 39rem; 495 | } 496 | } 497 | 498 | dialog::backdrop { 499 | background-color: rgba(0, 0, 0, 0.5); 500 | } 501 | 502 | @keyframes bottom-to-top { 503 | 0% { 504 | opacity: 0; 505 | transform: translateY(10%); 506 | } 507 | 508 | 100% { 509 | opacity: 1; 510 | transform: translateY(0); 511 | } 512 | } 513 | 514 | dialog hr { 515 | margin-block: 1rem; 516 | } 517 | 518 | /* Tables */ 519 | table { 520 | border: 1px solid var(--color-bg-secondary); 521 | border-radius: var(--border-radius); 522 | border-spacing: 0; 523 | display: inline-block; 524 | max-width: 100%; 525 | overflow-x: auto; 526 | padding: 0; 527 | white-space: nowrap; 528 | } 529 | 530 | table td, 531 | table th, 532 | table tr { 533 | padding: 0.4rem 0.8rem; 534 | text-align: var(--justify-important); 535 | } 536 | 537 | table thead { 538 | background-color: var(--color-table); 539 | border-collapse: collapse; 540 | border-radius: var(--border-radius); 541 | color: var(--color-bg); 542 | margin: 0; 543 | padding: 0; 544 | } 545 | 546 | table thead tr:first-child th:first-child { 547 | border-top-left-radius: var(--border-radius); 548 | } 549 | 550 | table thead tr:first-child th:last-child { 551 | border-top-right-radius: var(--border-radius); 552 | } 553 | 554 | table thead th:first-child, 555 | table tr td:first-child { 556 | text-align: var(--justify-normal); 557 | } 558 | 559 | table tr:nth-child(even) { 560 | background-color: var(--color-accent); 561 | } 562 | 563 | /* Quotes */ 564 | blockquote { 565 | display: block; 566 | font-size: x-large; 567 | line-height: var(--line-height); 568 | margin: 1rem auto; 569 | max-width: var(--width-card-medium); 570 | padding: 1.5rem 1rem; 571 | text-align: var(--justify-important); 572 | } 573 | 574 | blockquote footer { 575 | color: var(--color-text-secondary); 576 | display: block; 577 | font-size: small; 578 | line-height: var(--line-height); 579 | padding: 1.5rem 0; 580 | } 581 | 582 | /* Scrollbars */ 583 | * { 584 | scrollbar-width: thin; 585 | scrollbar-color: var(--color-scrollbar) transparent; 586 | } 587 | 588 | *::-webkit-scrollbar { 589 | width: 5px; 590 | height: 5px; 591 | } 592 | 593 | *::-webkit-scrollbar-track { 594 | background: transparent; 595 | } 596 | 597 | *::-webkit-scrollbar-thumb { 598 | background-color: var(--color-scrollbar); 599 | border-radius: 10px; 600 | } 601 | -------------------------------------------------------------------------------- /mvp.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | My title 15 | 16 | 17 | 18 |
19 | 32 |

Page Heading with Italics and Underline

33 |

Page Subheading with highlighting

34 |
35 |

Italic Link ButtonBold Link Button →

36 |
37 |
38 |
39 |
40 |
41 |

Section Heading

42 |

Section Subheading

43 |
44 | 49 | 53 | 57 |
58 |
59 |
60 |
61 | "Quote" 62 |
- Attribution
63 |
64 |
65 |
66 |
67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 |
Col ACol BCol C
Row 1Cell A1Cell B1Cell C1
Row 2Cell A2Cell B2Cell C2
89 |
90 |
91 |
92 |

Left-aligned header

93 |

Left-aligned paragraph

94 | 97 |
    98 |
  • List item 1
  • 99 |
  • List item 2
  • 100 |
101 |
102 | Stock photo 103 |
Image caption
104 |
105 |
106 |
107 |
108 |
109 | Expandable title 110 |

Revealed content

111 |
112 |
113 | Another expandable title 114 |

More revealed content

115 |
116 |
117 |

Inline code snippets

118 |
119 |                 
120 | // preformatted code block
121 |                 
122 |             
123 |
124 |
125 |
126 |
127 |
128 |

Form title

129 |
130 | 131 | 132 | 133 | 137 | 138 | 139 | 140 |
141 |
142 |
143 | 149 | 150 | 151 | 152 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "mvp.css", 3 | "version": "1.17.2", 4 | "description": "A minimalist stylesheet for HTML elements", 5 | "main": "mvp.css", 6 | "repository": { 7 | "type": "git", 8 | "url": "git+https://github.com/andybrewer/mvp.git" 9 | }, 10 | "keywords": [ 11 | "css", 12 | "stylesheet", 13 | "mvp" 14 | ], 15 | "author": "Andy Brewer", 16 | "license": "MIT", 17 | "bugs": { 18 | "url": "https://github.com/andybrewer/mvp/issues" 19 | }, 20 | "homepage": "https://andybrewer.github.io/mvp/" 21 | } 22 | --------------------------------------------------------------------------------