Respostas:
[id^=product]
^=
indica "começa com". Por outro lado, $=
indica "termina com".
Os símbolos são realmente emprestados da sintaxe Regex, onde ^
e $
significam "início da sequência" e "fim da sequência", respectivamente.
Veja as especificações para obter informações completas.
product
é claramente um identificador válido e, portanto, não precisa de aspas.
:not([id^=product])
Eu faria assim:
[id^="product"] {
...
}
Idealmente, use uma classe. É para isso que servem as classes:
<div id="product176" class="product"></div>
<div id="product177" class="product"></div>
<div id="product178" class="product"></div>
E agora o seletor se torna:
.product {
...
}
Use o seletor de atributos
[id^=product]{property:value}
Notei que há outro seletor de CSS que faz a mesma coisa. A sintaxe é a seguinte:
[id|="name_id"]
Isso selecionará todos os IDs dos elementos que começam com a palavra entre aspas duplas.
att|=val
NÃO é o mesmo que att^=val
. A partir da referência mencionada: O |=
seletor "Representa um elemento com o atributo att, seu valor sendo exatamente" val "ou começando com" val " imediatamente seguido de" - " ." Portanto, um ID como "product42" não seria correspondido por |=
, mas o "produto 42" seria.