<div class="view">
    <h2>WeatherLy</h2>
    <form>
        <div class="search">
            <input placeholder="Enter a Location" type="text" id="query">
            <button>Submit</button>
        </div>
    </form>
    <div class="details">
        <div class="img">
            <img src="" alt="weather-icon" class="icon">
        </div>
        <div class="weather">
            <div class="location">
                <span class="material-icons">
                    place
                </span>
                <h3>Location </h3>
                <span class="name"></span>
            </div>
            <div class="temperature">
                <span class="material-icons">
                    thermostat
                </span>
                <h3>Temperature </h3>
                <span class="temp"></span>
            </div>
            <div class="description">
                <span class="material-icons">
                    air
                </span>
                <h3>Wind Speed </h3>
                <span class="desc"></span>
            </div>
        </div>

    </div>

</div>
* {
    margin: 0;
    padding: 0;
    box-sizing: border-box;
}
body {
    font-family: "Montserrat", sans-serif;
    background: #17427a;
    color: #f4f4f4;
}

.view {
    width: 100%;
    height: 100vh;
    display: flex;
    justify-content: center;
    align-items: center;
    text-align: center;
    flex-direction: column;
}

h2 {
    padding: 10px;
    font-size: 32px;
}

form .search {
    padding: 20px;
    display: flex;
    flex-direction: column;
}

form .search input {
    all: unset;
    padding: 10px;
    background: #f6f6f6;
    color: #222222;
    border-radius: 4px;
    margin-bottom: 10px;
}

form .search button {
    all: unset;
    padding: 10px 30px;
    background: linear-gradient(135deg, #2685a2 -50%, #286fe0 180%);
    border-radius: 4px;
    cursor: pointer;
    font-weight: bold;
    transition: all 200ms ease-in-out;
}

form .search button:hover {
    transform: scale(1.03);
}

.details {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    margin: 10px;
    width: 100%;
    visibility: hidden;
}

.details .img {
    margin: 10px;
    background: #bbbbbb;
    border-radius: 4px;
    box-shadow: 0px 0px 10px #ffffff50;
}

.details .weather {
    display: flex;
    align-items: center;
    flex-wrap: wrap;
    margin: 20px;
    width: 100%;
    justify-content: space-around;
}

.details .weather div {
    width: 30%;
    display: flex;
    flex-direction: column;
    justify-content: center;
    align-items: center;
    text-align: center;
}

.details .weather div span {
    margin-bottom: 10px;
    font-size: 32px;
}
const btn = document.querySelector("button");
const details = document.querySelector(".details");
const name = document.querySelector(".name");
const tempC = document.querySelector(".temp");
const desc = document.querySelector(".desc");
const iconHolder = document.querySelector(".icon");
const api = "fabbc03382cd7ff0af9f209fac9d566c";

const input = document.querySelector("#query");

btn.addEventListener("click", (e) => {
    e.preventDefault();
    const query = input.value;
    const url = `https://api.openweathermap.org/data/2.5/weather?q=${encodeURIComponent(
        query
    )}&appid=${api}&units=metric`;
    console.log(url);
    fetch(url)
        .then((res) => {
            return res.json();
        })
        .then((data) => {
            const temp = data.main.temp;
            const place = data.name;
            const { description, icon } = data.weather[0];
            const { speed } = data.wind;
            const iconUrl = `http://openweathermap.org/img/wn/${icon}@2x.png`;
            tempC.textContent = `${temp}°C`;
            name.textContent = `${place}`;
            desc.textContent = `${speed}`;
            iconHolder.src = iconUrl;
            details.style.visibility = "visible";
        })
        .catch((err) => alert("Enter valid address!"));

    input.value = "";
});

External CSS

This Pen doesn't use any external CSS resources.

External JavaScript

This Pen doesn't use any external JavaScript resources.