Atualmente, com o HTML5, é bem simples:
<input type="search" placeholder="Search..."/>
A maioria dos navegadores modernos renderiza automaticamente um botão Limpar utilizável no campo por padrão.

(Se você usa o Bootstrap, terá que adicionar uma substituição ao seu arquivo css para mostrar)
input[type=search]::-webkit-search-cancel-button {
-webkit-appearance: searchfield-cancel-button;
}

Os navegadores Safari / WebKit também podem fornecer recursos extras ao usar type="search"
, como results=5
e autosave="..."
, mas também substituem muitos de seus estilos (por exemplo, altura, bordas). Para impedir essas substituições, mantendo a funcionalidade como o botão X, você pode adicionar isso ao seu css:
input[type=search] {
-webkit-appearance: none;
}
Consulte css-tricks.com para obter mais informações sobre os recursos fornecidos por type="search"
.