Created
March 4, 2022 06:49
-
Star
(325)
You must be signed in to star a gist -
Fork
(136)
You must be signed in to fork a gist
-
-
Save adrianhajdin/997a8cdf94234e889fa47be89a4759f1 to your computer and use it in GitHub Desktop.
Movie App
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| @import url("https://fonts.googleapis.com/css?family=Roboto+Slab:100,300,400,700"); | |
| @import url("https://fonts.googleapis.com/css?family=Raleway:300,300i,400,400i,500,500i,600,600i,700,700i,800,800i,900,900i"); | |
| * { | |
| margin: 0; | |
| border: 0; | |
| box-sizing: border-box; | |
| } | |
| :root { | |
| --font-roboto: "Roboto Slab", serif; | |
| --font-raleway: "Raleway", sans-serif; | |
| } | |
| body { | |
| font-family: var(--font-roboto); | |
| background-color: #212426; | |
| } | |
| .app { | |
| padding: 4rem; | |
| display: flex; | |
| justify-content: center; | |
| align-items: center; | |
| flex-direction: column; | |
| } | |
| h1 { | |
| font-size: 3rem; | |
| letter-spacing: 0.9px; | |
| background: linear-gradient( | |
| 90deg, | |
| rgba(249, 211, 180, 1) 0%, | |
| rgba(249, 211, 180, 0) 100% | |
| ); | |
| background-clip: text; | |
| -webkit-background-clip: text; | |
| -webkit-text-fill-color: transparent; | |
| width: fit-content; | |
| } | |
| .search { | |
| width: 71%; | |
| margin: 4rem 0 2rem; | |
| display: flex; | |
| align-items: center; | |
| justify-content: center; | |
| padding: 1.5rem 1.75rem; | |
| border-radius: 3rem; | |
| background: #1f2123; | |
| -webkit-box-shadow: 5px 5px 7px #1c1d1f, -5px -5px 7px #222527; | |
| box-shadow: 5px 5px 7px #1c1d1f, -5px -5px 7px #222527; | |
| } | |
| .search input { | |
| flex: 1; | |
| border: none; | |
| font-size: 1.5rem; | |
| font-family: var(--font-raleway); | |
| font-weight: 500; | |
| padding-right: 1rem; | |
| outline: none; | |
| color: #a1a1a1; | |
| background: #1f2123; | |
| } | |
| .search img { | |
| width: 35px; | |
| height: 35px; | |
| cursor: pointer; | |
| } | |
| /* .search button { | |
| padding: 20px 40px; | |
| border-radius: 0.5rem; | |
| margin-left: 15px; | |
| color: #a1a1a1; | |
| font-family: var(--font-raleway); | |
| font-weight: 900; | |
| letter-spacing: 0.75px; | |
| font-size: 1.25rem; | |
| cursor: pointer; | |
| background: #1f2123; | |
| -webkit-box-shadow: 5px 5px 7px #1c1d1f, -5px -5px 7px #222527; | |
| box-shadow: 5px 5px 7px #1c1d1f, -5px -5px 7px #222527; | |
| } */ | |
| .empty { | |
| width: 100%; | |
| margin-top: 3rem; | |
| display: flex; | |
| justify-content: center; | |
| align-items: center; | |
| } | |
| .empty h2 { | |
| font-size: 1.25rem; | |
| color: #f9d3b4; | |
| font-family: var(--font-raleway); | |
| } | |
| .container { | |
| width: 100%; | |
| margin-top: 3rem; | |
| display: flex; | |
| justify-content: center; | |
| align-items: center; | |
| flex-wrap: wrap; | |
| } | |
| .movie { | |
| width: 310px; | |
| height: 460px; | |
| margin: 1.5rem; | |
| position: relative; | |
| border-radius: 12px; | |
| overflow: hidden; | |
| border: none; | |
| transition: all 0.4s cubic-bezier(0.175, 0.885, 0, 1); | |
| box-shadow: 0px 13px 10px -7px rgba(0, 0, 0, 0.1); | |
| } | |
| .movie div:nth-of-type(1) { | |
| position: absolute; | |
| padding: 16px; | |
| width: 100%; | |
| opacity: 0; | |
| top: 0; | |
| color: #f9d3b4; | |
| } | |
| .movie:hover { | |
| box-shadow: 0px 30px 18px -8px rgba(0, 0, 0, 0.1); | |
| transform: scale(1.05, 1.05); | |
| } | |
| .movie div:nth-of-type(2) { | |
| width: 100%; | |
| height: 100%; | |
| } | |
| .movie div:nth-of-type(2) img { | |
| height: 100%; | |
| width: 100%; | |
| } | |
| .movie div:nth-of-type(3) { | |
| z-index: 2; | |
| background-color: #343739; | |
| padding: 16px 24px 24px 24px; | |
| position: absolute; | |
| bottom: 0; | |
| right: 0; | |
| left: 0; | |
| } | |
| .movie div:nth-of-type(3) span { | |
| font-family: "Raleway", sans-serif; | |
| text-transform: uppercase; | |
| font-size: 13px; | |
| letter-spacing: 2px; | |
| font-weight: 500; | |
| color: #f0f0f0; | |
| } | |
| .movie div:nth-of-type(3) h3 { | |
| margin-top: 5px; | |
| font-family: "Roboto Slab", serif; | |
| color: #f9d3b4; | |
| } | |
| .movie:hover div:nth-of-type(2) { | |
| height: 100%; | |
| opacity: 0.3; | |
| } | |
| .movie:hover div:nth-of-type(3) { | |
| background-color: transparent; | |
| } | |
| .movie:hover div:nth-of-type(1) { | |
| opacity: 1; | |
| } | |
| @media screen and (max-width: 600px) { | |
| .app { | |
| padding: 4rem 2rem; | |
| } | |
| .search { | |
| padding: 1rem 1.75rem; | |
| width: 100%; | |
| } | |
| .search input { | |
| font-size: 1rem; | |
| } | |
| .search img { | |
| width: 20px; | |
| height: 20px; | |
| } | |
| } | |
| @media screen and (max-width: 400px) { | |
| .app { | |
| padding: 4rem 1rem; | |
| } | |
| h1 { | |
| font-size: 2rem; | |
| } | |
| .container { | |
| margin-top: 2rem; | |
| } | |
| .movie { | |
| width: "100%"; | |
| margin: 1rem; | |
| } | |
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| import React, { useState, useEffect } from "react"; | |
| import MovieCard from "./MovieCard"; | |
| import SearchIcon from "./search.svg"; | |
| import "./App.css"; | |
| const API_URL = "http://www.omdbapi.com?apikey=b6003d8a"; | |
| const App = () => { | |
| const [searchTerm, setSearchTerm] = useState(""); | |
| const [movies, setMovies] = useState([]); | |
| useEffect(() => { | |
| searchMovies("Batman"); | |
| }, []); | |
| const searchMovies = async (title) => { | |
| const response = await fetch(`${API_URL}&s=${title}`); | |
| const data = await response.json(); | |
| setMovies(data.Search); | |
| }; | |
| return ( | |
| <div className="app"> | |
| <h1>MovieLand</h1> | |
| <div className="search"> | |
| <input | |
| value={searchTerm} | |
| onChange={(e) => setSearchTerm(e.target.value)} | |
| placeholder="Search for movies" | |
| /> | |
| <img | |
| src={SearchIcon} | |
| alt="search" | |
| onClick={() => searchMovies(searchTerm)} | |
| /> | |
| </div> | |
| {movies?.length > 0 ? ( | |
| <div className="container"> | |
| {movies.map((movie) => ( | |
| <MovieCard movie={movie} /> | |
| ))} | |
| </div> | |
| ) : ( | |
| <div className="empty"> | |
| <h2>No movies found</h2> | |
| </div> | |
| )} | |
| </div> | |
| ); | |
| }; | |
| export default App; |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| import React from 'react'; | |
| const MovieCard = ({ movie: { imdbID, Year, Poster, Title, Type } }) => { | |
| return ( | |
| <div className="movie" key={imdbID}> | |
| <div> | |
| <p>{Year}</p> | |
| </div> | |
| <div> | |
| <img src={Poster !== "N/A" ? Poster : "https://via.placeholder.com/400"} alt={Title} /> | |
| </div> | |
| <div> | |
| <span>{Type}</span> | |
| <h3>{Title}</h3> | |
| </div> | |
| </div> | |
| ); | |
| } | |
| export default MovieCard; |
@its-me-mhd you are the best! I followed you advise and it worked like magic. I spent about 3 hours trying to figure it out. Thank you!
@Leks10 You are welcome π
@its-me-mhd Could you plz give me the search.svg? Because I didn't see that in this page.
From which project??
β¦On Tue, 9 Sept 2025, 6:57 am TerryZ, ***@***.***> wrote:
***@***.**** commented on this gist.
------------------------------
@its-me-mhd <https://github.com/its-me-mhd> Could you plz give me the
search.svg? Because I didn't see that in this page.
β
Reply to this email directly, view it on GitHub
<https://gist.github.com/adrianhajdin/997a8cdf94234e889fa47be89a4759f1#gistcomment-5752088>
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/BE2YAQ2PXGAKFP22I5ZFBD33RYXY5BFKMF2HI4TJMJ2XIZLTSKBKK5TBNR2WLJDUOJ2WLJDOMFWWLO3UNBZGKYLEL5YGC4TUNFRWS4DBNZ2F6YLDORUXM2LUPGBKK5TBNR2WLJDHNFZXJJDOMFWWLK3UNBZGKYLEL52HS4DFVRZXKYTKMVRXIX3UPFYGLK2HNFZXIQ3PNVWWK3TUUZ2G64DJMNZZDAVEOR4XAZNEM5UXG5FFOZQWY5LFVEYTCNJQGI2TCNZRU52HE2LHM5SXFJTDOJSWC5DF>
.
You are receiving this email because you commented on the thread.
Triage notifications on the go with GitHub Mobile for iOS
<https://apps.apple.com/app/apple-store/id1477376905?ct=notification-email&mt=8&pt=524675>
or Android
<https://play.google.com/store/apps/details?id=com.github.android&referrer=utm_campaign%3Dnotification-email%26utm_medium%3Demail%26utm_source%3Dgithub>
.
I just finished the Moviehub website, and it works fine. I deployed it on Vercel tooππ
Huge thanks to Adrian JSM for being my React Hero π¦ΈββοΈ
I would love to get stars on my Repo too πβ¨
Made with π by Fasakin Henry
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
@Leks10
Hey! I found the issue - it's actually a CSS problem, not a React one.
Look at this part of your CSS:
Your year is actually there, but it's invisible because opacity: 0 makes it completely transparent. The year only shows up when you hover over the movie card because of this rule:
So if you want the year to always be visible, just change opacity: 0 to opacity: 1 in the first CSS rule.
If you want to keep some of the hover effect but still show the year normally, you could try opacity: 0.8 or something like that instead of completely hiding it.
The reason it works when you put {movie1.Year} somewhere else is because those other spots aren't affected by this CSS rule that's hiding the first div.
Try that fix and let me know if it works!