Design a Tip Calculator using HTML, CSS and JavaScript (original) (raw)

Last Updated : 02 Jun, 2025

The tip is the money given as a gift for good service to the person who serves you in a restaurant. In this project, a simple tip calculator is made that takes the billing amount, type of service, and the number of persons as input. As per the three inputs, it generates a tip for the serving person. In this article, we are going to learn how to design a Tip Calculator using HTML, CSS, and JavaScript.

**You can find the live preview below, try it:

Prerequisites:

**Approach

**Example: In this example, we are following the above approach.

HTML `

TIP CALCULATOR

        <p>Bill Amount</p>
        <input type="text" id="amount" placeholder="Amount to be paid"> ₹
        <p>How was the service ?</p>
        <select id="services">
            <option selected disabled hidden>
                Select
            </option>
            <option value="0.25">25% - Top Notch</option>
            <option value="0.20">20% - Excellent</option>
            <option value="0.15">15% - Good</option>
            <option value="0.10">10% - Bad</option>
            <option value="0.05">5% - Worst</option>
        </select>
        <p>Total number of persons</p>
        <input type="text" id="persons" placeholder="Number of people sharing the bill">
        <button id="calculate">Calculate</button>
    </div>

    <div class="tip">
        <p>Tip Amount</p>
        <span id="total">0</span>₹
        <span id="each">each</span>
    </div>
</div>

CSS

body { background-color: #001f4f; font-family: "Raleway", sans-serif; }

.container { width: 350px; height: 500px; background-color: #fff; position: absolute; left: 50%; top: 50%; transform: translateX(-50%) translateY(-50%); border-radius: 20px; }

h1 { position: absolute; left: 50%; top: -60px; width: 300px; transform: translateX(-50%); background-color: #ff851b; color: #fff; font-weight: 100; border-top-left-radius: 20px; border-top-right-radius: 20px; font-size: 18px; text-align: center; padding: 10px; }

.wrapper { padding: 20px; }

input, select { width: 80%; border: none; border-bottom: 1px solid #0074d9; padding: 10px; }

input:focus, select:focus { border: 1px solid #0074d9; outline: none; }

select { width: 88% !important; }

button { margin: 20px auto; width: 150px; height: 50px; background-color: #39cccc; color: #fff; font-size: 16px; border: none; border-radius: 5px; }

.tip { text-align: center; font-size: 18px; display: none; }

JavaScript

window.onload = () => //the function called when Calculate button is clicked. { /calling a function calculateTip which will calculate the tip for the bill./ document.querySelector('#calculate').onclick = calculateTip; }

function calculateTip() { /assign values of ID : amount, person and service to variables for further calculations./ let amount = document.querySelector('#amount').value; let persons = document.querySelector('#persons').value; let service = document.querySelector('#services').value;

console.log(service);
/*if statement will work when user presses 
      calculate without entering values. */
//so will display an alert box and return.
if (amount === '' && service === 'Select') {
    alert("Please enter valid values");
    return;
}

//now we are checking number of persons 
if (persons === '1')
//if there is only one person then we need not to display each.
    document.querySelector('#each').style.display = 'none';
else
//if there are more than one person we will display each.  
    document.querySelector('#each').style.display = 'block';

/*calculating the tip by multiplying total-bill and type of
 service; then dividing it by number of persons.*/
//fixing the total amount upto 2 digits of decimal
let total = (amount * service) / persons;
total = total.toFixed(2);

//finally displaying the tip value 
document.querySelector('.tip').style.display = 'block';
document.querySelector('#total').innerHTML = total;

}

`

**Output

Design a Tip Calculator using HTML, CSS and JavaScript

Design a Tip Calculator using HTML, CSS and JavaScript