Transformação CSS com redimensionamento de elementos

Eu achei isto:largura / altura após transformação

e vários outros, mas nada não é bem o que estou procurando. O que eu quero é escalar algo para 50% do tamanho (com boa transição animada, é claro) e fazer com que o layout da página seja reajustado ao novo tamanho (visual) do elemento. O que parece acontecer por padrão é que o elemento ainda retém seu tamanho original na estrutura do layout e é simplesmente desenhado com as transformações associadas.

Basicamente eu quero que o usuário clique em um bloco de texto (ou outro conteúdo) e, em seguida, dimensione o texto para 50% (ou qualquer outro) do tamanho e coloque-o em um painel abaixo para indicar que ele foi selecionado. Eu não quero 50% de espaço em branco ao redor do elemento depois de movê-lo.

Eu tentei re-definir a altura / largura, mas isso faz com que o elemento seja submetido a um novo layout e, em seguida, a escala é aplicada ao novo layout e isso ainda me deixa com 50% de espaço em branco depois de tudo ter terminado. Meu código específico mozilla (por simplicidade) se parece com isto:

<script type="text/javascript">
 function zap(e) {

  var height = e.parentNode.offsetHeight/2 + 'px';
  var width = e.parentNode.offsetWidth/2 + 'px';
  e.parentNode.style.MozTransform='scale(0.0)'; 
  e.parentNode.addEventListener(
    'transitionend', 
    function() { 
      var selectionsArea = document.getElementById("selected");
      selectionsArea.appendChild(e.parentNode);
      e.parentNode.style.MozTransform='scale(0.5,0.5)'; 
      e.parentNode.style.display = 'inline-block';
      e.parentNode.style.height = height;
      e.parentNode.style.width = width;
    },
    true) 
}
</script>

Eu estou realmente esperando que eu não tenha que mexer com margens negativas ou posicionamento relativo para conseguir isso ...

Editar: Desde que escrevi isso, encontrei uma pergunta muito semelhante, sem comentários ou respostas. Isso é um pouco diferente, já que não me importo em ser uma solução específica para html5, suspeito que a solução não exista ou esteja em CSS / javascript, independentemente do nível de HTML.

Escala / zoom de um elemento DOM e o espaço que ocupa usando escala de transformação CSS3 ()

Editar 2: (outra tentativa não funcional)

Eu também tentei isso, mas a escala e as funções de tradução parecem interagir de uma maneira que torna a posição final impossível de prever ... e escalar antes de transformar não parece ser o mesmo que transformar em escala. Infelizmente não é apenas uma questão de ajustar a tradução pelo fator de escala ...

function posX(e) {
    return e.offsetLeft + (e.offsetParent ? posX(e.offsetParent) : 0)
}

function posY(e) {
    return e.offsetTop + (e.offsetParent ? posY(e.offsetParent) : 0)
}

function placeThumbNail(e, container, x, y, scale) {
    var contX = posX(container);
    var contY = posY(container);
    var eX = posX(e);
    var eY = posY(e);
    var eW = e.offsetWidth;
    var eH = e.offsetHeight;

    var margin = 10;
    var dx = ((contX - eX) + margin + (x * eW * scale));
    var dy = ((contY - eY) + margin + (y * eH * scale));

    // assumes identical objects     
    var trans = 'translate(' + dx + 'px, ' + dy + 'px) ';
    var scale = 'scale(' + scale + ',' + scale + ') ';
    e.style.MozTransform =  trans + scale ; 
}

Mesmo que funcionasse, o acima ainda exigiria que eu movesse primeiro o elemento para a parte inferior da página antes de executar este código (para me livrar do espaço em branco), e além disso eu precisaria recalcular a transformação em redimensionar .. então eu não estava muito feliz com essa tentativa de começar de qualquer maneira.

Observe também que, se você usarscale + trans vstrans + scale acima do resultado é drasticamente diferente.

Editar 3: Eu descobri os problemas de posicionamento ... as transformações são aplicadas na ordem especificada escale(0.5,0.5) essencialmente altera o tamanho de um pixel para metade do que era originalmente (provavelmente insinuando como eles o implementaram internamente). Se eu colocar translate é primeiro, traduzir um pouco menos / mais para explicar a mudança na posição do canto superior esquerdo causada pela escala fará o truque, mas gerenciando a localização dos objetos e ajustando as transformações quando o dom muda em um maneira razoável ainda me ilude. Esse tipo de coisa parece errada porque estou à deriva na direção de escrever meu próprio gerenciador de layout em javascript apenas para obter esse efeito.

questionAnswers(3)

yourAnswerToTheQuestion