Hola!
Sobre ::first-letter (con doble dos puntos es el estándar), eso ocurre, según la norma CSS, porque el div no tiene caracteres. Si tuviera, entonces podrías aplicar estilos distintos al div y al p. Lo que hace ::first-letter es buscar la primera letra de un elemento, pero en vista de que div no tiene letras, entonces no hay contenido donde aplicar los estilos.
Lo mismo ocurre con ::first-line: se aplica al contenido directo del elemento, no de los hijos.
Ten en cuenta que para los estilos CSS, los elementos sí importan. Nosotros (las personas) entendemos a qué nos referimos, pero los computadores son estructurados, por ende, si la información no está escrita como este espera, entonces no la entiende.
Sobre ::first-letter (con doble dos puntos es el estándar), eso ocurre, según la norma CSS, porque el div no tiene caracteres. Si tuviera, entonces podrías aplicar estilos distintos al div y al p. Lo que hace ::first-letter es buscar la primera letra de un elemento, pero en vista de que div no tiene letras, entonces no hay contenido donde aplicar los estilos.
Lo mismo ocurre con ::first-line: se aplica al contenido directo del elemento, no de los hijos.
Ten en cuenta que para los estilos CSS, los elementos sí importan. Nosotros (las personas) entendemos a qué nos referimos, pero los computadores son estructurados, por ende, si la información no está escrita como este espera, entonces no la entiende.