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

在flexbox元素的左侧和顶部

  •  0
  • LondonRob  · 技术社区  · 7 年前

    当使用flexbox布局元素时,我想知道它们的顶部和左侧相对于窗口的位置。

    这可能吗?

    window.getComputedStyle auto 两者皆适用 top left

    const cells = document.querySelectorAll('.cell')
    
    cells.forEach(cell => {
      cell.addEventListener('click', function(event) {
        const cell = event.target;
        const left = getComputedStyle(cell).left;
        const top = getComputedStyle(cell).top;
        document.getElementById('display').innerHTML = 'Left: ' + left + ' - Top: ' + top;
      });
    })
    .container {
      display: flex;
      flex-direction: column;
      height: 100vh;
      width: 50vh;
      margin: 0 auto;
      justify-content: center;
      align-items: center;
    }
    
    .container .row {
      display: flex;
    }
    
    :root {
      --cell-size: 20px;
    }
    
    .container .row .cell {
      width: var(--cell-size);
      height: var(--cell-size);
      background-color: steelblue;
      border: 1px #ccc solid;
      border-radius: 100%;
      margin: calc(var(--cell-size) / 4);
    }
    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <title>CSS Animation demo</title>
      <link rel="stylesheet" href="style.css">
    </head>
    <body>
      <div class="container">
        <div>Click a flex child to see its computed top and left</div>
        <div id="display">&nbsp;</div>
        <div class="row">
          <div class="cell"></div>
          <div class="cell"></div>
          <div class="cell"></div>
          <div class="cell"></div>
          <div class="cell"></div>
          <div class="cell"></div>
        </div>
      </div>
    </body>
    </html>
    1 回复  |  直到 7 年前
        1
  •  3
  •   inorganik    7 年前

    你想要什么 .offsetLeft .offsetTop :

    const cells = document.querySelectorAll('.cell')
    
    cells.forEach(cell => {
      cell.addEventListener('click', function(event) {
        const cell = event.target;
        const left = cell.offsetLeft;
        const top = cell.offsetTop;
        document.getElementById('display').innerHTML = 'Left: ' + left + ' - Top: ' + top;
      });
    })
    .container {
      display: flex;
      flex-direction: column;
      height: 100vh;
      width: 50vh;
      margin: 0 auto;
      justify-content: center;
      align-items: center;
    }
    
    .container .row {
      display: flex;
    }
    
    :root {
      --cell-size: 20px;
    }
    
    .container .row .cell {
      width: var(--cell-size);
      height: var(--cell-size);
      background-color: steelblue;
      border: 1px #ccc solid;
      border-radius: 100%;
      margin: calc(var(--cell-size) / 4);
    }
    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <title>CSS Animation demo</title>
      <link rel="stylesheet" href="style.css">
    </head>
    <body>
      <div class="container">
        <div>Click a flex child to see its computed top and left</div>
        <div id="display">&nbsp;</div>
        <div class="row">
          <div class="cell"></div>
          <div class="cell"></div>
          <div class="cell"></div>
          <div class="cell"></div>
          <div class="cell"></div>
          <div class="cell"></div>
        </div>
      </div>
    </body>
    </html>