После нескольких опытов вот к чему я пришел:
<html><head>
<style type="text/css">
#el{
width:200px;
height:70px;
position:relative;
top:20px;
left:50px;
background:#555}
</style>
</head><body>
<div id="el"></div>
<script type="text/javascript">
var el = document.getElementById('el');
el.addEventListener('click', getClickXY, false);
function getClickXY(event)
{
var clickX = (event.layerX == undefined ? event.offsetX : event.layerX) + 1;
var clickY = (event.layerY == undefined ? event.offsetY : event.layerY) + 1;
alert('Координаты клика: '+ clickX +' x '+ clickY);
}
</script>
</body></html>
Элемент страницы по которому кликает пользователь и относительно которого нужно узнать координаты клика, должен иметь css-свойство z-index отличное от 0 (нуля). Это связано с тем что javascript-свойство layerX(Y) вычисляется для активного слоя. В Opera это свойство не работает, поэтому для нее берется свойство offsetX(Y). +1 добавляется к каждому свойству потому что отсчет координат начинается с 0, то есть самая первая точка имеет координаты 0х0.
В css свойство z-index больше 0 имеют все элементы для которых position указано как relative | absolute | fixed.