If your container div has a fixed width, then your 90% width div has as well a fixed width. Look which is this width (calculate or use a tool like firebug) and then calculate the 3:1 aspect ratio and apply a height in pixels.
If your container div hasn't a fixed width, then the 90% is as well variable. So the only way you have to manage with dynamic values is to use javascript.
UPDATE
There is a aspect-ratio
property but it's not a standard one. I haven't tested it, but it should work with webkit browsers. Here it's a link talking about this property:
http://www.xanthir.com/blog/b4810
If you really want to do this cross-browser, there are two more options:
You can use the workaround explained in following link. It's not very clean because it uses an image, but its author says it works for Firefox 3.5, Safari 4 and Internet Explorer 7 & 8. The link:
http://lab.veille.jp/aspectratio/
Another ugly for this case option (a lot of code) would be using CSS3 media-queries. You should look which is the width of your div for different windows width, calculate the aspect ratio in each case and apply it to the height. The more media-queries you define, smoother it will be.
@media only screen and (max-width:900px){
div {
width: /*Calculate your width*/
height: /*Calculate your aspect ratio*/
}
}
/*50px gap... if you decrease the gap it will be smoother*/
@media only screen and (max-width:850px){
div {
width: /*Calculate your width*/
height: /*Calculate your aspect ratio*/
}
}
/*And more, and more... till you rich maybe a setted min-width*/