Edit 2020: It seems there was a change in chrome, and previous answers do not work anymore.
I made a hacky workaround that you can tune to your needs.
This new method increases size of the calendar icon to overflow it's input container in order to completely cover it. You can tune the position and size by tuning these parameters:
top: -150%;
left: -150%;
width: 300%;
height: 300%;
The bigger, the more stable. But still a hack on top of a hack
Updated July 2020 - Works with new Chrome's calendar-picker
label {
display: inline-block;
position: relative;
line-height: 0;
}
input {
position: absolute;
opacity: 0;
width: 100%;
height: 100%;
border: 0;
overflow: hidden;
cursor: pointer;
}
input::-webkit-calendar-picker-indicator {
position: absolute;
top: -150%;
left: -150%;
width: 300%;
height: 300%;
cursor: pointer;
}
input:hover + button {
background-color: silver;
}
<label>
<input type="date">
<button id="calendar_text">Search Date </button>
</label>
There's still an issue in Firefox, when a date is selected and you click near the right border, the input will clear, because the input's clear button is right there.
I adapted cinatic's solution so that it works on Chrome, and adapted Andy's trick to the recent changes of Chrome in 2020
Andy's trick: expands Chrome's datepicker's arrow through out the input
cinatic's solution: hides the input on top of another element