儘管使用了 rem,為什麼當我放大或縮小時元素大小會改變?
P粉729198207
P粉729198207 2023-09-08 15:06:21
0
1
536

我正在實作一個項目,我使用CSS position 屬性在輸入中放置一個按鈕,一切正常,甚至我在回應模式下也沒有問題,巧合的是我想縮放-檢查某些內容,我意識到當我放大或縮小輸入的頂部或底部之間會出現間隙,並且在某些尺寸下沒有間隙,一切都很好,我使用rem 對於我的所有CSS 屬性,因為據我所知rem 可以透過viewport 進行縮放,並且這種放大或縮小與viewport 相關 大小,所以從邏輯上講,如果我使用rem ,當我縮小或放大時不應該有任何間隙,但確實有!

我甚至將單位從rem更改為PX(在與我的問題類似的另一個問題中推薦),仍然是同樣的問題,我在不同的瀏覽器上檢查了它,每個瀏覽器都有這個問題,但它們的行為和它們在不同的縮放尺寸下造成的差距是不同的。此外,我在響應斷點或大小方面沒有任何問題,一切都工作正常。

基於MDN視窗與放大或縮小之間的關係:

您的視窗是目前可見的所有內容,特別是「什麼是視口」部分,也許還有一些導航選單。視窗的大小取決於螢幕的大小、瀏覽器是否處於全螢幕模式以及使用者是否放大

https://developer.mozilla.org/en-US/docs/Web/CSS/Viewport_concepts

viewportrem 之間的關係:

對於響應式網頁,網頁元素的大小會隨著視窗的大小而改變。 CSS 可讓您使用絕對單位(如像素 (px))或相對單位(如百分比、em 或 rem 單位)來聲明字體大小。

https://blog.hubspot.com/website/css-rem#:~:text=Rem (short for “root-,1rem will also equal% 2016 像素。

所以問題是:因為多個瀏覽器的行為不同,這個按鈕是否因為放大或縮小而重新定位,與瀏覽器結構或程式設計有關,還是只是其他原因,背後的邏輯是什麼?

/*Default Adjustments*/

:root {
  --color-secondary: #00acc1;
  --color-accent: #F86F03;
  --color-body: #212121;
  --color-text: #FBFFDC;
  --colorButton: #847f7d;
  --colorBorder: #A8A196;
}

*,
*::before,
*::after {
  box-sizing: border-box;
}

*,
 ::placeholder {
  color: var(--color-text);
}

html {
  font-size: 10px;
}

body {
  font-family: "Inter", arial, helvetica, sans-serif;
  font-size: 1.5rem;
  line-height: 1.5;
  background: var(--color-body);
}

.btn {
  background: var(--colorButton);
  border: .1rem solid var(--colorBorder);
  border-radius: .3rem;
}


/*Basic divs*/

.adjust {
  display: flex;
  justify-content: center;
}

.whole {
  background: var(--color-secondary);
  padding: 1.5rem;
  border-radius: 0.6rem;
  margin-top: 2rem;
}

.add {
  position: relative;
  display: flex;
  justify-content: center;
  margin-bottom: 1.3rem;
}

.addButton {
  position: absolute;
  cursor: pointer;
  top: 0.27rem;
  right: 8rem;
  font-size: 1.3rem;
  border: 0;
  border-radius: 0 .3rem .3rem 0;
  background: var(--colorButton);
}

.add input {
  outline: none;
  text-indent: 0.5rem;
  font-size: 1.3rem;
  background: var(--colorBorder);
  border: .3rem solid var(--colorButton);
  border-radius: .5rem;
}

.add input::placeholder {
  font-size: 1.25rem;
}
<div class="adjust">
  <div class="whole">
    <form class="add">
      <input class="addBook" type="text" required maxlength="50" pattern="\S(.*\S)?" title="Your book name can't start or end with white space and should include at least 
            1 non-white space character" placeholder="e.g Harry Potter" name="" id="" />
      <button class=" btn addButton">Add</button>
    </form>
  </div>
</div>

圖片

這是 100% 縮放尺寸,一切正常

這是縮放尺寸的 90%,頂部有一個間隙

這是縮放尺寸的 80%,一切又恢復正常了!

在Zooming-in 中也會出現相同的結果,所以如果這個問題與我的程式碼有關,為什麼它在每個縮放尺寸中都不是恆定的,如果它與我的程式碼無關,那麼幕後發生了什麼? < /p>

P粉729198207
P粉729198207

全部回覆(1)
P粉924915787

我認為這與絕對位置有關,我以前經歷過。 然而,為了解決這個問題,您可以在按鈕周圍添加一個包裝器,這個包裝器是一個彈性盒。

<div class="wrapper">
  <button class="btn addButton">Add</button>
</div>
.wrapper {
    height: 100%;
    width: fit-content;
    padding: .3rem 0;
    position: absolute;
    top: 0;
    right: 0;
    float: left;
    border-radius: 0 .3rem .3rem 0;
    display: flex;
    /*To keep item centered so gap will not appear*/
    align-items: center;
}
.addButton {
    font-size: 1.3rem;
    border: 0;
    background: var(--colorButton);
    border-radius: 0;
    -webkit-border-radius: 0;
    -moz-border-radius: 0;
    -ms-border-radius: 0;
    -o-border-radius: 0;
    cursor: pointer;
}
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板