From 78c84c9d992673c6639927755bd2ae132cf8059c Mon Sep 17 00:00:00 2001 From: Anna Date: Thu, 10 Oct 2024 12:28:14 +0200 Subject: [PATCH 01/17] Added components and folders/subfolders --- README.md | 5 ---- index.html | 25 +++++++++------- src/App.jsx | 1 + src/components/Album/Album.css | 0 src/components/Album/Album.jsx | 3 ++ src/components/AlbumCard.jsx | 37 ++++++++++++++++++++++++ src/components/AlbumCover/AlbumCover.css | 0 src/components/AlbumCover/AlbumCover.jsx | 0 src/components/AlbumGrid.jsx | 20 +++++++++++++ src/components/AlbumName/AlbumName.css | 0 src/components/AlbumName/AlbumName.jsx | 0 src/components/ArtistName/ArtistName.css | 0 src/components/ArtistName/ArtistName.jsx | 0 src/components/HoverMenu.jsx | 18 ++++++++++++ 14 files changed, 93 insertions(+), 16 deletions(-) create mode 100644 src/components/Album/Album.css create mode 100644 src/components/Album/Album.jsx create mode 100644 src/components/AlbumCard.jsx create mode 100644 src/components/AlbumCover/AlbumCover.css create mode 100644 src/components/AlbumCover/AlbumCover.jsx create mode 100644 src/components/AlbumGrid.jsx create mode 100644 src/components/AlbumName/AlbumName.css create mode 100644 src/components/AlbumName/AlbumName.jsx create mode 100644 src/components/ArtistName/ArtistName.css create mode 100644 src/components/ArtistName/ArtistName.jsx create mode 100644 src/components/HoverMenu.jsx diff --git a/README.md b/README.md index 38807b33..2cc0b1ae 100644 --- a/README.md +++ b/README.md @@ -16,11 +16,6 @@ Start by briefly describing the assignment in a sentence or two. Keep it short a Once cloned, navigate to the project's root directory and this project uses npm (Node Package Manager) to manage its dependencies. -The command below is a combination of installing dependencies, opening up the project on VS Code and it will run a development server on your terminal. - -```bash -npm i && code . && npm run dev -``` ### The Problem diff --git a/index.html b/index.html index 3e0bcb75..01ebc171 100644 --- a/index.html +++ b/index.html @@ -1,13 +1,16 @@ - - - - - Music Releases - - -
- - - + + + + + + Anna's Spotify Mockup + + + +
+ + + + \ No newline at end of file diff --git a/src/App.jsx b/src/App.jsx index a13f8faf..1054021b 100644 --- a/src/App.jsx +++ b/src/App.jsx @@ -1,4 +1,5 @@ import data from "./data.json"; +import { Album } from "./components/Album/Album" console.log(data); diff --git a/src/components/Album/Album.css b/src/components/Album/Album.css new file mode 100644 index 00000000..e69de29b diff --git a/src/components/Album/Album.jsx b/src/components/Album/Album.jsx new file mode 100644 index 00000000..1a17f12a --- /dev/null +++ b/src/components/Album/Album.jsx @@ -0,0 +1,3 @@ +import { AlbumCover } from "./components/AlbumCover/AlbumCover" +import { AlbumName } from "./components/AlbumName/AlbumName" +import { ArtistName } from "./components/ArtistName/ArtistName" \ No newline at end of file diff --git a/src/components/AlbumCard.jsx b/src/components/AlbumCard.jsx new file mode 100644 index 00000000..d5231f7d --- /dev/null +++ b/src/components/AlbumCard.jsx @@ -0,0 +1,37 @@ +/* eslint-disable react/prop-types */ +import HoverMenu from "./Components/HoverMenu" //Import HoverMenu Component + + +const AlbumCard = ({ albumCover, albumName, artists, externalUrl }) => { + const [isHovered, setIsHovered] = useState(false); // State to track hover + + return ( +
setIsHovered(true)} // Show menu on hover + onMouseLeave={() => setIsHovered(false)} // Hide menu when not hovered + > + {albumName} +

{albumName}

+

+ {artists.map((artist, index) => ( + + + {artist.name} + + {index < artists.length - 1 ? ', ' : ''} + + ))} +

+ + Listen on Spotify + + + {/* Show HoverMenu when the album card is hovered */} + {isHovered && } +
+ ); +}; + +export default AlbumCard; + diff --git a/src/components/AlbumCover/AlbumCover.css b/src/components/AlbumCover/AlbumCover.css new file mode 100644 index 00000000..e69de29b diff --git a/src/components/AlbumCover/AlbumCover.jsx b/src/components/AlbumCover/AlbumCover.jsx new file mode 100644 index 00000000..e69de29b diff --git a/src/components/AlbumGrid.jsx b/src/components/AlbumGrid.jsx new file mode 100644 index 00000000..dea9d1e7 --- /dev/null +++ b/src/components/AlbumGrid.jsx @@ -0,0 +1,20 @@ +import albumData from "./data.json" //Data inport for the music URLs +import AlbumCard from "./Components/AlbumCard" + +const AlbumGrid = () => { + return ( +
+ {albumData.map((album) => ( + + ))} +
+ ); +}; + +export default AlbumGrid; diff --git a/src/components/AlbumName/AlbumName.css b/src/components/AlbumName/AlbumName.css new file mode 100644 index 00000000..e69de29b diff --git a/src/components/AlbumName/AlbumName.jsx b/src/components/AlbumName/AlbumName.jsx new file mode 100644 index 00000000..e69de29b diff --git a/src/components/ArtistName/ArtistName.css b/src/components/ArtistName/ArtistName.css new file mode 100644 index 00000000..e69de29b diff --git a/src/components/ArtistName/ArtistName.jsx b/src/components/ArtistName/ArtistName.jsx new file mode 100644 index 00000000..e69de29b diff --git a/src/components/HoverMenu.jsx b/src/components/HoverMenu.jsx new file mode 100644 index 00000000..8e775274 --- /dev/null +++ b/src/components/HoverMenu.jsx @@ -0,0 +1,18 @@ +//the Menu for Hover Effects, This component will contain the icons that appear when the album is hovered over. + +import playIcon from "./assets/icons/play.svg" +import heartIcon from "./assets/icons/heart.svg" +import dotIcon from "./assets/icons/dots.svg" + +const HoverMenu = () => { + + return ( +
+ Play + Favorite + More options +
+ ) +} + +export default HoverMenu; \ No newline at end of file From 5da0acb1be19494d296a0f857fbcecd9750165d3 Mon Sep 17 00:00:00 2001 From: Anna Date: Thu, 10 Oct 2024 12:42:35 +0200 Subject: [PATCH 02/17] test commit after error with component --- src/components/Album/Album.jsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/components/Album/Album.jsx b/src/components/Album/Album.jsx index 1a17f12a..b8f77bb5 100644 --- a/src/components/Album/Album.jsx +++ b/src/components/Album/Album.jsx @@ -1,3 +1,3 @@ -import { AlbumCover } from "./components/AlbumCover/AlbumCover" -import { AlbumName } from "./components/AlbumName/AlbumName" -import { ArtistName } from "./components/ArtistName/ArtistName" \ No newline at end of file +import { AlbumCover } from "../AlbumCover/AlbumCover" +import { AlbumName } from "../AlbumName/AlbumName" +import { ArtistName } from "../ArtistName/ArtistName" \ No newline at end of file From 3934a13402dc4bf344a16eed3a5e199da3e931a3 Mon Sep 17 00:00:00 2001 From: Anna Date: Thu, 10 Oct 2024 13:08:53 +0200 Subject: [PATCH 03/17] rearranged compontent structure --- src/{components => }/Album/Album.css | 0 src/Album/Album.jsx | 22 +++++++++++ .../AlbumCover/AlbumCover.css | 0 .../AlbumCover/AlbumCover.jsx | 0 src/{components => }/AlbumName/AlbumName.css | 0 src/{components => }/AlbumName/AlbumName.jsx | 0 src/App.jsx | 2 +- .../ArtistName/ArtistName.css | 0 .../ArtistName/ArtistName.jsx | 0 src/components/Album/Album.jsx | 3 -- src/components/AlbumCard.jsx | 37 ------------------- src/components/AlbumGrid.jsx | 20 ---------- src/components/HoverMenu.jsx | 18 --------- 13 files changed, 23 insertions(+), 79 deletions(-) rename src/{components => }/Album/Album.css (100%) create mode 100644 src/Album/Album.jsx rename src/{components => }/AlbumCover/AlbumCover.css (100%) rename src/{components => }/AlbumCover/AlbumCover.jsx (100%) rename src/{components => }/AlbumName/AlbumName.css (100%) rename src/{components => }/AlbumName/AlbumName.jsx (100%) rename src/{components => }/ArtistName/ArtistName.css (100%) rename src/{components => }/ArtistName/ArtistName.jsx (100%) delete mode 100644 src/components/Album/Album.jsx delete mode 100644 src/components/AlbumCard.jsx delete mode 100644 src/components/AlbumGrid.jsx delete mode 100644 src/components/HoverMenu.jsx diff --git a/src/components/Album/Album.css b/src/Album/Album.css similarity index 100% rename from src/components/Album/Album.css rename to src/Album/Album.css diff --git a/src/Album/Album.jsx b/src/Album/Album.jsx new file mode 100644 index 00000000..bf8b4c7c --- /dev/null +++ b/src/Album/Album.jsx @@ -0,0 +1,22 @@ +import { AlbumCover } from "../AlbumCover/AlbumCover" +import { AlbumName } from "../AlbumName/AlbumName" +import { ArtistName } from "../ArtistName/ArtistName" + +export const Album = ({ album }) => { + + return ( +
+ + + + +
+ + + + + ) + + + +} \ No newline at end of file diff --git a/src/components/AlbumCover/AlbumCover.css b/src/AlbumCover/AlbumCover.css similarity index 100% rename from src/components/AlbumCover/AlbumCover.css rename to src/AlbumCover/AlbumCover.css diff --git a/src/components/AlbumCover/AlbumCover.jsx b/src/AlbumCover/AlbumCover.jsx similarity index 100% rename from src/components/AlbumCover/AlbumCover.jsx rename to src/AlbumCover/AlbumCover.jsx diff --git a/src/components/AlbumName/AlbumName.css b/src/AlbumName/AlbumName.css similarity index 100% rename from src/components/AlbumName/AlbumName.css rename to src/AlbumName/AlbumName.css diff --git a/src/components/AlbumName/AlbumName.jsx b/src/AlbumName/AlbumName.jsx similarity index 100% rename from src/components/AlbumName/AlbumName.jsx rename to src/AlbumName/AlbumName.jsx diff --git a/src/App.jsx b/src/App.jsx index 1054021b..85da2638 100644 --- a/src/App.jsx +++ b/src/App.jsx @@ -1,5 +1,5 @@ import data from "./data.json"; -import { Album } from "./components/Album/Album" +import { Album } from "./Album/Album" console.log(data); diff --git a/src/components/ArtistName/ArtistName.css b/src/ArtistName/ArtistName.css similarity index 100% rename from src/components/ArtistName/ArtistName.css rename to src/ArtistName/ArtistName.css diff --git a/src/components/ArtistName/ArtistName.jsx b/src/ArtistName/ArtistName.jsx similarity index 100% rename from src/components/ArtistName/ArtistName.jsx rename to src/ArtistName/ArtistName.jsx diff --git a/src/components/Album/Album.jsx b/src/components/Album/Album.jsx deleted file mode 100644 index b8f77bb5..00000000 --- a/src/components/Album/Album.jsx +++ /dev/null @@ -1,3 +0,0 @@ -import { AlbumCover } from "../AlbumCover/AlbumCover" -import { AlbumName } from "../AlbumName/AlbumName" -import { ArtistName } from "../ArtistName/ArtistName" \ No newline at end of file diff --git a/src/components/AlbumCard.jsx b/src/components/AlbumCard.jsx deleted file mode 100644 index d5231f7d..00000000 --- a/src/components/AlbumCard.jsx +++ /dev/null @@ -1,37 +0,0 @@ -/* eslint-disable react/prop-types */ -import HoverMenu from "./Components/HoverMenu" //Import HoverMenu Component - - -const AlbumCard = ({ albumCover, albumName, artists, externalUrl }) => { - const [isHovered, setIsHovered] = useState(false); // State to track hover - - return ( -
setIsHovered(true)} // Show menu on hover - onMouseLeave={() => setIsHovered(false)} // Hide menu when not hovered - > - {albumName} -

{albumName}

-

- {artists.map((artist, index) => ( - - - {artist.name} - - {index < artists.length - 1 ? ', ' : ''} - - ))} -

- - Listen on Spotify - - - {/* Show HoverMenu when the album card is hovered */} - {isHovered && } -
- ); -}; - -export default AlbumCard; - diff --git a/src/components/AlbumGrid.jsx b/src/components/AlbumGrid.jsx deleted file mode 100644 index dea9d1e7..00000000 --- a/src/components/AlbumGrid.jsx +++ /dev/null @@ -1,20 +0,0 @@ -import albumData from "./data.json" //Data inport for the music URLs -import AlbumCard from "./Components/AlbumCard" - -const AlbumGrid = () => { - return ( -
- {albumData.map((album) => ( - - ))} -
- ); -}; - -export default AlbumGrid; diff --git a/src/components/HoverMenu.jsx b/src/components/HoverMenu.jsx deleted file mode 100644 index 8e775274..00000000 --- a/src/components/HoverMenu.jsx +++ /dev/null @@ -1,18 +0,0 @@ -//the Menu for Hover Effects, This component will contain the icons that appear when the album is hovered over. - -import playIcon from "./assets/icons/play.svg" -import heartIcon from "./assets/icons/heart.svg" -import dotIcon from "./assets/icons/dots.svg" - -const HoverMenu = () => { - - return ( -
- Play - Favorite - More options -
- ) -} - -export default HoverMenu; \ No newline at end of file From 3d9a51a1c0536c42c57d606e02a4ad48e7af1adb Mon Sep 17 00:00:00 2001 From: Anna Date: Thu, 10 Oct 2024 14:50:14 +0200 Subject: [PATCH 04/17] restructuring folders and components --- src/Album/Album.jsx | 22 ------------------- src/AlbumCover/AlbumCover.jsx | 0 src/App.jsx | 3 ++- src/{Album => components}/Album.css | 0 src/components/Album.jsx | 15 +++++++++++++ src/{AlbumName => components}/AlbumName.css | 0 src/{AlbumName => components}/AlbumName.jsx | 0 src/{ArtistName => components}/ArtistName.css | 0 src/{ArtistName => components}/ArtistName.jsx | 0 .../CoverImage.css} | 0 src/components/CoverImage.jsx | 10 +++++++++ 11 files changed, 27 insertions(+), 23 deletions(-) delete mode 100644 src/Album/Album.jsx delete mode 100644 src/AlbumCover/AlbumCover.jsx rename src/{Album => components}/Album.css (100%) create mode 100644 src/components/Album.jsx rename src/{AlbumName => components}/AlbumName.css (100%) rename src/{AlbumName => components}/AlbumName.jsx (100%) rename src/{ArtistName => components}/ArtistName.css (100%) rename src/{ArtistName => components}/ArtistName.jsx (100%) rename src/{AlbumCover/AlbumCover.css => components/CoverImage.css} (100%) create mode 100644 src/components/CoverImage.jsx diff --git a/src/Album/Album.jsx b/src/Album/Album.jsx deleted file mode 100644 index bf8b4c7c..00000000 --- a/src/Album/Album.jsx +++ /dev/null @@ -1,22 +0,0 @@ -import { AlbumCover } from "../AlbumCover/AlbumCover" -import { AlbumName } from "../AlbumName/AlbumName" -import { ArtistName } from "../ArtistName/ArtistName" - -export const Album = ({ album }) => { - - return ( -
- - - - -
- - - - - ) - - - -} \ No newline at end of file diff --git a/src/AlbumCover/AlbumCover.jsx b/src/AlbumCover/AlbumCover.jsx deleted file mode 100644 index e69de29b..00000000 diff --git a/src/App.jsx b/src/App.jsx index 85da2638..755449e7 100644 --- a/src/App.jsx +++ b/src/App.jsx @@ -1,8 +1,9 @@ import data from "./data.json"; -import { Album } from "./Album/Album" +import { Album } from "./Album/Album.jsx" console.log(data); export const App = () => { return
Find me in src/app.jsx!
; + }; diff --git a/src/Album/Album.css b/src/components/Album.css similarity index 100% rename from src/Album/Album.css rename to src/components/Album.css diff --git a/src/components/Album.jsx b/src/components/Album.jsx new file mode 100644 index 00000000..25332c5e --- /dev/null +++ b/src/components/Album.jsx @@ -0,0 +1,15 @@ +/* eslint-disable react/prop-types */ + +import { CoverImage } from "../CoverImage/CoverImage.jsx" +import { AlbumName } from "../AlbumName/AlbumName.jsx" +import { ArtistName } from "../ArtistName/ArtistName.jsx" + +export const Album = ({ name, albumUrl, artists, image }) => { + return ( +
+ + + +
+ ); +}; \ No newline at end of file diff --git a/src/AlbumName/AlbumName.css b/src/components/AlbumName.css similarity index 100% rename from src/AlbumName/AlbumName.css rename to src/components/AlbumName.css diff --git a/src/AlbumName/AlbumName.jsx b/src/components/AlbumName.jsx similarity index 100% rename from src/AlbumName/AlbumName.jsx rename to src/components/AlbumName.jsx diff --git a/src/ArtistName/ArtistName.css b/src/components/ArtistName.css similarity index 100% rename from src/ArtistName/ArtistName.css rename to src/components/ArtistName.css diff --git a/src/ArtistName/ArtistName.jsx b/src/components/ArtistName.jsx similarity index 100% rename from src/ArtistName/ArtistName.jsx rename to src/components/ArtistName.jsx diff --git a/src/AlbumCover/AlbumCover.css b/src/components/CoverImage.css similarity index 100% rename from src/AlbumCover/AlbumCover.css rename to src/components/CoverImage.css diff --git a/src/components/CoverImage.jsx b/src/components/CoverImage.jsx new file mode 100644 index 00000000..9fb8fb60 --- /dev/null +++ b/src/components/CoverImage.jsx @@ -0,0 +1,10 @@ + +export const AlbumCover = ({ albumcover }) => { + + + return ( + + + ) + +} \ No newline at end of file From ab3ef2f17b4961d938abca3c668462726dfa5e3c Mon Sep 17 00:00:00 2001 From: Anna Date: Thu, 10 Oct 2024 16:52:24 +0200 Subject: [PATCH 05/17] imported and exported data for each component and added css for each component --- src/App.jsx | 24 +++++++++++++++---- src/components/Album.css | 33 +++++++++++++++++++++++++ src/components/Album.jsx | 10 ++++---- src/components/AlbumName.css | 17 +++++++++++++ src/components/AlbumName.jsx | 11 +++++++++ src/components/ArtistName.css | 16 +++++++++++++ src/components/ArtistName.jsx | 16 +++++++++++++ src/components/CoverImage.css | 45 +++++++++++++++++++++++++++++++++++ src/components/CoverImage.jsx | 16 +++++++++++-- src/index.css | 3 ++- 10 files changed, 179 insertions(+), 12 deletions(-) diff --git a/src/App.jsx b/src/App.jsx index 755449e7..56369309 100644 --- a/src/App.jsx +++ b/src/App.jsx @@ -1,9 +1,25 @@ import data from "./data.json"; -import { Album } from "./Album/Album.jsx" +import { Album } from "./components/Album.jsx" console.log(data); -export const App = () => { - return
Find me in src/app.jsx!
; -}; +export const App = () => { + const { albums } = data; + const renderAlbums = albums.items.map( + ({ id, name, external_urls, artists, images }) => ( + + ) + ); + return ( +
+
{renderAlbums}
+
+ ) +}; \ No newline at end of file diff --git a/src/components/Album.css b/src/components/Album.css index e69de29b..7138d44d 100644 --- a/src/components/Album.css +++ b/src/components/Album.css @@ -0,0 +1,33 @@ +.album { + display: flex; + flex-direction: column; + align-items: center; + padding: 20px; + transition: transform 0.3s ease; + position: relative; +} + +.album:hover { + transform: scale(1.05); +} + +.albumSection { + display: grid; + gap: 20px; + grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); + /* 4 columns on large screens */ +} + +/* Media query for tablets (2 albums per row) */ +@media (max-width: 768px) { + .albumSection { + grid-template-columns: repeat(2, 1fr); + } +} + +/* Media query for mobile (1 album per row) */ +@media (max-width: 480px) { + .albumSection { + grid-template-columns: 1fr; + } +} \ No newline at end of file diff --git a/src/components/Album.jsx b/src/components/Album.jsx index 25332c5e..fbe7191b 100644 --- a/src/components/Album.jsx +++ b/src/components/Album.jsx @@ -1,8 +1,8 @@ /* eslint-disable react/prop-types */ - -import { CoverImage } from "../CoverImage/CoverImage.jsx" -import { AlbumName } from "../AlbumName/AlbumName.jsx" -import { ArtistName } from "../ArtistName/ArtistName.jsx" +import "./Album.css" +import { CoverImage } from "./CoverImage.jsx" +import { AlbumName } from "./AlbumName.jsx" +import { ArtistName } from "./ArtistName.jsx" export const Album = ({ name, albumUrl, artists, image }) => { return ( @@ -12,4 +12,4 @@ export const Album = ({ name, albumUrl, artists, image }) => { ); -}; \ No newline at end of file +} \ No newline at end of file diff --git a/src/components/AlbumName.css b/src/components/AlbumName.css index e69de29b..3203a765 100644 --- a/src/components/AlbumName.css +++ b/src/components/AlbumName.css @@ -0,0 +1,17 @@ +.albumName { + font-size: 14px; + font-family: Helvetica, Arial, sans-serif; + color: #fff; + text-align: center; + margin-top: 10px; +} + +.albumName a { + text-decoration: none; + color: #fff; + transition: color 0.3s ease; +} + +.albumName a:hover { + color: #a0a0a0; +} \ No newline at end of file diff --git a/src/components/AlbumName.jsx b/src/components/AlbumName.jsx index e69de29b..5a8c1fd6 100644 --- a/src/components/AlbumName.jsx +++ b/src/components/AlbumName.jsx @@ -0,0 +1,11 @@ + +import "./AlbumName.css" + +export const AlbumName = ({ name, albumUrl }) => { + return ( +

+ + {name} +

+ ); +}; \ No newline at end of file diff --git a/src/components/ArtistName.css b/src/components/ArtistName.css index e69de29b..464a3c7f 100644 --- a/src/components/ArtistName.css +++ b/src/components/ArtistName.css @@ -0,0 +1,16 @@ +.artistName p { + font-size: 14px; + font-family: Helvetica, Arial, sans-serif; + color: #a0a0a0; + text-align: center; +} + +.artistName a { + text-decoration: none; + color: #a0a0a0; + transition: color 0.3s ease; +} + +.artistName a:hover { + color: #fff; +} \ No newline at end of file diff --git a/src/components/ArtistName.jsx b/src/components/ArtistName.jsx index e69de29b..3aa35e57 100644 --- a/src/components/ArtistName.jsx +++ b/src/components/ArtistName.jsx @@ -0,0 +1,16 @@ +/* eslint-disable react/prop-types */ +import "./ArtistName.css" + +export const ArtistName = ({ artists }) => { + return ( +
+ {artists.map(({ id, name, external_urls }) => ( +

+ + {name} + +

+ ))} +
+ ); +}; \ No newline at end of file diff --git a/src/components/CoverImage.css b/src/components/CoverImage.css index e69de29b..db668fc7 100644 --- a/src/components/CoverImage.css +++ b/src/components/CoverImage.css @@ -0,0 +1,45 @@ +.coverImage { + position: relative; + width: 100%; + overflow: hidden; +} + +.albumCoverImage { + width: 100%; + height: auto; + display: block; + transition: filter 0.3s ease; +} + +.coverImage:hover .albumCoverImage { + filter: brightness(50%); +} + +.icons { + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + display: flex; + justify-content: center; + align-items: center; + gap: 15px; + opacity: 0; + transition: opacity 0.3s ease; +} + +.coverImage:hover .icons { + opacity: 1; +} + +.icon { + width: 24px; + height: 24px; + cursor: pointer; + transition: transform 0.3s ease; +} + +.play.icon:hover { + transform: scale(1.2); +} \ No newline at end of file diff --git a/src/components/CoverImage.jsx b/src/components/CoverImage.jsx index 9fb8fb60..f4a38c88 100644 --- a/src/components/CoverImage.jsx +++ b/src/components/CoverImage.jsx @@ -1,10 +1,22 @@ +/* eslint-disable react/prop-types */ +import "./CoverImage.css" -export const AlbumCover = ({ albumcover }) => { +import dots from "../assets/icons/dots.svg" +import heart from "../assets/icons/heart.svg" +import playIcon from "../assets/icons/play.svg" +export const CoverImage = ({ image }) => { return ( +
+ Album cover image +
+ Heart + Play + dots +
+
- ) } \ No newline at end of file diff --git a/src/index.css b/src/index.css index 4558f538..b77dcc74 100644 --- a/src/index.css +++ b/src/index.css @@ -5,9 +5,10 @@ sans-serif; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; + background-color: #171717; } code { font-family: source-code-pro, Menlo, Monaco, Consolas, "Courier New", monospace; -} +} \ No newline at end of file From 9151a479a65a3b33841356dbb8ecdfffb9b37a6c Mon Sep 17 00:00:00 2001 From: Anna Date: Thu, 10 Oct 2024 21:42:51 +0200 Subject: [PATCH 06/17] added media queries and added hover effects --- src/App.jsx | 2 +- src/components/Album.css | 15 +++++++-------- src/components/AlbumName.css | 4 ++-- src/components/AlbumName.jsx | 1 + src/components/CoverImage.css | 10 ++++++++-- 5 files changed, 19 insertions(+), 13 deletions(-) diff --git a/src/App.jsx b/src/App.jsx index 56369309..bc982801 100644 --- a/src/App.jsx +++ b/src/App.jsx @@ -1,5 +1,5 @@ import data from "./data.json"; -import { Album } from "./components/Album.jsx" +import { Album } from "./components/Album.jsx"; console.log(data); diff --git a/src/components/Album.css b/src/components/Album.css index 7138d44d..3bc0a1f9 100644 --- a/src/components/Album.css +++ b/src/components/Album.css @@ -7,24 +7,23 @@ position: relative; } -.album:hover { - transform: scale(1.05); -} - .albumSection { display: grid; - gap: 20px; - grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); - /* 4 columns on large screens */ + gap: 10px; + grid-template-columns: repeat(4, 1fr); } + +/* ------------------------------------Media Queries--------------------------------------- */ + /* Media query for tablets (2 albums per row) */ -@media (max-width: 768px) { +@media (max-width: 1024px) { .albumSection { grid-template-columns: repeat(2, 1fr); } } + /* Media query for mobile (1 album per row) */ @media (max-width: 480px) { .albumSection { diff --git a/src/components/AlbumName.css b/src/components/AlbumName.css index 3203a765..65852d96 100644 --- a/src/components/AlbumName.css +++ b/src/components/AlbumName.css @@ -1,7 +1,7 @@ .albumName { font-size: 14px; - font-family: Helvetica, Arial, sans-serif; - color: #fff; + font-family: Helvetica; + color: #ffffff; text-align: center; margin-top: 10px; } diff --git a/src/components/AlbumName.jsx b/src/components/AlbumName.jsx index 5a8c1fd6..408ea4a4 100644 --- a/src/components/AlbumName.jsx +++ b/src/components/AlbumName.jsx @@ -1,3 +1,4 @@ +/* eslint-disable react/prop-types */ import "./AlbumName.css" diff --git a/src/components/CoverImage.css b/src/components/CoverImage.css index db668fc7..be10a3c4 100644 --- a/src/components/CoverImage.css +++ b/src/components/CoverImage.css @@ -27,6 +27,7 @@ gap: 15px; opacity: 0; transition: opacity 0.3s ease; + color: white; } .coverImage:hover .icons { @@ -34,12 +35,17 @@ } .icon { - width: 24px; - height: 24px; + width: 30px; + height: 30px; cursor: pointer; transition: transform 0.3s ease; } .play.icon:hover { transform: scale(1.2); +} + +.play.icon { + width: 60px; + height: 60px; } \ No newline at end of file From fa5f5a1172b46aec7b99b441e558cee101520790 Mon Sep 17 00:00:00 2001 From: Anna Date: Thu, 10 Oct 2024 23:31:00 +0200 Subject: [PATCH 07/17] added condition for displaying a comma, changed color of svg icons and changed styling in the artistname.css file --- src/App.jsx | 7 ++++--- src/assets/icons/dots.svg | 2 +- src/assets/icons/heart.svg | 2 +- src/assets/icons/play.svg | 2 +- src/assets/music-releases.svg | 18 ------------------ src/components/AlbumName.css | 5 +++-- src/components/ArtistName.css | 12 +++++++++--- src/components/ArtistName.jsx | 10 ++++++---- src/components/CoverImage.css | 2 +- src/index.css | 11 ++--------- 10 files changed, 28 insertions(+), 43 deletions(-) delete mode 100644 src/assets/music-releases.svg diff --git a/src/App.jsx b/src/App.jsx index bc982801..a44ceef7 100644 --- a/src/App.jsx +++ b/src/App.jsx @@ -1,8 +1,6 @@ import data from "./data.json"; import { Album } from "./components/Album.jsx"; -console.log(data); - export const App = () => { const { albums } = data; @@ -22,4 +20,7 @@ export const App = () => {
{renderAlbums}
) -}; \ No newline at end of file +}; + + + diff --git a/src/assets/icons/dots.svg b/src/assets/icons/dots.svg index fe8ef52d..3a3b50cf 100644 --- a/src/assets/icons/dots.svg +++ b/src/assets/icons/dots.svg @@ -1 +1 @@ - + diff --git a/src/assets/icons/heart.svg b/src/assets/icons/heart.svg index b8024025..e5b6732d 100644 --- a/src/assets/icons/heart.svg +++ b/src/assets/icons/heart.svg @@ -1 +1 @@ - + diff --git a/src/assets/icons/play.svg b/src/assets/icons/play.svg index fba0c84f..16b8be48 100644 --- a/src/assets/icons/play.svg +++ b/src/assets/icons/play.svg @@ -1 +1 @@ - + diff --git a/src/assets/music-releases.svg b/src/assets/music-releases.svg deleted file mode 100644 index 1c7fd002..00000000 --- a/src/assets/music-releases.svg +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - - - - - - diff --git a/src/components/AlbumName.css b/src/components/AlbumName.css index 65852d96..baf6b258 100644 --- a/src/components/AlbumName.css +++ b/src/components/AlbumName.css @@ -8,10 +8,11 @@ .albumName a { text-decoration: none; - color: #fff; + color: #ffffff; transition: color 0.3s ease; } .albumName a:hover { - color: #a0a0a0; + color: #ffffff; + text-decoration: underline; } \ No newline at end of file diff --git a/src/components/ArtistName.css b/src/components/ArtistName.css index 464a3c7f..18ab3c18 100644 --- a/src/components/ArtistName.css +++ b/src/components/ArtistName.css @@ -1,16 +1,22 @@ -.artistName p { +.artistName { + text-align: center; +} + +.artistName span { font-size: 14px; - font-family: Helvetica, Arial, sans-serif; + font-family: Helvetica; color: #a0a0a0; - text-align: center; } .artistName a { text-decoration: none; color: #a0a0a0; transition: color 0.3s ease; + display: inline; + /* Ensures artist names are on the same line */ } .artistName a:hover { color: #fff; + text-decoration: underline; } \ No newline at end of file diff --git a/src/components/ArtistName.jsx b/src/components/ArtistName.jsx index 3aa35e57..289e79db 100644 --- a/src/components/ArtistName.jsx +++ b/src/components/ArtistName.jsx @@ -1,15 +1,17 @@ /* eslint-disable react/prop-types */ -import "./ArtistName.css" + +import "./ArtistName.css"; export const ArtistName = ({ artists }) => { return (
- {artists.map(({ id, name, external_urls }) => ( -

+ {artists.map(({ id, name, external_urls }, index) => ( + {name} -

+ {index < artists.length - 1 && ", "} {/* Add comma if not last artist */} + ))}
); diff --git a/src/components/CoverImage.css b/src/components/CoverImage.css index be10a3c4..a39c18a9 100644 --- a/src/components/CoverImage.css +++ b/src/components/CoverImage.css @@ -27,7 +27,7 @@ gap: 15px; opacity: 0; transition: opacity 0.3s ease; - color: white; + fill: #ffffff; } .coverImage:hover .icons { diff --git a/src/index.css b/src/index.css index b77dcc74..2739eb8c 100644 --- a/src/index.css +++ b/src/index.css @@ -1,14 +1,7 @@ :root { margin: 0; - font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", - "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", - sans-serif; + font-family: Helvetica, Arial, sans-serif; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; - background-color: #171717; -} - -code { - font-family: source-code-pro, Menlo, Monaco, Consolas, "Courier New", - monospace; + background-color: #181818; } \ No newline at end of file From aff2009ad68cf9a05a790fcf4a6b9c58cbc47d9a Mon Sep 17 00:00:00 2001 From: Anna Date: Fri, 11 Oct 2024 22:35:51 +0200 Subject: [PATCH 08/17] updated readme and added a header --- README.md | 28 +++++----------------------- index.html | 2 +- src/App.jsx | 8 +++++--- src/components/Header.css | 7 +++++++ src/components/Header.jsx | 16 ++++++++++++++++ 5 files changed, 34 insertions(+), 27 deletions(-) create mode 100644 src/components/Header.css create mode 100644 src/components/Header.jsx diff --git a/README.md b/README.md index 2cc0b1ae..94570220 100644 --- a/README.md +++ b/README.md @@ -1,32 +1,14 @@ -

- - Project Banner Image - -

- # Music Releases -Replace this readme with your own information about your project. - -Start by briefly describing the assignment in a sentence or two. Keep it short and to the point. - -## Getting Started with the Project - -### Dependency Installation & Startup Development Server - -Once cloned, navigate to the project's root directory and this project uses npm (Node Package Manager) to manage its dependencies. +This week we started learning about React. Our first in React was to build a Spotify mockup page. ### The Problem -Describe how you approached to problem, and what tools and techniques you used to solve it. How did you plan? What technologies did you use? If you had more time, what would be next? - -### View it live +I started by sketching out on paper how I wanted the structure of the components to be, I changed the structure a couple of times. I wanted it to be as simple as possible so It was easy to follow and understand. I finally choose to divide the components based on the different objects and different features that we should cover and items that belonged to each component. Like for example the icons and hoover effects I imported and added to the the CoverImage files since the icons would show on the image when hoovered. Then I moved on to importing and exporting components and after that moved on to the styling. It was tricky with the styling of each component but also very easy to follow in the end, I looked at my older projects a lot and of course googled and asked chatGPT. At first I forgot to import the CSS files to and could not understand why none of the changes I made was reflected in the browser. -Every project should be deployed somewhere. Be sure to include the link to the deployed project so that the viewer can click around and see what it's all about. +If I had more time I would go for the stretch goals -## Instructions +### View it live +https://myspotifymockup.netlify.app/ - - See instructions of this project - diff --git a/index.html b/index.html index 01ebc171..04c2c45d 100644 --- a/index.html +++ b/index.html @@ -5,7 +5,7 @@ - Anna's Spotify Mockup + SoundScape- My Spotify Mockup diff --git a/src/App.jsx b/src/App.jsx index a44ceef7..5c75763c 100644 --- a/src/App.jsx +++ b/src/App.jsx @@ -1,5 +1,6 @@ import data from "./data.json"; import { Album } from "./components/Album.jsx"; +import { Header } from "./components/Header.jsx"; export const App = () => { @@ -16,10 +17,11 @@ export const App = () => { ) ); return ( -
+ <> +
{renderAlbums}
-
- ) + + ); }; diff --git a/src/components/Header.css b/src/components/Header.css new file mode 100644 index 00000000..6d85dc95 --- /dev/null +++ b/src/components/Header.css @@ -0,0 +1,7 @@ +.Header { + top: 0; + left: 0; + width: 100%; + color: #ffffff; + text-align: center; +} \ No newline at end of file diff --git a/src/components/Header.jsx b/src/components/Header.jsx new file mode 100644 index 00000000..9bd70355 --- /dev/null +++ b/src/components/Header.jsx @@ -0,0 +1,16 @@ +import "./Header.css" + +export const Header = () => { + return ( + <> + < header className="Header"> +

SoundScape

+

Find your favorite music.

+ + + ); +}; + + + + From 56851eaed89fa3327292bf053e6ddfc62ba16855 Mon Sep 17 00:00:00 2001 From: Anna Date: Fri, 11 Oct 2024 22:39:28 +0200 Subject: [PATCH 09/17] readme file update --- README.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 94570220..85272971 100644 --- a/README.md +++ b/README.md @@ -2,12 +2,13 @@ This week we started learning about React. Our first in React was to build a Spotify mockup page. - ### The Problem -I started by sketching out on paper how I wanted the structure of the components to be, I changed the structure a couple of times. I wanted it to be as simple as possible so It was easy to follow and understand. I finally choose to divide the components based on the different objects and different features that we should cover and items that belonged to each component. Like for example the icons and hoover effects I imported and added to the the CoverImage files since the icons would show on the image when hoovered. Then I moved on to importing and exporting components and after that moved on to the styling. It was tricky with the styling of each component but also very easy to follow in the end, I looked at my older projects a lot and of course googled and asked chatGPT. At first I forgot to import the CSS files to and could not understand why none of the changes I made was reflected in the browser. +I started by sketching out on paper how I wanted the structure of the components to be, I changed the structure a couple of times. I wanted it to be as simple as possible so It was easy to follow and understand. I finally choose to divide the components based on the different objects and different features that we should cover and items that belonged to each component. Like for example the icons and hoover effects I imported and added to the the CoverImage files since the icons would show on the images when hoovered. + +Then I moved on to importing and exporting components and after that moved on to the styling. It was tricky with the styling of each component but also very easy to follow in the end. I looked at my older projects a lot and of course googled and asked chatGPT. At first I forgot to import the CSS files to and could not understand why none of the changes I made was reflected in the browser. -If I had more time I would go for the stretch goals +If I had more time I would go for the stretch goals and add more hoover effects, perhaps created a logotype as well. ### View it live https://myspotifymockup.netlify.app/ From b51e1bced401327e73199ce709294425e2a4f98d Mon Sep 17 00:00:00 2001 From: Anna Date: Fri, 11 Oct 2024 22:40:12 +0200 Subject: [PATCH 10/17] Extra update readme --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 85272971..b37528f1 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Music Releases -This week we started learning about React. Our first in React was to build a Spotify mockup page. +This week we started learning about React. Our first project in React was to build a Spotify mockup page. ### The Problem From 276e5b9a750b31d9aee9a1b662eeac577dd7c42d Mon Sep 17 00:00:00 2001 From: Anna Date: Sat, 12 Oct 2024 11:49:45 +0200 Subject: [PATCH 11/17] added a header logotype and changed h1 and p texts --- src/assets/logo.png | Bin 0 -> 73713 bytes src/components/Header.css | 19 +++++++++++++++++++ src/components/Header.jsx | 5 +++-- src/index.css | 2 ++ 4 files changed, 24 insertions(+), 2 deletions(-) create mode 100644 src/assets/logo.png diff --git a/src/assets/logo.png b/src/assets/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..4fd4301ac06b011b0c4719e08bf3855d84685a19 GIT binary patch literal 73713 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 R>Sh1{002ovPDHLkV1im_dE5X1 literal 0 HcmV?d00001 diff --git a/src/components/Header.css b/src/components/Header.css index 6d85dc95..72550cd4 100644 --- a/src/components/Header.css +++ b/src/components/Header.css @@ -4,4 +4,23 @@ width: 100%; color: #ffffff; text-align: center; + box-sizing: border-box; + /* Include padding in the element's total width */ +} + +img.logo { + width: 180px; + height: auto; + display: block; + margin: 0 auto; +} + +h1 { + font-size: 40px; + margin: 10px 0px; +} + +p { + font-size: 20px; + margin: 10px 0px; } \ No newline at end of file diff --git a/src/components/Header.jsx b/src/components/Header.jsx index 9bd70355..3c02f245 100644 --- a/src/components/Header.jsx +++ b/src/components/Header.jsx @@ -1,11 +1,12 @@ import "./Header.css" +import logo from "../assets/logo.png" export const Header = () => { return ( <> < header className="Header"> -

SoundScape

-

Find your favorite music.

+

logoSoundScape

+

Discover new music.

); diff --git a/src/index.css b/src/index.css index 2739eb8c..9c06c5f7 100644 --- a/src/index.css +++ b/src/index.css @@ -1,5 +1,7 @@ :root { margin: 0; + padding: 0; + box-sizing: border-box; font-family: Helvetica, Arial, sans-serif; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; From 7e74db1235839f0181d26330ae46f7fa8264f316 Mon Sep 17 00:00:00 2001 From: Anna Date: Sat, 12 Oct 2024 12:08:03 +0200 Subject: [PATCH 12/17] Created a footer and updated readme --- README.md | 2 +- src/App.jsx | 2 ++ src/components/Footer.css | 14 ++++++++++++++ src/components/Footer.jsx | 11 +++++++++++ 4 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 src/components/Footer.css create mode 100644 src/components/Footer.jsx diff --git a/README.md b/README.md index b37528f1..a144f75d 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ I started by sketching out on paper how I wanted the structure of the components Then I moved on to importing and exporting components and after that moved on to the styling. It was tricky with the styling of each component but also very easy to follow in the end. I looked at my older projects a lot and of course googled and asked chatGPT. At first I forgot to import the CSS files to and could not understand why none of the changes I made was reflected in the browser. -If I had more time I would go for the stretch goals and add more hoover effects, perhaps created a logotype as well. +If I had more time I would go for the stretch goals and add more hoover effects. ### View it live https://myspotifymockup.netlify.app/ diff --git a/src/App.jsx b/src/App.jsx index 5c75763c..7c9800fe 100644 --- a/src/App.jsx +++ b/src/App.jsx @@ -1,6 +1,7 @@ import data from "./data.json"; import { Album } from "./components/Album.jsx"; import { Header } from "./components/Header.jsx"; +import { Footer } from "./components/Footer.jsx"; export const App = () => { @@ -20,6 +21,7 @@ export const App = () => { <>
{renderAlbums}
+
); }; diff --git a/src/components/Footer.css b/src/components/Footer.css new file mode 100644 index 00000000..8916c946 --- /dev/null +++ b/src/components/Footer.css @@ -0,0 +1,14 @@ +.Footer { + top: 0; + left: 0; + width: 100%; + color: #ffffff; + text-align: center; + box-sizing: border-box; + /* Include padding in the element's total width */ +} + +footer p { + font-size: 15px; + margin: 30px 0px; +} \ No newline at end of file diff --git a/src/components/Footer.jsx b/src/components/Footer.jsx new file mode 100644 index 00000000..7177ee2f --- /dev/null +++ b/src/components/Footer.jsx @@ -0,0 +1,11 @@ +import "./Footer.css" + +export const Footer = () => { + return ( + <> + < footer className="Footer"> +

Created by Anna Hansen for SoundScape.Inc

+
+ + ); +}; From 596bd5c44f6eb26e99b03a2dc11f6b0ec670b920 Mon Sep 17 00:00:00 2001 From: Anna Date: Sat, 12 Oct 2024 12:55:38 +0200 Subject: [PATCH 13/17] fixed header and footer margins and other small CSS fixes --- src/App.jsx | 1 - src/components/Footer.css | 2 +- src/components/Footer.jsx | 4 ++-- src/components/Header.jsx | 1 - src/index.css | 1 + 5 files changed, 4 insertions(+), 5 deletions(-) diff --git a/src/App.jsx b/src/App.jsx index 7c9800fe..32f77df1 100644 --- a/src/App.jsx +++ b/src/App.jsx @@ -27,4 +27,3 @@ export const App = () => { }; - diff --git a/src/components/Footer.css b/src/components/Footer.css index 8916c946..ca0601ae 100644 --- a/src/components/Footer.css +++ b/src/components/Footer.css @@ -10,5 +10,5 @@ footer p { font-size: 15px; - margin: 30px 0px; + margin: 30px 0px 20px; } \ No newline at end of file diff --git a/src/components/Footer.jsx b/src/components/Footer.jsx index 7177ee2f..1477a3ce 100644 --- a/src/components/Footer.jsx +++ b/src/components/Footer.jsx @@ -4,8 +4,8 @@ export const Footer = () => { return ( <> < footer className="Footer"> -

Created by Anna Hansen for SoundScape.Inc

+

Created by Anna Hansen, Technigo 2024

); -}; +}; \ No newline at end of file diff --git a/src/components/Header.jsx b/src/components/Header.jsx index 3c02f245..426c3957 100644 --- a/src/components/Header.jsx +++ b/src/components/Header.jsx @@ -14,4 +14,3 @@ export const Header = () => { - diff --git a/src/index.css b/src/index.css index 9c06c5f7..7b742cab 100644 --- a/src/index.css +++ b/src/index.css @@ -6,4 +6,5 @@ -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; background-color: #181818; + overflow-x: hidden; } \ No newline at end of file From bf6be8f50b6a5ac7d9da891421f8bfcfa532dad5 Mon Sep 17 00:00:00 2001 From: Anna Date: Sat, 12 Oct 2024 15:57:28 +0200 Subject: [PATCH 14/17] changed CSS on albumName and artistName and changed p text in the header --- src/components/Album.css | 4 ++-- src/components/AlbumName.css | 5 +++-- src/components/ArtistName.css | 5 +---- src/components/Footer.css | 3 ++- src/components/Header.css | 3 ++- src/components/Header.jsx | 2 +- 6 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/components/Album.css b/src/components/Album.css index 3bc0a1f9..33708ef7 100644 --- a/src/components/Album.css +++ b/src/components/Album.css @@ -1,8 +1,8 @@ .album { display: flex; flex-direction: column; - align-items: center; - padding: 20px; + align-items: flex-start; + padding: 15px; transition: transform 0.3s ease; position: relative; } diff --git a/src/components/AlbumName.css b/src/components/AlbumName.css index baf6b258..77ea3ebc 100644 --- a/src/components/AlbumName.css +++ b/src/components/AlbumName.css @@ -1,15 +1,16 @@ .albumName { font-size: 14px; + font-weight: bolder; font-family: Helvetica; color: #ffffff; - text-align: center; - margin-top: 10px; + margin: 10px 0px 5px; } .albumName a { text-decoration: none; color: #ffffff; transition: color 0.3s ease; + text-align: left; } .albumName a:hover { diff --git a/src/components/ArtistName.css b/src/components/ArtistName.css index 18ab3c18..ddd8e9d0 100644 --- a/src/components/ArtistName.css +++ b/src/components/ArtistName.css @@ -1,7 +1,3 @@ -.artistName { - text-align: center; -} - .artistName span { font-size: 14px; font-family: Helvetica; @@ -13,6 +9,7 @@ color: #a0a0a0; transition: color 0.3s ease; display: inline; + text-align: left; /* Ensures artist names are on the same line */ } diff --git a/src/components/Footer.css b/src/components/Footer.css index ca0601ae..1efdbdaf 100644 --- a/src/components/Footer.css +++ b/src/components/Footer.css @@ -10,5 +10,6 @@ footer p { font-size: 15px; - margin: 30px 0px 20px; + font-weight: 400; + margin: 30px 0px 30px; } \ No newline at end of file diff --git a/src/components/Header.css b/src/components/Header.css index 72550cd4..57e69619 100644 --- a/src/components/Header.css +++ b/src/components/Header.css @@ -20,7 +20,8 @@ h1 { margin: 10px 0px; } -p { +header p { font-size: 20px; margin: 10px 0px; + padding-bottom: 20px; } \ No newline at end of file diff --git a/src/components/Header.jsx b/src/components/Header.jsx index 426c3957..a8eae8b8 100644 --- a/src/components/Header.jsx +++ b/src/components/Header.jsx @@ -6,7 +6,7 @@ export const Header = () => { <> < header className="Header">

logoSoundScape

-

Discover new music.

+

Explore trending artists and albums

); From 34feb5f5dd20c96b9a11cc9d04c6d39b9d82d854 Mon Sep 17 00:00:00 2001 From: Anna Date: Sat, 12 Oct 2024 20:20:40 +0200 Subject: [PATCH 15/17] changed logo width and h1 font size in header --- src/components/Footer.css | 3 ++- src/components/Header.css | 8 ++++---- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/components/Footer.css b/src/components/Footer.css index 1efdbdaf..1975993c 100644 --- a/src/components/Footer.css +++ b/src/components/Footer.css @@ -2,7 +2,8 @@ top: 0; left: 0; width: 100%; - color: #ffffff; + color: #a0a0a0; + font-weight: 300; text-align: center; box-sizing: border-box; /* Include padding in the element's total width */ diff --git a/src/components/Header.css b/src/components/Header.css index 57e69619..54d07428 100644 --- a/src/components/Header.css +++ b/src/components/Header.css @@ -9,19 +9,19 @@ } img.logo { - width: 180px; + width: 100px; height: auto; display: block; - margin: 0 auto; + margin: 15px auto; } h1 { - font-size: 40px; + font-size: 35px; margin: 10px 0px; } header p { font-size: 20px; margin: 10px 0px; - padding-bottom: 20px; + padding-bottom: 15px; } \ No newline at end of file From 1e70546d7ab396e1b937426db2b820be5b0d886d Mon Sep 17 00:00:00 2001 From: Anna Date: Sat, 12 Oct 2024 20:21:50 +0200 Subject: [PATCH 16/17] read me update --- README.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/README.md b/README.md index a144f75d..d6c680c3 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,10 @@ # Music Releases - This week we started learning about React. Our first project in React was to build a Spotify mockup page. ### The Problem - I started by sketching out on paper how I wanted the structure of the components to be, I changed the structure a couple of times. I wanted it to be as simple as possible so It was easy to follow and understand. I finally choose to divide the components based on the different objects and different features that we should cover and items that belonged to each component. Like for example the icons and hoover effects I imported and added to the the CoverImage files since the icons would show on the images when hoovered. -Then I moved on to importing and exporting components and after that moved on to the styling. It was tricky with the styling of each component but also very easy to follow in the end. I looked at my older projects a lot and of course googled and asked chatGPT. At first I forgot to import the CSS files to and could not understand why none of the changes I made was reflected in the browser. +Then I moved on to importing and exporting components and after that moved on to the styling. It was tricky with the styling of each component but also very easy to follow in the end. I looked at my older projects a lot and of course googled and asked chatGPT. At first I forgot to import the CSS files and could not understand why none of the changes I made was reflected in the browser. If I had more time I would go for the stretch goals and add more hoover effects. From 5b1474a8adea20a6fdfce9755f99750fbe46e8c4 Mon Sep 17 00:00:00 2001 From: Anna Date: Mon, 14 Oct 2024 22:18:03 +0200 Subject: [PATCH 17/17] removed redundantcode --- src/components/Album.css | 1 - src/components/CoverImage.css | 4 ++++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/components/Album.css b/src/components/Album.css index 33708ef7..b509ffcc 100644 --- a/src/components/Album.css +++ b/src/components/Album.css @@ -3,7 +3,6 @@ flex-direction: column; align-items: flex-start; padding: 15px; - transition: transform 0.3s ease; position: relative; } diff --git a/src/components/CoverImage.css b/src/components/CoverImage.css index a39c18a9..0567eb9d 100644 --- a/src/components/CoverImage.css +++ b/src/components/CoverImage.css @@ -13,6 +13,7 @@ .coverImage:hover .albumCoverImage { filter: brightness(50%); + /* makes the album cover image darker when you hover over it. */ } .icons { @@ -26,12 +27,14 @@ align-items: center; gap: 15px; opacity: 0; + /*Opacity 0, Icons not showing at all */ transition: opacity 0.3s ease; fill: #ffffff; } .coverImage:hover .icons { opacity: 1; + /*Opacity 1, Icons showing on hoover. */ } .icon { @@ -43,6 +46,7 @@ .play.icon:hover { transform: scale(1.2); + /* Makes play icon grow on hoover */ } .play.icon {