Me lo estoy pasando genial con este selector de CSS en particular que no quiere funcionar cuando lo agrego :not(:empty). Parece funcionar bien con cualquier combinación de los otros selectores:
input:not(:empty):not(:focus):invalid { border-color: #A22; box-shadow: none }
Si quito la :not(:empty)pieza, funciona bien. Incluso si cambio el selector a input:not(:empty), todavía no seleccionará campos de entrada que tengan texto escrito en ellos. ¿Está roto o simplemente no puedo usarlo :emptydentro de un :not()selector?
La única otra cosa en la que puedo pensar es que los navegadores siguen diciendo que el elemento está vacío porque no tiene hijos, solo un "valor" por decir. ¿El :emptyselector no tiene una funcionalidad separada para un elemento de entrada frente a un elemento regular? Sin embargo, esto no parece probable porque usarlo :emptyen un campo y escribir algo en él hará que los efectos alternativos desaparezcan (porque ya no está vacío).
Probado en Firefox 8 y Chrome.