What do I need to do to give the [id^=value] selector the same specificity as a regular ID, and why isn\'t it equal or greater already? (considering that I
You may consider the not() selector in order to append a random ID and you will then have a higher or the same specifity since the specifity of not() is equal to the specifity of the selector inside it:
html body div[id^="blue"]:not(#randomID) {
background-color: blue
}
#blue4 {
background-color: red
}
div {
height: 50px;
width: 50px
}