La Propiedad CARET-COLOR

La propiedad caret-color controla el color del cursor de texto (también llamado caret) en elementos editables como inputs, textareas y elementos con contenteditable.
Introducción
La propiedad caret-color controla el color del cursor de texto (también llamado "caret") en elementos editables como inputs, textareas y elementos con contenteditable="true".
Sintaxis Básica
caret-color: auto | color | transparent;
Valores Disponibles
Valores principales:
-
auto(valor por defecto): El navegador determina el color (generalmente negro o el color del texto). -
color: Cualquier valor de color CSS (#hex,rgb(),hsl(), nombres de color). -
transparent: Hace el cursor invisible.
Ejemplos Básicos
Ejemplo 1: Color personalizado
.input-custom {
caret-color: #ff0000; /* Rojo */
}
Ejemplo 2: Usando transparencia
.input-hidden-caret {
caret-color: transparent; /* Cursor invisible */
}
Estructura HTML
<!DOCTYPE html>
<html>
<head>
<style>
.custom-input {
caret-color: #3498db; /* Azul */
padding: 10px;
border: 2px solid #bdc3c7;
border-radius: 5px;
width: 300px;
}
</style>
</head>
<body>
<label for="name">Nombre:</label>
<input type="text" id="name" class="custom-input" placeholder="El cursor será azul">
</body>
</html>
Ejemplos Prácticos y Creativos
Ejemplo 1: Formulario con colores temáticos
<!DOCTYPE html>
<html>
<head>
<style>
.form-group {
margin: 15px 0;
}
label {
display: block;
margin-bottom: 5px;
font-weight: bold;
}
input, textarea {
width: 100%;
padding: 12px;
border: 2px solid #ddd;
border-radius: 8px;
font-size: 16px;
transition: all 0.3s ease;
}
/* Diferentes colores de caret para diferentes campos */
.input-primary {
caret-color: #3498db;
border-color: #3498db;
}
.input-success {
caret-color: #27ae60;
border-color: #27ae60;
}
.input-warning {
caret-color: #f39c12;
border-color: #f39c12;
}
.input-danger {
caret-color: #e74c3c;
border-color: #e74c3c;
}
/* Efecto focus */
input:focus, textarea:focus {
outline: none;
box-shadow: 0 0 5px rgba(52, 152, 219, 0.5);
}
</style>
</head>
<body>
<form>
<div class="form-group">
<label for="username">Usuario:</label>
<input type="text" id="username" class="input-primary" placeholder="Cursor azul">
</div>
<div class="form-group">
<label for="email">Email:</label>
<input type="email" id="email" class="input-success" placeholder="Cursor verde">
</div>
<div class="form-group">
<label for="message">Mensaje:</label>
<textarea id="message" class="input-warning" rows="4" placeholder="Cursor naranja"></textarea>
</div>
</form>
</body>
</html>
Ejemplo 2: Campo de búsqueda estilizado
<!DOCTYPE html>
<html>
<head>
<style>
.search-container {
position: relative;
max-width: 400px;
margin: 50px auto;
}
.search-input {
width: 100%;
padding: 15px 45px 15px 20px;
border: none;
border-radius: 25px;
background: #f8f9fa;
font-size: 16px;
box-shadow: 0 2px 10px rgba(0,0,0,0.1);
caret-color: #e74c3c; /* Rojo llamativo */
transition: all 0.3s ease;
}
.search-input:focus {
background: white;
box-shadow: 0 4px 15px rgba(231, 76, 60, 0.2);
}
.search-icon {
position: absolute;
right: 20px;
top: 50%;
transform: translateY(-50%);
color: #7f8c8d;
}
</style>
</head>
<body>
<div class="search-container">
<input type="text" class="search-input" placeholder="Buscar...">
<span class="search-icon">????</span>
</div>
</body>
</html>
Ejemplo 3: Editor de texto con tema oscuro
<!DOCTYPE html>
<html>
<head>
<style>
.dark-theme {
background: #2c3e50;
color: #ecf0f1;
padding: 20px;
border-radius: 10px;
max-width: 600px;
margin: 20px auto;
}
.text-editor {
width: 100%;
min-height: 200px;
padding: 15px;
background: #34495e;
border: 2px solid #4a6572;
border-radius: 8px;
color: #ecf0f1;
font-family: 'Courier New', monospace;
font-size: 14px;
line-height: 1.5;
caret-color: #1abc9c; /* Verde turquesa */
resize: vertical;
}
.text-editor:focus {
border-color: #1abc9c;
outline: none;
box-shadow: 0 0 10px rgba(26, 188, 156, 0.3);
}
.theme-toggle {
background: #1abc9c;
color: white;
border: none;
padding: 10px 20px;
border-radius: 5px;
cursor: pointer;
margin-bottom: 15px;
}
</style>
</head>
<body>
<button class="theme-toggle" onclick="toggleTheme()">Cambiar Tema</button>
<div class="dark-theme" id="themeContainer">
<h3>Editor de Texto</h3>
<div
contenteditable="true"
class="text-editor"
placeholder="Escribe aquí... El cursor es verde turquesa"
>Este es un editor de texto editable. El cursor tiene color personalizado.</div>
</div>
<script>
function toggleTheme() {
const container = document.getElementById('themeContainer');
const editor = document.querySelector('.text-editor');
if (container.classList.contains('dark-theme')) {
container.classList.remove('dark-theme');
container.style.background = '#ecf0f1';
container.style.color = '#2c3e50';
editor.style.background = 'white';
editor.style.color = '#2c3e50';
editor.style.caretColor = '#3498db'; // Azul en tema claro
} else {
container.classList.add('dark-theme');
editor.style.caretColor = '#1abc9c'; // Verde en tema oscuro
}
}
</script>
</body>
</html>
Casos de Uso Avanzados
Ejemplo 1: Validación con cambio de color
.input-valid {
caret-color: #27ae60;
border-color: #27ae60;
}
.input-invalid {
caret-color: #e74c3c;
border-color: #e74c3c;
}
.input-validating {
caret-color: #f39c12;
border-color: #f39c12;
animation: pulse 1.5s infinite;
}
@keyframes pulse {
0% { opacity: 1; }
50% { opacity: 0.7; }
100% { opacity: 1; }
}
Ejemplo 2: Campos de contraseña segura
.password-strength-weak {
caret-color: #e74c3c;
}
.password-strength-medium {
caret-color: #f39c12;
}
.password-strength-strong {
caret-color: #27ae60;
}
Compatibilidad entre Navegadores
| Navegador | Soporte | Versión Mínima |
|---|---|---|
| Chrome | ✅ Completo | 57+ |
| Firefox | ✅ Completo | 53+ |
| Safari | ✅ Completo | 11.1+ |
| Edge | ✅ Completo | 79+ |
| Opera | ✅ Completo | 44+ |
Mejores Prácticas
1. Contraste adecuado:
/* Buen contraste */
.high-contrast {
caret-color: #000000;
background-color: #ffffff;
}
/* Tema oscuro */
.dark-input {
caret-color: #ffffff;
background-color: #2c3e50;
color: #ffffff;
}
2: Accesibilidad:
/* No ocultes completamente el cursor */
.accessible-input {
caret-color: auto; /* Mejor que transparent para la mayoría de usuarios */
}
/* Para usuarios con preferencia de contraste */
@media (prefers-contrast: high) {
input, textarea {
caret-color: #000000;
}
}
3: Diseño responsivo:
.input-responsive {
caret-color: #3498db;
}
/* En móviles, usar colores más visibles */
@media (max-width: 768px) {
.input-responsive {
caret-color: #e74c3c; /* Rojo más visible en pantallas pequeñas */
}
}
Ejemplo Interactivo Completo
<!DOCTYPE html>
<html>
<head>
<style>
.container {
max-width: 800px;
margin: 0 auto;
padding: 20px;
}
.control-panel {
background: #f8f9fa;
padding: 20px;
border-radius: 10px;
margin-bottom: 30px;
}
.control-group {
margin: 15px 0;
}
label {
display: block;
margin-bottom: 5px;
font-weight: bold;
}
input[type="color"] {
width: 50px;
height: 30px;
border: none;
border-radius: 5px;
cursor: pointer;
}
.demo-area {
background: white;
padding: 30px;
border-radius: 10px;
box-shadow: 0 4px 6px rgba(0,0,0,0.1);
}
.demo-input {
width: 100%;
padding: 15px;
border: 2px solid #bdc3c7;
border-radius: 8px;
font-size: 16px;
margin: 10px 0;
transition: all 0.3s ease;
}
.demo-input:focus {
outline: none;
border-color: #3498db;
}
.code-display {
background: #2c3e50;
color: #ecf0f1;
padding: 15px;
border-radius: 8px;
font-family: 'Courier New', monospace;
margin-top: 20px;
overflow-x: auto;
}
</style>
</head>
<body>
<div class="container">
<h1>Demo Interactivo: caret-color</h1>
<div class="control-panel">
<h3>Personaliza el caret-color:</h3>
<div class="control-group">
<label for="caretColor">Color del Cursor:</label>
<input type="color" id="caretColor" value="#3498db">
<span id="colorValue">#3498db</span>
</div>
<div class="control-group">
<label for="inputBackground">Fondo del Input:</label>
<input type="color" id="inputBackground" value="#ffffff">
</div>
<div class="control-group">
<label for="textColor">Color del Texto:</label>
<input type="color" id="textColor" value="#000000">
</div>
</div>
<div class="demo-area">
<h3>Área de Prueba:</h3>
<input
type="text"
class="demo-input"
id="testInput"
placeholder="Escribe aquí para ver el cursor personalizado..."
>
<textarea
class="demo-input"
id="testTextarea"
rows="4"
placeholder="También funciona en textareas..."
></textarea>
<div
contenteditable="true"
class="demo-input"
id="testEditable"
>Y en elementos contenteditable...</div>
</div>
<div class="code-display" id="codeOutput">
/* CSS generado */
.custom-style {
caret-color: #3498db;
background-color: #ffffff;
color: #000000;
}
</div>
</div>
<script>
const caretColor = document.getElementById('caretColor');
const inputBackground = document.getElementById('inputBackground');
const textColor = document.getElementById('textColor');
const colorValue = document.getElementById('colorValue');
const codeOutput = document.getElementById('codeOutput');
const elements = [
document.getElementById('testInput'),
document.getElementById('testTextarea'),
document.getElementById('testEditable')
];
function updateStyles() {
const caretValue = caretColor.value;
const bgValue = inputBackground.value;
const textValue = textColor.value;
// Aplicar estilos a todos los elementos
elements.forEach(element => {
element.style.caretColor = caretValue;
element.style.backgroundColor = bgValue;
element.style.color = textValue;
});
// Actualizar valor del color
colorValue.textContent = caretValue;
// Actualizar código mostrado
codeOutput.textContent = `/* CSS generado */
.custom-style {
caret-color: ${caretValue};
background-color: ${bgValue};
color: ${textValue};
}`;
}
// Event listeners
caretColor.addEventListener('input', updateStyles);
inputBackground.addEventListener('input', updateStyles);
textColor.addEventListener('input', updateStyles);
// Inicializar
updateStyles();
</script>
</body>
</html>
Consideraciones Importantes
-
No afecta el cursor del mouse, solo el cursor de texto
-
Funciona en elementos editables:
input,textarea,[contenteditable] -
No todos los tipos de input lo soportan igual
-
Considera la accesibilidad al elegir colores
-
Prueba en diferentes navegadores para asegurar consistencia
Resumen
La propiedad caret-color es útil para:
-
Personalizar la experiencia de usuario en formularios
-
Mejorar la estética de interfaces de edición
-
Crear temas coherentes en aplicaciones
-
Destacar estados de validación o importancia