Skip to main content

React and CSS

Learning Objectives

  • Learn to Use CSS with React

CSS & React

Right now we have all the right elements, but we need some style to make it look like a proper tic tac toe game, let's try to make it look like this:

expected final appearance

The simplest way is to add code to the index.css file. Let's do that!

/* * {
border: 1px solid gold;
} */

body {
margin: 0;
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen",
"Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue",
sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}

code {
font-family: source-code-pro, Menlo, Monaco, Consolas, "Courier New",
monospace;
}

:root {
--dark-cerulean: #124e78;
--maastricht-blue: #0b132b;
--yankees-blue: #1c2541;
--sea-serpent: #5bc0be;
--aquamarine: #6fffe9;
--react: #00d8ff;
}

html {
background: var(--yankees-blue);
}
body {
margin: 0;
font-family: "Montserrat", sans-serif;
color: white;
}

.container > div {
display: flex;
background: var(--yankees-blue);
flex-wrap: wrap;
justify-content: space-around;
min-height: 60vh;
align-items: flex-start;
}

.app {
display: flex;
background: var(--yankees-blue);
flex-wrap: wrap;
justify-content: space-around;
min-height: 60vh;
align-items: flex-start;
}

.board {
flex-basis: 60%;
display: grid;
grid-template-columns: 15vw 15vw 15vw;
grid-template-rows: 15vw 15vw 15vw;
color: white;
justify-items: stretch;
justify-content: center;
}

.board div {
display: flex;
align-itmes: center;
border: 3px solid var(--react);
}

h1 {
flex-basis: 100%;
}

h4,
h3 {
text-align: center;
flex-basis: 100%;
align-self: center;
}

.X,
.O {
flex-basis: 45%;
text-align: center;
justify-content: space-between;
}

.X {
color: var(--sea-serpent);
}

.O {
color: var(--aquamarine);
}
h1 {
flex-basis: 60%;
color: var(--react);
text-align: center;
}

Let's add some classes to target parts of our components

GOTCHA Class is already a reserved word in JavaScript. We'll have to use className instead. React will compile it into the proper class attribute in the html that is rendered

App.js

App.js
<div className="app">
<Header />
<Player whichPlayer="X" />
<Player whichPlayer="O" />
<Board className="board" />
</div>;

Player.jsx

Player.jsx
class Player extends React.Component {
render() {
return (
<div className={this.props.whichPlayer}>
<h2>Player {this.props.whichPlayer} </h2>
<h3>Wins: </h3>
</div>
);
}
}

Board.jsx

Board.jsx
class Board extends React.Component {
render() {
return (
<div className="board">
<Square />
<Square />
<Square />
<Square />
<Square />
<Square />
<Square />
<Square />
<Square />
</div>
);
}
}

Square.jsx

Square.jsx
class Square extends React.Component {
render() {
return (
<div>
<h4>square</h4>
</div>
);
}
}

Extra

There are newer ways to incorporate CSS into react. You can read about 4 Ways to style react components and try to swap out our style sheet for one ore more of these methods