【问题标题】:Adding non-centered text shifts centered elements [duplicate]添加非居中文本移动居中元素[重复]
【发布时间】:2019-02-11 01:49:54
【问题描述】:

在放置一个居中的标题后,我用 JS 添加了一个非居中的输出。产生输出后,标题向左移动一点。有什么办法可以解决这个问题?

let output = [];

function spit() {
  for (let i = 0; i < 100; i++) {
    output.push(i);
  }
  document.getElementById("output").innerHTML =
    output.join("<br>");
}
.header {
  background-color: lightgray;
  border: none;
  color: black;
  padding: 17px 25px;
  display: block;
  text-align: center;
  font-size: 36px;
  width: 100%;
  margin-left: auto;
  margin-right: auto;
}
<h2 id="dictName" class="header">
  Testing Page
</h2>

<button style="font-size:20pt;height:35pt" onclick="spit()">
         Press me!
</button>

<p id="output">
</p>

【问题讨论】:

  • @RachelGallen 感谢您的编辑!我还没有掌握sn-ps。
  • 看起来它仍在居中。它只是向左移动,因为在按下按钮后添加了滚动条。
  • @EugeneBarsky sn-p 图标在图片图标的右侧;您可以在撰写问题时在此处输入您的代码 - 仅供将来参考:)
  • @RachelGallen 谢谢,我试试用,很方便。
  • @MichaelvE 是的,我认为这就是原因,但它看起来很难看,那么可以做些什么来避免这种行为?

标签: javascript html css


【解决方案1】:

如果您不希望 h1 由于滚动条而移动,则必须使用 css calc()(可能还有其他一些东西)来计算 50vw - (widthOfH1/2)。这是因为 vw 单位(视口宽度)不受滚动条的影响。

滚动条不影响 h1 居中的一种方法是使用 JQuery。

$(#dictName).style.marginLeft = 'calc(50vw -'+(this.width/2)+'px)';

我没有对此进行测试,所以我不能 100% 确定它是否会起作用,但请告诉我它是否有效。按下按钮时,您可能需要重新运行此代码。

【讨论】:

    【解决方案2】:

    一个疯狂的解决方案可能是将你的身体高度设置为视口高度,这样你就可以从滚动开始,避免按下按钮时发生移位。

    let output = [];
    
    function spit() {
      for (let i = 0; i < 100; i++) {
        output.push(i);
      }
      document.getElementById("output").innerHTML =
        output.join("<br>");
    }
    body {
      min-height: 100vh;
    }
    
    .header {
      background-color: lightgray;
      border: none;
      color: black;
      padding: 17px 25px;
      display: block;
      text-align: center;
      font-size: 36px;
      width: 100%;
      margin-left: auto;
      margin-right: auto;
    }
    <h2 id="dictName" class="header">
      Testing Page
    </h2>
    
    <button style="font-size:20pt;height:35pt" onclick="spit()">
             Press me!
    </button>
    
    <p id="output">
    </p>

    【讨论】:

      【解决方案3】:

      我添加了一个通用的 { 边距:0; padding:0;} 添加到您的 CSS 代码中。代码确实似乎居中,但我认为 -50 的边距(由自动边距创建)正在摆脱外观。

      let output = [];
      
      function spit() {
        for (let i = 0; i < 100; i++) {
          output.push(i);
        }
        document.getElementById("output").innerHTML =
          output.join("<br>");
      }
      * {
        margin: 0px; padding:0px;
      }
      
      button {
        /*margin-left:15px;*/
        margin-top:7px;
        font-size: 20pt;
        height: 35pt;
      }
      
      .header {
        background-color: lightgray;
       /* border: 15px solid white;*/ /*use the commented props if you still want the "indented" effect" */
        color: black;
        padding: 17px 25px;
        display: block;
        text-align: center;
        font-size: 36px;
        width: 100%;
        margin-right:auto;
        margin-left:auto;
      }
      <h2 id="dictName" class="header">
        Testing Page
      </h2>
      
      <button onclick="spit()">
               Press me!
      </button>
      
      <p id="output">
      </p>

      【讨论】:

      • 这确实会影响标题上的填充,但您可以使用边框或轮廓作为解决方案,例如边框:15px 纯白色;
      【解决方案4】:

      经过一番谷歌搜索后,我似乎在这里找到了解决此问题的最简单方法:

      How to prevent scrollbar from repositioning web page?

      html {
        overflow-y: scroll;
      }
      

      也许,问题应该作为重复而关闭,但我没有足够的声誉来做这件事。

      【讨论】:

      • 这将如何解决问题?最初的外观仍然是关闭的,用户必须滚动过去?
      • @RachelGallen 我已将这 3 行添加到我的代码中,并且标题不再移动。我是 html/css 的新手,所以我无法解释它是如何工作的,但我的问题已经解决了。
      • 虽然它会创建一个滚动条(所以它会在不移动的情况下将它推过去)......所以位置仍然会关闭?不过,如果它对你有用......一切都很好......
      • @RachelGallen 那么您认为* { margin: 0px; padding:0px;} 的解决方案是否更正确?
      • 这就是我要使用的,以防止溢出。您仍然可以通过添加白色边框来获得标题的缩进效果。但这取决于你。
      猜你喜欢
      • 2018-03-11
      • 1970-01-01
      • 1970-01-01
      • 2012-07-01
      • 2021-10-23
      • 1970-01-01
      • 1970-01-01
      • 2020-12-18
      • 1970-01-01
      相关资源
      最近更新 更多