代码之家  ›  专栏  ›  技术社区  ›  Cheetah

具有绝对位置的自定义元素

  •  -2
  • Cheetah  · 技术社区  · 7 年前

    我试图控制/放置 fin-hypergrid 在web组件中,但由于其滚动条是自定义的 div s与 position: absolute 在它们上,它们的位置与 window 而不是组件本身。

    这是我的JSFIDLE: https://jsfiddle.net/50kyyfam/

    我几乎可以肯定我需要将css属性添加到 :host 样式,以指示栅格将绝对位置放置到 data-grid 组件,但我不知道应该是什么?

    编辑 :作为旁注,如果 鳍超网格 在初始化上述JSFIDLE时,core的缩小版本引发了一个异常。(铬63)

    1 回复  |  直到 7 年前
        1
  •  1
  •   UncaughtTypeError    7 年前

    定位 绝对定位 要素 相对的 到其包含元素, position: relative 应在包含元素上声明,例如:

    data-grid {
        position: relative;
    }
    

    class DataGrid extends HTMLElement {
    
        constructor() {
          super();
          this.createShadowRoot().innerHTML = `
          	<style>
            	:host {
              	display: block;
              }
              
              div {
              	height: 100%;
              	width: 100%;
              }
            </style>
            <div></div>
          `;
        }
    
        connectedCallback() {
    			const grid = new fin.Hypergrid(this.shadowRoot.querySelector('div'));
          const data = [
            { name: 'Company 1', price: 300 },
            { name: 'Company 2', price: 200 },
            { name: 'Company 3', price: 150 },
            { name: 'Company 4', price: 500 },
            { name: 'Company 5', price: 999 }
          ];
          grid.setData(data);
        }
    
      }
    
      customElements.define('data-grid', DataGrid);
    data-grid {
        position: relative;
    }
    <script src="https://fin-hypergrid.github.io/core/2.0.2/build/fin-hypergrid.js"></script>
    
    <data-grid style="width:100px; height: 150px;"></data-grid>

    Updated JSFiddle

    扩展 ,为清晰起见,并为任何其他可能读者的潜在利益:

    • 将元素声明为时 绝对定位 要素 ( absolute fixed )你是 从中删除元素 自然文档流 ; 这意味着元素不再是 以某种方式与兄弟元素交互 relative static 元素确实如此(假设元素“位于”DOM其余部分之上)。
    • 默认情况下 绝对定位 元素的位置为 “相对”于 ; 这意味着如果偏移其位置 具有 left right 它将移动的距离等于的属性值 属性值 从窗口 . 可以定位元素 用一个 position 的属性值 完全的 (不是 固定的 )相对的 到任何包含元素 如果将相对定位声明为 包含元素的元素 .