css - Angular Transform Scale - 删除空白

标签 css angular

我正在做一个需要动态缩小多个大表的元素。我通过使用 transform: scale 实现了这一点。这是我试图在 stackblitz 中实现的一个简单版本。

StackBlitz - Scaling Demo

问题是当我缩小时底部有空白区域。在此之后我有文本和附加表格。如何删除这个空白?我知道之前有人问过这个问题,但我正在努力寻找一个特别适用于 Angular 工作解决方案。

Table

HTML

<h1>Transform</h1>
<button (click)="setScale1(1)">Original</button>
<button (click)="setScale1(0.5)">Scale 50%</button>
<button (click)="setScale1(0.25)">Scale 25%</button>

    <div style="transform-origin:0 0;" [style.transform]="'scale('+scale1+')'">
      <table style="width:130%;background-color:#D3D3D3;">
        <tr>
          <th>Firstname</th>
          <th>Lastname</th> 
          <th>Age</th>
          <th>Sex</th>
        </tr>
        <tr>
          <td>Jill</td>
          <td>Smith</td> 
          <td>50</td>
          <td>F</td>
        </tr>
        <tr>
          <td>Eve</td>
          <td>Jackson</td> 
          <td>94</td>
          <td>F</td>
        </tr>
        <tr>
          <td>Toby</td>
          <td>Smith</td> 
          <td>50</td>
          <td>M</td>
        </tr>
        <tr>
          <td>Tom</td>
          <td>Jackson</td> 
          <td>66</td>
          <td>M</td>
        </tr>
      </table>
    </div>
    <div>I would like this text to be directly after the blue container like when at 100% scale</div>
    <br>
    <button (click)="setScale2(1)">Original</button>
    <button (click)="setScale2(0.5)">Scale 50%</button>
    <button (click)="setScale2(0.25)">Scale 25%</button>
    <div style="transform-origin:0 0;" [style.transform]="'scale('+scale2+')'">
      <table style="width:130%;background-color:#D3D3D3;">
        <tr>
          <th>Company</th>
          <th>Type</th> 
          <th># Of Employees</th>
        </tr>
        <tr>
          <td>ABC Company</td>
          <td>Customer</td> 
          <td>50</td>
        </tr>
        <tr>
          <td>Other Company</td>
          <td>Customer</td> 
          <td>4</td>
        </tr>
        <tr>
          <td>Delta Force</td>
          <td>Supplier</td> 
          <td>100</td>
        </tr>
        <tr>
          <td>Alpha Rig</td>
          <td>Supplier</td> 
          <td>33</td>
        </tr>
      </table>
    </div>
    <div>I would like this text to be directly after the blue container like when at 100% scale</div>

JavaScript

import {Component} from '@angular/core';
import { animate, state, style, transition, trigger } from '@angular/animations';
/**
 * @title Expansion panel as accordion
 */
@Component({
  selector: 'expansion-steps-example',
  templateUrl: 'expansion-steps-example.html',
  styleUrls: ['expansion-steps-example.css']
})
export class ExpansionStepsExample {
  scale1: string = '1';
  scale2: string = '1';


  setScale1(value: string): void {
    this.scale1 = value;
  }
  setScale2(value: string): void {
    this.scale2 = value;
  }
}

最佳答案

在这里使用 Tallboy 推荐的文章是任何感兴趣的人的完整解决方案。建议的解决方案是:

已更新 stackblitz Working Solution

  1. 将表格包裹在容器中,并在比例变化时动态调整容器的高度。

  2. 我通过给表格分配一个id来获取高度

  3. 通过document.getElementById获取高度

  4. 按比例因子将容器高度 (clientHeight) 的倍数更改

Transform

HTML

转换

原来的 比例 25% 比例 50% 比例 150% 名 姓 年龄 性别 吉尔 史密斯 50 F 前夕 jackson 94 F 托比 史密斯 50 米 汤姆 jackson 66 米 我希望此文本直接位于表格之后,就像在 100% 比例时一样
原来的 比例 25% 比例 50% 公司 类型 # 员工 ABC公司 顾客 50 其他公司 顾客 4个 三 Angular 洲部队 供应商 100 阿尔法钻机 供应商 33 我希望此文本直接位于表格之后,就像在 100% 比例时一样

Javascript

import {Component} from '@angular/core';
import { animate, state, style, transition, trigger } from '@angular/animations';
/**
 * @title Expansion panel as accordion
 */
@Component({
  selector: 'expansion-steps-example',
  templateUrl: 'expansion-steps-example.html',
  styleUrls: ['expansion-steps-example.css']
})
export class ExpansionStepsExample {
  scale1: string = '1';
  scale2: string = '1';

  height1: number;
  height2: number;


  setScale1(value: string): void {
    this.scale1 = value;
    this.setHeight('table1');   

  }
  setScale2(value: string): void {
    this.scale2 = value;
    this.setHeight('table2');   
  }
  setHeight(id: string): void {
      if (id === 'table1') {
        this.height1 = document.getElementById(id).clientHeight*parseFloat(this.scale1);
      }
      if (id === 'table2') {
        this.height2 = document.getElementById(id).clientHeight*parseFloat(this.scale2);
      }
  }
}

关于css - Angular Transform Scale - 删除空白,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54918018/

相关文章:

jquery - 使用 CSS 和 JQuery,我怎样才能用一个按钮垂直翻转一个 div 并用另一个按钮水平翻转?

html - 如何将内容分发到它们之间有边框的列? (文字出版社)

javascript - 修改 typescript 文件时,Angular2 在浏览器中没有变化

angular - 如何在 Angular 2 的 "select"中获得新选择?

angular2 你如何在 `ngFor` 内渲染一个计时器组件

javascript - 我在通过 bootstrap 响应我的页面 html 时遇到问题

jquery - CSS/HTML 加载栏

html - 当我在本地主机上访问它时,为什么我的复选框在 chrome 上看起来不同?

javascript - 新组件加载 Angular 后焦点不会改变

angular - 没有将 "exportAs"设置为 "ngModel"angular4 的指令