Source

Components/Slider.js

import React, {Component} from 'react';
import styled, {keyframes} from 'styled-components';
import imgBg1 from '../Assets/Images/slide1bg.jpg';
import imgBg2 from '../Assets/Images/slide2bg.jpg';
import Search from './Search';
import {NavLink} from "react-router-dom";

const SliderContainer = styled.div`
`;

const changeSlide = keyframes`
  from {opacity: 0.8;}
  to {opacity: 1;}
`;

const FirstSlide = styled.div`
  background-image: url(${imgBg1});
  padding-bottom:4%;
  padding-top:8%;
  min-height:70vh;
  background-size: cover;
  padding-left:16px;
  padding-right:16px;
  display:grid;
  grid-template-columns: 60% 40%;
  display: ${props => props.background1 ? "grid" : "none"};
  -webkit-transition: opacity 600ms, visibility 600ms;
  transition: opacity 600ms, visibility 600ms;
  animation: ${changeSlide} 1s ease-in-out;
  @media (max-width: 970px) {
    min-height:60vh;
    padding-left:8px;
    padding-right:8px;
  }
  @media (max-width: 850px) {
    min-height:55vh;
  }
  @media (max-width: 750px) {
    grid-template-columns: 70% 30%;
    min-height:40vh;
  }
  @media (max-width: 680px) {
    grid-template-columns: 80% 20%;
  }
  @media (max-width: 600px) {
    grid-template-columns: 90% 10%;
    min-height:35vh;
  }
  @media (max-width: 480px) {
    grid-template-columns: 95% 5%;
    min-height:30vh;
  }
`;

const SecondSlide = styled.div`
  background-image: url(${imgBg2});
  padding-bottom:4%;
  padding-top:8%;
  min-height:70vh;
  background-size: cover;
  padding-left:16px;
  padding-right:16px;
  display:grid;
  grid-template-columns: 60% 40%;
  display: ${props => props.background1 ? "none" : "grid"};
  -webkit-transition: opacity 600ms, visibility 600ms;
  transition: opacity 600ms, visibility 600ms;
  animation: ${changeSlide} 1s ease-in-out;
  @media (max-width: 970px) {
    padding-left:8px;
    padding-right:8px;
  }
  @media (max-width: 970px) {
    min-height:60vh;
    padding-left:8px;
    padding-right:8px;
  }
  @media (max-width: 850px) {
    min-height:55vh;

  }
  @media (max-width: 750px) {
    grid-template-columns: 70% 30%;
    min-height:40vh;
  }
  @media (max-width: 680px) {
    grid-template-columns: 80% 20%;
  }
  @media (max-width: 600px) {
    grid-template-columns: 90% 10%;
    min-height:35vh;
  }
  @media (max-width: 480px) {
    grid-template-columns: 95% 5%;
    min-height:30vh;
  }
`;

const SlideText = styled.div`
`;

const SlideUpperText = styled.h2`
  background-color: rgba(0, 0, 0, .8);
  width:60%;
  margin-bottom:16px;
  padding-bottom:4px;
  padding-top:4px;
  font-size:2.4rem;
  padding-left:4px;
  padding-right:4px;
  color:white;
  @media (max-width: 1400px) {
    width:70%;
  }
  @media (max-width: 1140px) {
    width:75%;
  }
  @media (max-width: 970px) {
    font-size:2.3rem;
  }
  @media (max-width: 890px) {
    font-size:2.1rem;
  }
  @media (max-width: 770px) {
    font-size:2.0rem;
  }
  @media (max-width: 750px) {
    width:85%;
    font-size:2.1rem;
  }
  @media (max-width: 600px) {
    font-size:2.0rem;
  }
  @media (max-width: 480px) {
    font-size:1.8rem;
    width:90%;
  }
  @media (max-width: 360px) {
    font-size:1.7rem;
  }
`;

const SlideMiddleText = styled.h2`
  background-color: rgba(255, 255,255, .6);
  color:black;
  width:80%;
  padding-bottom:4px;
  padding-top:4px;
  font-size:2.2rem;
  padding-left:4px;
  padding-right:4px;
  @media (max-width: 1400px) {
    width:85%;
    }
  @media (max-width: 970px) {
    font-size:2.1rem;
  }
  @media (max-width: 890px) {
    font-size:2.0rem;
  }
  @media (max-width: 770px) {
    font-size:1.8rem;
  }
  @media (max-width: 750px) {
    width:95%;
    font-size:2rem;
  }
  @media (max-width: 600px) {
    font-size:1.8rem;
}
  @media (max-width: 480px) {
    font-size:1.6rem;
    width:100%;
  }
  @media (max-width: 360px) {
    font-size:1.5rem;
  }
`;

const SlideLowerText = styled.button`
  margin-top:16px;
  background-color: #ec6b0c;
  color:white;
  outline: none;
  border: none;
  cursor:pointer;
  font-size:1.6em;
  padding-bottom:12px;
  padding-top:12px;
  padding-left:16px;
  padding-right:16px;
  -webkit-transition:0.2s linear;
  -moz-transition:0.2s linear;
  transition:0.2s linear;
  border-radius:5%;
  @media (max-width: 970px) {
    font-size:1.5rem;
  }
  @media (max-width: 890px) {
    font-size:1.4rem;
  }
  @media (max-width: 770px) {
    font-size:1.2rem;
  }
  @media (max-width: 770px) {
    font-size:1.4rem;
  }
  &:hover {
    background-color: black;
  } 
`;

const StyledLink = styled(NavLink).attrs()`
  width:100%;
  text-decoration:none;
  color:white;
`;

/**
 * "Slider" component
 */
export class Slider extends Component {
  constructor(props) {
    super(props);
    this.state = {
      background1:true,
      showSearch: true,
    };
    this.showSearch = this.showSearch.bind(this);
  }
  componentDidMount() {
    if (window.innerWidth <750){
      this.setState({ showSearch: false});
    }
    this.interval = setInterval(() => this.setState({ background1: !this.state.background1}), 10000);
    window.addEventListener('resize', this.showSearch);
  }

  /**
   * Clear listener for resize.
   */
  componentWillUnmount() {
    clearInterval(this.interval);
    window.removeEventListener('resize', this.showSearch);
  }

  /**
    * Change display of size on smaller devices.
    */
  showSearch(){
   if (window.innerWidth <750){
     if (this.state.showSearch===true)
       this.setState({ showSearch: false});
   }
   if (window.innerWidth >=750){
     if (this.state.showSearch===false)
       this.setState({ showSearch: true});
   }
  }

  render() {
    return (  
      <SliderContainer>
        <FirstSlide background1={this.state.background1}>
          <SlideText>
            <SlideUpperText>RAC Approved Dealer</SlideUpperText>
            <SlideMiddleText>Up to 3 years extended RAC Warranty available</SlideMiddleText>
            <StyledLink to="/Offers"><SlideLowerText>More Info</SlideLowerText></StyledLink>
          </SlideText>
          {this.state.showSearch && <Search/>}
        </FirstSlide>
        <SecondSlide background1={this.state.background1}>
          <SlideText>
            <SlideUpperText>Welcome to Lux Cars</SlideUpperText>
            <SlideMiddleText>All credit applications considered</SlideMiddleText>
            <StyledLink to="/Offers"><SlideLowerText>More Info</SlideLowerText></StyledLink>
          </SlideText>
          {this.state.showSearch && <Search/>}
        </SecondSlide>
        {!this.state.showSearch && <Search/>}
      </SliderContainer>
    );
  }
}