// normalerweise wΓΌrdest du in etwa so anfangen: // import glamorous from 'glamorous' const mediaQueries = { phone: '@media only screen and (max-width: 500px)', } const Heading = glamorous.h1({ }) const Link = glamorous.a({ }) const ListItem = glamorous.li({ }) const CodeBlock = glamorous.pre({ }) // du kannst diese hier auch ausprobieren, wenn du mΓΆchtest const Paragraph = glamorous.p({ }) const Code = glamorous.code({ }) const List = glamorous.ul({ }) render( <ReactMarkdown renderers={{ Heading, Link, Paragraph, Code, CodeBlock: props => ( <CodeBlock key={props.nodeKey} language={props.language} className={`language-${props.language} ${props.className}`} > <Code> {props.literal} </Code> </CodeBlock> ), List, Item: ListItem, }} /> )
Wir werden dir glamorous
nΓ€herbringen, indem du das Tuturial bearbeitest,
welches du gerade liest π±
Um zu beginnen, haben wir links bereits ein paar Komponenten fΓΌr dich bereitgestellt, also musst du nur deren Stile anpassen, um die Art und Weise, wie dieser Guide aussieht und sich bewegt, zu verΓ€ndern.
Lass uns damit beginnen, die Γberschriften dieser Seite zu verschΓΆnern.
Mit glamorous
nutzen wir normale JavaScript Objekte anstatt der regulΓ€ren
CSS-Syntax, mit der du vielleicht vertraut bist.
Γndere das Heading
hierzu:
const Heading = glamorous.h1({
fontSize: '2.4em',
marginTop: 10,
color: '#CC3A4B',
})
Wir wollen die Γberschriften schrumpfen lassen, wenn der Darstellungsbereich schmaler wird (wie auf mobilen EndgerΓ€ten).
Aktualisiere das Heading
zu:
const Heading = glamorous.h1({
fontSize: '2.4em',
marginTop: 10,
color: '#CC3A4B',
[mediaQueries.phone]: {
fontSize: '1.8em',
backgroundColor: '#CC3A4B',
color: 'white'
},
})
Γndere jetzt die BrowsergrΓΆΓe, um die Γnderungen zu sehen.
Hier haben wir einen Link.
Lass uns seine Pseudo-Klassen wie active
, visited
und hover
anpassen.
Aktualisiere den Link
zu:
const Link = glamorous.a({
':visited': {
color: 'darkblue',
},
':hover,:active,:focus': {
color: 'darkred',
},
})
Hast du diesen Link schon mal besucht? π
Nun verΓ€ndern wir, wie die EintrΓ€ge gerendert werden, indem wir die Pseudo-Elemente anpassen.
const ListItem = glamorous.li({
':before': {
content: '"π"',
}
})
Anmerkung! In CSS vergisst man hΓ€ufig, dass die
content
-Eigenschaft von AnfΓΌhrungszeichen umschlossen wird. Obwohl man dies eigentlich tut, weil mancontent
einen String zuweist, muss dieser die AnfΓΌhrungszeichen enthalten, welche in das CSS eingefΓΌgt werden.
Du kannst eine Funktion als Argument an eine glamorousComponentFactory
ΓΌbergeben.
(So heiΓt ΓΌbrigens glamorous.h1
). Diese Funktion wird mit props
aufgerufen.
Die CodeBlock
-Komponente erhΓ€lt die language
als prop. Hier ist der Codeblock
als html
:
<html>
<head>
<title>Hello world!</title>
</head>
<body>
Hello world!
</body>
</html>
Nun lass uns das Aussehen von html
-CodeblΓΆcken verΓ€ndern:
const CodeBlock = glamorous.pre(props => {
const isHTML = props.language === 'html'
if (isHTML) {
return {
padding: 20,
backgroundColor: '#0c1e35',
}
}
})
glamorous
benutzt glamor
,
um das CSS zu generieren und einzufΓΌgen, welches du schreibst. Eine der tollen
Eigenschaften von glamor
ist die MΓΆglichkeit der Komposition. Also kannst du mit
glamorousComponentFactory
-Funktionen (wie beispielsweise glamorous.pre
)
beliebig viele Argumente ΓΌbergeben und die Stile werden kombiniert.
ZusΓ€tzlich kannst du fΓΌr dynamische Stile Arrays ΓΌbergeben oder zurΓΌckgeben,
welche ebenfalls zusammengefΓΌgt werden (wobei im Falle eines Konflikts der
letztere gewinnt). Probieren wir einiges davon mal aus:
Γndere CodeBlock
hierzu:
const CodeBlock = glamorous.pre({
position: 'relative',
padding: 20,
':before': {
position: 'absolute',
top: '0',
opacity: '0.6',
left: '7px',
fontSize: '0.8rem',
},
}, props => {
const isHTML = props.language === 'html'
let styles = [
{
':before': {
content: `"${props.language}"`,
}
}
]
if (isHTML) {
styles.push({
backgroundColor: '#0c1e35',
})
}
// Hier wird ein Array zurΓΌckgegeben.
return styles
})
Das ist alles, was wir bis jetzt haben, aber wenn du zu diesem Guide beitragen mΓΆchtest, wΓ€re das super! Schau dir doch dazu das GitHub Projekt an.