目錄
簡介" >簡介
width: auto" >width: auto
## width 用例: auto
" >## width 用例: auto
height: autoheight: auto
" >height: autoheight: auto
margin 和auto 關鍵字
" >margin 和auto 關鍵字
具有绝对定位元素的 margin:auto
" >具有绝对定位元素的 margin:auto
Flexbox
" >Flexbox
flex 属性和 auto 关键字
" >flex 属性和 auto 关键字
CSS grid 和自动设置一个 auto
" >CSS grid 和自动设置一个 auto
从右向左布局
" >从右向左布局
overflow 属性" >overflow 属性
position 属性" >position 属性
用例和示例
" >用例和示例
首頁 web前端 css教學 值得了解的關於CSS auto的相關知識! !

值得了解的關於CSS auto的相關知識! !

May 31, 2021 pm 05:12 PM
auto css

值得了解的關於CSS auto的相關知識! !

在CSS中,我們有auto值,它可以用於像margin,position,heightwidth等屬性。在本文中,會先解釋auto的工作方式以及如何最大程度地利用auto的技術細節,當然,會配合一些用例和範例。

簡介

auto關鍵字的使用會因屬性而異。對於本文,我將在每個屬性的上下文中解釋值。

width: auto

「區塊層級元素」(如<div>或<code><p> </p>)的初始寬度是auto,這使得它們佔據了包含它們的區塊的整個水平空間。

根據CSS規格

'margin-left' 'border-left-width' 'padding-left' 'width' 'padding-right' 'border-right-width' 'margin-right' = 區塊的寬度

#當一個元素的寬度值為auto時,它包含marginpaddingborder,不會變得比它的父元素大。其中 content 的寬度將會是content本身減去marginpaddingborder#。

值得了解的關於CSS auto的相關知識! !

我們以上面的模型為例。

html

<div class="wrapper">
  <div class="item">
    <p>Lorem ipsum, dolor sit amet consectetur adipisicing elit. Eos maxime cum non cupiditate, perferendis saepe vitae fugiat id exercitationem officiis voluptate sint ducimus commodi reiciendis error itaque dolores ipsam? Ea!</p>
  </div>
</div>
登入後複製

css

* {
    box-sizing: border-box;
}

.wrapper {
      max-width: 600px;
      margin: 2rem auto 0;
      padding: 1rem;
}

.item {
      padding: 1rem;
      margin: 0 50px;
      border: 15px solid #1f2e17;
}
登入後複製

一切都好,元素 item 被限制在其父項中。

值得了解的關於CSS auto的相關知識! !

是,如果我們將元素item的寬度改為100%而不是auto會發生什麼事?該元素將佔用其父項的100%,加上左側和右側的邊距。

// css
.item {
      width: 100%;
      padding: 1rem;
      margin: 0 50px;
      border: 15px solid #1f2e17;
}
登入後複製

值得了解的關於CSS auto的相關知識! !

該元素的寬度為568px,是下列各項的總和:

'border-left- width' 'padding-left' 'width' 'padding-right' 'border-right-width' = 15 16 506 16 15 =568px

如果方向是ltr,則完全忽略margin-right。在我們的例子中,這種情況發生了。但是,如果佈局是rtl,那麼margin-left將被忽略。

值得了解的關於CSS auto的相關知識! !

事例來源碼:https://codepen.io/shadeed/pen/f305220fbd4b444371bdef11dad014ec?editors=0100

## width 用例: auto

只是解釋基礎知識不足以使我們掌握這個概念,因此需要一些例子來說明。

手機和 PC 之間的寬度不同

值得了解的關於CSS auto的相關知識! !

#我們有一組按鈕。在行動裝置上,我們希望它們彼此相鄰(每個按鈕包裝器佔據其父元素的50%),而在桌面裝置上,每個按鈕都應該佔據其父元素的全部寬度。怎麼做?

HTML

<div class="group">
    <div class="group__item">
        <button class="c-button">Sign In</button>
    </div>
    <div class="group__item">
        <button class="c-button c-button--ghost">Register</button>
    </div>
</div>
登入後複製

這裡使用 flex 版面將按鈕排列在一起。

CSS

.group {
    display: flex;
}

.group__item {
    width: 50%;
}
登入後複製

對於 PC,我們每個項目需要都取全寬。在這種情況下,你可能傾向於使用width: 100%,對嗎?以下是一個更好的解決方案。

CSS

@media (min-width: 800px) {
    /* Revert the wrapper to a block element instead of flex */
    .group {
        display: block;
    }

    .group__item {
        width: auto;
    }
}
登入後複製

由於.group是一個區塊元素,因此使用width: auto可以很好地填充其父元素的可用空間。

事例原始碼:https://codepen.io/shadeed/pen/399de6d9d473137998f87f957cfdfa03?editors=1100

height: autoheight: auto

說到height,情況就不一樣了。元素的高度等於預設值為auto

的內容。

考慮下面的例子

<div class="wrapper">
  <div class="item">What&#39;s my height?</div>
</div>
登入後複製
要讓.item

得到其容器的全部高度,我們可以使用以下方法之一:
  1. .wrapper一個固定的高度,然後為.item元素加入height: 100%

  2. .wrapper使用flex 佈局,預設情況下它將拉伸子項.item

## CSS

.wrapper {
    height: 200px;
}

.item {
    height: 100%;
}
登入後複製

值得了解的關於CSS auto的相關知識! !

margin 和auto 關鍵字

margin,最常見的用例是將已知寬度的元素水平居中。

請考慮以下範例:

值得了解的關於CSS auto的相關知識! !

要让上面的蓝色矩形居中,可以使用下面的方法:

.element {
    margin-left: auto;
    margin-right: auto;
}
登入後複製

根据CSS规范:

如果margin-leftmargin-right值均为auto,则它们的使用值相等。 这使元素相对于包含块的边缘水平居中。

值得了解的關於CSS auto的相關知識! !

具有绝对定位元素的 margin:auto

值得了解的關於CSS auto的相關知識! !

另一个不太常见的将绝对定位元素居中的用例是margin: auto。当我们有一个元素应该在它的父元素内部水平和垂直居中时,我们可能会倾向于使用translateXtranslateY

我们可以使用下面方法让具有绝对定位元素居中:

  1. 设置的宽度和高度。

  2. 元素应具有position: absolute

HTML

<div class="wrapper">
  <div class="item">I am centered.</div>
</div>
登入後複製

CSS

.wrapper {
    position: relative;
}

.item {
    width: 200px;
    height: 100px;
    position: absolute;
    left: 0;
    top: 0;
    right: 0;
    bottom: 0;
    margin: auto;
}
登入後複製

事例源码:https://codepen.io/shadeed/pen/b086f8402be981e871ac5db15495dec8?editors=0100

Flexbox

在某些情况下,在flexbox中使用自动页边距非常有用。当一个子项目有一个marginauto 时,它将被推到远的另一边。例如,如果一个flex项目的左边是margin-left: auto,那么它将被推到最右边。

考虑下面的模型,父级元素是一个 flex 布局:

值得了解的關於CSS auto的相關知識! !

我们想把第二项推到最右边,自动边距就派上用场了。

CSS

.wrapper {
    display: flex;
}

.item-2 {
    margin-left: auto;
}
登入後複製

1值得了解的關於CSS auto的相關知識! !

不仅如此,它还可以在水平或垂直方向工作。参见下面的示例

CSS

.item-2 {
    margin-top: auto;
}
登入後複製

值得了解的關於CSS auto的相關知識! !

另外,如果只有一个子元素,则可以使用margin:auto将其水平和垂直居中。

CSS

.item-1 {
    margin: auto;
}
登入後複製

1值得了解的關於CSS auto的相關知識! !

flex 属性和 auto 关键字

在flexbox中,我们可以使用flex: auto作为子项目。这是什么意思?当一个子项目有flex: auto时,它等价于flex: 11 auto,与下面等价:

CSS

.item {
  flex-grow: 1;
  flex-shrink: 1;
  flex-basis: auto;
}
登入後複製

MDN 描述

该项目根据其宽度和高度属性调整大小,但会增长以吸收flex容器中的任何额外自由空间,并会收缩到其最小尺寸以适合该容器,这等效于设置“ flex:1 1 auto”。

具有flex:auto的项目将根据其宽度和高度来调整大小,但它可以根据可用的额外空间来增大或缩小。 在研究本文之前,我不知道这一点!

HTML

<div class="wrapper">
  <div class="item item-1">Item</div>
  <div class="item">Item</div>
  <div class="item">Item</div>
</div>
登入後複製

CSS

.wrapper {
    display: flex;
    flex-wrap: wrap;
}

.item {
    width: 120px;
    height: 500px;
}

.item-1 {
    flex: auto;
}
登入後複製

1值得了解的關於CSS auto的相關知識! !

事例源码:https://codepen.io/shadeed/pen/4914b4517b858f0fcf0f8acd07c64b1e?editors=1100

CSS grid 和自动设置一个 auto

1值得了解的關於CSS auto的相關知識! !

在CSS Grid中,我们可以设置一个列为auto,这意味着它的宽度将基于它的内容长度。看看下面,你就知道我的意思了:

wrapper {
    display: grid;
    grid-template-columns: auto 1fr 1fr;
}
登入後複製

grid 和 auto 边距

使用CSS网格时,可以使用自动页边距实现类似于 flexbox 的结果。 当我们有一个网格,并且其中的网格项目具有margin-left: auto时:该项目将被推到右边,其宽度将基于其内容长度

考虑下面的例子:

1值得了解的關於CSS auto的相關知識! !

当我们希望item1的宽度基于其内容,而不是网格区域。 通过使用margin-left: auto,可以通过下面代码实实现:

.item-1 {
    margin-left: auto;
}
登入後複製

1值得了解的關於CSS auto的相關知識! !

从右向左布局

值得一提的是,使用margin-left: automargin-right: auto对于从左到右的布局(例如英语)可能效果很好。 但是,在多语言网站上工作时要当心颠覆这些价值观。 更好的是,使用flexboxgrid属性,以防使用它们完成工作。 如果没有,那么请使用自动页边距作为最后的选择,而应使用CSS逻辑属性

overflow 属性

当我们有一个元素时,我们应该考虑它应该包含的最小和最大内容。如果内容超过了最大值,那么我们需要显示一个滚动条。

你可能想使用以下内容:

element {
  overflow-y: scroll;
}
登入後複製

然而,这可能会显示一个滚动条,即使内容高度很短。参见下面的示例

1值得了解的關於CSS auto的相關知識! !

在 Chrome 窗口中,滚动条总是显示出来,这是不正确和令人困惑的行为。

通过使用auto关键字,我们可以确保滚动条不会显示,除非内容高度大于它的容器。

根据MDN

取决于用户代理。 如果内容适合填充框内部,则它看起来与可见内容相同,但仍会建立新的块格式化上下文。 如果内容溢出,桌面浏览器会提供滚动条。

.element {
  overflow-y: auto;
}
登入後複製

position 属性

对于CSS定位属性top,right,bottom和left,我们可以使用auto关键字作为它们的值。 接下来我要解释的是对我来说是新的,我在研究本文时学到了它。

考虑下面的模型:

1值得了解的關於CSS auto的相關知識! !

我们有一个有内边距的 wrapper 元素,还有一个子项。子项目是绝对定位的,但没有任何定位属性。

.wrapper {
    position: relative;
    padding: 16px;
}

.item {
    position: absolute;
    width: 100px;
    height: 100px;
}
登入後複製

在CSS中,每个属性都有一个初始值/默认值。 如果我检查了子项并转到computed styles,你猜下left属性的值会是什么?

值得了解的關於CSS auto的相關知識! !

left的默认值为16px,即使没有设置。为什么会发生这种情况? 好吧,原因是绝对定位的元素相对于其最接近的父元素具有position:relative。 该父项具有padding: 16px,因此子项位于顶部和左侧的16px处。 有趣,不是吗?

现在,你可能会问,这样做有什么好处?好吧,让我继续。

假设子项必须在较小的视口中位于距左侧100像素的位置,对于桌面,它应恢复为默认位置。

.wrapper {
    position: relative;
}

.item {
    position: absolute;
    left: 100px;
    width: 100px;
    height: 100px;
}
登入後複製

如何在较大的视口中重设left? 我们不能使用left:0,因为这会将子元素粘到边缘,这不是我们想要的。 请参阅下面的模型,以了解我的意思。

2值得了解的關於CSS auto的相關知識! !

要以正确的方式重置子项,我们应该使用left: auto。 根据 MDN:

如果元素是静态元素,则将定位在它应该水平定位的位置

这意味着,它会尊重padding,而不会将子条目粘贴到其父条目的边缘。

.item {
    position: absolute;
    left: 100px;
    width: 100px;
    height: 100px;
}

@media (min-width: 800px) {
    .item {
        /* This is equivalent to left: 16px */
        left: auto;
    }
}
登入後複製

top属性也是如此。 对于rightbottom属性,其默认计算值分别等于元素的宽度和高度。

事例源码:https://codepen.io/shadeed/pen/d062539938346e5458f769cbc08833e1?editors=0100

用例和示例

值得一提的是,下面的用例可能还不够,但是我尝试添加一些用例,希望它们对你们有用。

提示箭头

对于提示框,我们需要一个指向箭头,以使其对用户更加清晰。 如果我们正在设计系统上,则应该考虑多个状态。 例如,提示的箭头指向左侧,另一个箭头指向右侧。

值得了解的關於CSS auto的相關知識! !

.tooltip:before {
    /* 箭头代码 */
    position: absolute;
    left: -15px;
}

/* 这是一个箭头指向右侧的版本*/
.tooltip.to-right:before {
    /* 箭头代码 */
    position: absolute;
    left: auto;
    right: -15px;
}
登入後複製

请注意,在初始实现中,我使用left: auto来覆盖left: -15px。 供您参考,这是非常常用的,我建议改用以下内容:

.tooltip:before {
    position: absolute;
    right: 100%;
}

.tooltip.to-right:before {
    /* Arrow code */
    position: absolute;
    right: auto;
    left: 100%;
}
登入後複製

通过使用100%,我们避免了使用硬编码的值(箭头宽度),如果我们改变箭头的大小,这个值可能会失败。这是一个更经得起时间考验的解决方案。

卡片组件

你可能有一个card组件,其左上角有一个操作,它可能仅用于装饰,也可能是一个有用的操作。不管是什么,你都应该考虑到它是双向的。

2值得了解的關於CSS auto的相關知識! !

通过使用left:auto,我们可以很容易地重置它的基本实现。

.card .icon {
    position: absolute;
    left: 15px;
    top: 15px;
}

.card.is-right .icon {
    left: auto;
    right: 15px;
}
登入後複製

Flexbox 和 自动边距

当谈到flexbox时,它有无限的可能性。 通过将其与自动边距相结合,我们可以构建功能强大的布局。

考虑下面的例子

2值得了解的關於CSS auto的相關知識! !

我们在右侧包含一行标题,描述和一个操作按钮的行。 我们希望操作按钮贴在右侧。

HTML

<div class="item">
    <div class="item-group">
        <!-- Title and description -->
    </div>
    <button class="item__action">Confirm</button>
</div>
登入後複製

CSS

.item {
  display: flex;
  flex-wrap: wrap;
  justify-content: space-between;
}

.item__action {
  margin-left: auto;
}
登入後複製

就是这样! 通过使用margin-left: auto,将动作推到最右角。 更好的是,如果您要构建多语言网站,我们可以使用CSS逻辑属性。 CSS将如下所示:

.item__action {
    margin-inline-start: auto;
}
登入後複製

CSS grid 和自动边距

在向网格项目添加边距时,它可以是固定值,百分比或自动值。 我对auto更感兴趣。 考虑以下:

2值得了解的關於CSS auto的相關知識! !

HTML

<p class="input-group">
    <label for="">Full Name</label>
    <input type="email" name="" id="">
</p>
登入後複製

CSS

.input-group {
  display: grid;
  grid-template-columns: 1fr;
  grid-gap: 1rem;

  @media (min-width: 700px) {
    grid-template-columns: 0.7fr 2fr;
  }
}
登入後複製

我想将label 与input的左边缘对齐。 为此,我需要应用以下内容:

.input-group label {
    margin-left: auto;
}
登入後複製

2值得了解的關於CSS auto的相關知識! !

模态设计

2值得了解的關於CSS auto的相關知識! !

在进行模态设计时,重要的是要考虑内容高度很大时会发生的情况。 对于这种情况,我们可以使用以下代码:

.modal-body {
    overflow-y: auto;
}
登入後複製

这样,只有当内容高度足够大时,它才会显示滚动条。

英文原文地址:https://css-tricks.com/almanac/properties/o/overflow/

作者:shadeed

更多编程相关知识,请访问:编程教学!!

以上是值得了解的關於CSS auto的相關知識! !的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

vue中怎麼用bootstrap vue中怎麼用bootstrap Apr 07, 2025 pm 11:33 PM

在 Vue.js 中使用 Bootstrap 分為五個步驟:安裝 Bootstrap。在 main.js 中導入 Bootstrap。直接在模板中使用 Bootstrap 組件。可選:自定義樣式。可選:使用插件。

HTML,CSS和JavaScript的角色:核心職責 HTML,CSS和JavaScript的角色:核心職責 Apr 08, 2025 pm 07:05 PM

HTML定義網頁結構,CSS負責樣式和佈局,JavaScript賦予動態交互。三者在網頁開發中各司其職,共同構建豐富多彩的網站。

了解HTML,CSS和JavaScript:初學者指南 了解HTML,CSS和JavaScript:初學者指南 Apr 12, 2025 am 12:02 AM

WebDevelovermentReliesonHtml,CSS和JavaScript:1)HTMLStructuresContent,2)CSSStyleSIT和3)JavaScriptAddSstractivity,形成thebasisofmodernWebemodernWebExexperiences。

bootstrap怎麼設置框架 bootstrap怎麼設置框架 Apr 07, 2025 pm 03:27 PM

要設置 Bootstrap 框架,需要按照以下步驟:1. 通過 CDN 引用 Bootstrap 文件;2. 下載文件並將其託管在自己的服務器上;3. 在 HTML 中包含 Bootstrap 文件;4. 根據需要編譯 Sass/Less;5. 導入定製文件(可選)。設置完成後,即可使用 Bootstrap 的網格系統、組件和样式創建響應式網站和應用程序。

bootstrap怎麼寫分割線 bootstrap怎麼寫分割線 Apr 07, 2025 pm 03:12 PM

創建 Bootstrap 分割線有兩種方法:使用 標籤,可創建水平分割線。使用 CSS border 屬性,可創建自定義樣式的分割線。

bootstrap怎麼插入圖片 bootstrap怎麼插入圖片 Apr 07, 2025 pm 03:30 PM

在 Bootstrap 中插入圖片有以下幾種方法:直接插入圖片,使用 HTML 的 img 標籤。使用 Bootstrap 圖像組件,可以提供響應式圖片和更多樣式。設置圖片大小,使用 img-fluid 類可以使圖片自適應。設置邊框,使用 img-bordered 類。設置圓角,使用 img-rounded 類。設置陰影,使用 shadow 類。調整圖片大小和位置,使用 CSS 樣式。使用背景圖片,使用 background-image CSS 屬性。

bootstrap按鈕怎麼用 bootstrap按鈕怎麼用 Apr 07, 2025 pm 03:09 PM

如何使用 Bootstrap 按鈕?引入 Bootstrap CSS創建按鈕元素並添加 Bootstrap 按鈕類添加按鈕文本

bootstrap怎麼調整大小 bootstrap怎麼調整大小 Apr 07, 2025 pm 03:18 PM

要調整 Bootstrap 中元素大小,可以使用尺寸類,具體包括:調整寬度:.col-、.w-、.mw-調整高度:.h-、.min-h-、.max-h-

See all articles