Fresh Roasted Coffee
\nOur beans are sourced from small farms in Colombia and Ethiopia.
\nEach batch is roasted weekly to ensure peak freshness.
\n{
"$schema": "../../schemas/code-crispies-module-schema.json",
"id": "css-basic-selectors",
"title": "Podstawy CSS",
"description": "Poznaj podstawowe elementy CSS: właściwości, wartości i selektory. Ten moduł uczy zasad składni, których przestrzega każda deklaracja CSS.",
"difficulty": "beginner",
"lessons": [
{
"id": "css-properties",
"title": "Właściwości CSS",
"description": "CSS stylizuje elementy za pomocą deklaracji - par właściwości i wartości. Każda deklaracja ma ten sam wzorzec:
property: value;
This text should turn coral.
", "previewBaseCSS": "body { font-family: system-ui; padding: 20px; } .text { font-size: 1.25rem; }", "sandboxCSS": "", "codePrefix": ".text {\n ", "initialCode": "", "codeSuffix": "\n}", "previewContainer": "preview-area", "solution": "color: coral;", "validations": [ { "type": "property_value", "value": { "property": "color", "expected": "coral" }, "message": "Dodaj color: coral;" } ] }, { "id": "multiple-properties", "title": "Wiele właściwości", "description": "Reguła może mieć wiele deklaracji. Każda idzie w osobnej linii i każda potrzebuje średnika na końcu:.box {
background: gold;
color: navy;
padding: 1rem;
}p {
color: steelblue;
}Our beans are sourced from small farms in Colombia and Ethiopia.
\nEach batch is roasted weekly to ensure peak freshness.
\n.badge {
background: coral;
}You have new notifications waiting.
", "previewBaseCSS": "body { font-family: system-ui; padding: 1rem; } header { display: flex; align-items: center; gap: 0.75rem; margin-bottom: 1rem; } h1 { margin: 0; font-size: 1.5rem; } .badge { color: white; padding: 0.25rem 0.5rem; border-radius: 999px; font-size: 0.875rem; } p { color: #555; margin: 0; }", "sandboxCSS": "", "codePrefix": "", "initialCode": "", "codeSuffix": "", "previewContainer": "preview-area", "solution": ".badge {\n background: tomato;\n}", "validations": [ { "type": "regex", "value": "\\.badge\\s*\\{", "message": "Zacznij od .badge { (nie zapomnij o kropce!)" }, { "type": "property_value", "value": { "property": "background", "expected": "tomato" }, "message": "Ustaw background: tomato" } ] }, { "id": "button-variants", "title": "Warianty przycisków", "description": "Elementy mogą mieć wiele klas. Gdy łączysz selektory klas bez spacji, celujesz w elementy które mają wszystkie te klasy:.btn.primary {
background: steelblue;
}a.btn {
text-decoration: none;
}h1, h2, h3 {
color: steelblue;
}Introduction paragraph with some text.
More content here.
Final paragraph.
.nav a {
color: white;
}Read more in our documentation.
", "previewBaseCSS": "body { font-family: system-ui, sans-serif; padding: 1rem; margin: 0; } .nav { background: steelblue; padding: 1rem; display: flex; gap: 1rem; border-radius: 8px; margin-bottom: 1rem; } .nav a { text-decoration: none; } p a { color: steelblue; }", "sandboxCSS": "", "codePrefix": "", "initialCode": "", "codeSuffix": "", "previewContainer": "preview-area", "solution": ".nav a {\n color: white;\n}", "validations": [ { "type": "regex", "value": "\\.nav\\s+a\\s*\\{", "message": "Użyj .nav a { (spacja między .nav a a)" }, { "type": "property_value", "value": { "property": "color", "expected": "white" }, "message": "Ustaw color: white" } ] }, { "id": "nested-styling", "title": "Zagnieżdżone style", "description": "Selektory potomków pozwalają tworzyć style kontekstowe. Ten sam element może wyglądać inaczej w zależności od tego gdzie się znajduje.This is a regular article paragraph with normal-sized text for comfortable reading.
Card paragraphs should be slightly smaller to fit the compact design.
Back to regular article text here.