検索
ホームページウェブフロントエンドCSSチュートリアルCSS 自動について知っておく価値があります。 !

CSS 自動について知っておく価値があります。 !

CSS には、margin、position、height のように使用できる auto 値があります。 width およびその他の属性。この記事では、まず auto の仕組みと、auto を最大限に活用するための技術的な詳細について、いくつかのユースケースと例を交えて説明します。

#はじめに

autoキーワードの使用方法は属性によって異なります。この記事では、各プロパティのコンテキストにおける値について説明します。

width: auto

ブロックレベル要素 (

) の初期幅は auto であり、これにより、それらが含まれるブロックの水平方向のスペース全体が占有されます。

CSS 仕様によると :

'margin-left' 'border-left-width' 'padding-left' 'width' 'padding-right ' 'border-right-width' 'margin-right' =

ブロックの幅

要素の幅値が

auto の場合、 marginpadding、および border が含まれており、親要素より大きくなることはありません。ここで、content の幅は、content 自体から marginpaddingborder を引いたものになります。

CSS 自動について知っておく価値があります。 !

上記のモデルを例として考えてみましょう。

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 自動について知っておく価値があります。 !

はい、要素項目の幅を自動ではなく 100% に変更するとどうなりますか?要素は親の 100% と左右のマージンを占めます。

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

CSS 自動について知っておく価値があります。 !

この要素の幅は

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 自動について知っておく価値があります。 !#ケースのソースコード: https://codepen.io/shadeed/pen/f305220fbd4b444371bdef11dad014ec?editors=0100

# # width 使用例: auto

基本を説明するだけではこの概念を理解するのに十分ではないため、いくつかの例で説明する必要があります。

モバイルと PC では幅が異なります

ボタンのセットがあります。モバイルでは、それらを隣り合わせにする必要があります (各ボタン ラッパーは親要素の

50%CSS 自動について知っておく価値があります。 ! を占めます)。一方、デスクトップでは、各ボタンは親要素の全幅を占める必要があります。どうすればよいですか?

HTML<pre class='brush:php;toolbar:false;'>&lt;div class=&quot;group&quot;&gt; &lt;div class=&quot;group__item&quot;&gt; &lt;button class=&quot;c-button&quot;&gt;Sign In&lt;/button&gt; &lt;/div&gt; &lt;div class=&quot;group__item&quot;&gt; &lt;button class=&quot;c-button c-button--ghost&quot;&gt;Register&lt;/button&gt; &lt;/div&gt; &lt;/div&gt;</pre>ここでは、フレックス レイアウトを使用してボタンをまとめて配置します。

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: auto

身長となると、状況は異なります。要素の高さは、デフォルト値
auto

のコンテンツと等しくなります。

次の例を考えてみましょう。

<div class="wrapper">
  <div class="item">What&#39;s my height?</div>
</div>
.item

がコンテナの全高を取得するには、次のいずれかのメソッドを使用します。

.wrapper

に固定の高さを与え、
    height: 100%
  1. .item# に追加します。 ## 要素 ##.wrapper

    flex
  2. レイアウトを使用します。デフォルトでは、子
  3. .item

    # が引き伸ばされます。 # CSS

    .wrapper {
        height: 200px;
    }
    
    .item {
        height: 100%;
    }

##margin と auto キーワード

CSS 自動について知っておく価値があります。 !

for

margin最も一般的な使用例は、幅が既知の要素を水平方向に中央揃えにすることです。 次の例を考えてみましょう:

CSS 自動について知っておく価値があります。 !

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

.element {
    margin-left: auto;
    margin-right: auto;
}

根据CSS规范:

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

CSS 自動について知っておく価値があります。 !

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

CSS 自動について知っておく価値があります。 !

另一个不太常见的将绝对定位元素居中的用例是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 自動について知っておく価値があります。 !

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

CSS

.wrapper {
    display: flex;
}

.item-2 {
    margin-left: auto;
}

1CSS 自動について知っておく価値があります。 !

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

CSS

.item-2 {
    margin-top: auto;
}

CSS 自動について知っておく価値があります。 !

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

CSS

.item-1 {
    margin: auto;
}

1CSS 自動について知っておく価値があります。 !

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;
}

1CSS 自動について知っておく価値があります。 !

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

CSS grid 和自动设置一个 auto

1CSS 自動について知っておく価値があります。 !

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

wrapper {
    display: grid;
    grid-template-columns: auto 1fr 1fr;
}

grid 和 auto 边距

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

考虑下面的例子:

1CSS 自動について知っておく価値があります。 !

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

.item-1 {
    margin-left: auto;
}

1CSS 自動について知っておく価値があります。 !

从右向左布局

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

overflow 属性

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

你可能想使用以下内容:

element {
  overflow-y: scroll;
}

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

1CSS 自動について知っておく価値があります。 !

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

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

根据MDN

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

.element {
  overflow-y: auto;
}

position 属性

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

考虑下面的模型:

1CSS 自動について知っておく価値があります。 !

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

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

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

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

CSS 自動について知っておく価値があります。 !

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

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

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

.wrapper {
    position: relative;
}

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

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

2CSS 自動について知っておく価値があります。 !

要以正确的方式重置子项,我们应该使用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 自動について知っておく価値があります。 !

.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组件,其左上角有一个操作,它可能仅用于装饰,也可能是一个有用的操作。不管是什么,你都应该考虑到它是双向的。

2CSS 自動について知っておく価値があります。 !

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

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

.card.is-right .icon {
    left: auto;
    right: 15px;
}

Flexbox 和 自动边距

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

考虑下面的例子

2CSS 自動について知っておく価値があります。 !

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

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更感兴趣。 考虑以下:

2CSS 自動について知っておく価値があります。 !

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;
}

2CSS 自動について知っておく価値があります。 !

模态设计

2CSS 自動について知っておく価値があります。 !

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

.modal-body {
    overflow-y: auto;
}

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

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

作者:shadeed

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

以上がCSS 自動について知っておく価値があります。 !の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事はsegmentfaultで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。
利用CSS怎么创建渐变色边框?5种方法分享利用CSS怎么创建渐变色边框?5种方法分享Oct 13, 2021 am 10:19 AM

利用CSS怎么创建渐变色边框?下面本篇文章给大家分享CSS实现渐变色边框的5种方法,希望对大家有所帮助!

css ul标签怎么去掉圆点css ul标签怎么去掉圆点Apr 25, 2022 pm 05:55 PM

在css中,可用list-style-type属性来去掉ul的圆点标记,语法为“ul{list-style-type:none}”;list-style-type属性可设置列表项标记的类型,当值为“none”可不定义标记,也可去除已有标记。

css与xml的区别是什么css与xml的区别是什么Apr 24, 2022 am 11:21 AM

区别是:css是层叠样式表单,是将样式信息与网页内容分离的一种标记语言,主要用来设计网页的样式,还可以对网页各元素进行格式化;xml是可扩展标记语言,是一种数据存储语言,用于使用简单的标记描述数据,将文档分成许多部件并对这些部件加以标识。

css3怎么实现鼠标隐藏效果css3怎么实现鼠标隐藏效果Apr 27, 2022 pm 05:20 PM

在css中,可以利用cursor属性实现鼠标隐藏效果,该属性用于定义鼠标指针放在一个元素边界范围内时所用的光标形状,当属性值设置为none时,就可以实现鼠标隐藏效果,语法为“元素{cursor:none}”。

rtl在css是什么意思rtl在css是什么意思Apr 24, 2022 am 11:07 AM

在css中,rtl是“right-to-left”的缩写,是从右往左的意思,指的是内联内容从右往左依次排布,是direction属性的一个属性值;该属性规定了文本的方向和书写方向,语法为“元素{direction:rtl}”。

css怎么实现英文小写转为大写css怎么实现英文小写转为大写Apr 25, 2022 pm 06:35 PM

转换方法:1、给英文元素添加“text-transform: uppercase;”样式,可将所有的英文字母都变成大写;2、给英文元素添加“text-transform:capitalize;”样式,可将英文文本中每个单词的首字母变为大写。

css怎么设置i不是斜体css怎么设置i不是斜体Apr 20, 2022 am 10:36 AM

在css中,可以利用“font-style”属性设置i元素不是斜体样式,该属性用于指定文本的字体样式,当属性值设置为“normal”时,会显示元素的标准字体样式,语法为“i元素{font-style:normal}”。

怎么设置rotate在css3的旋转中心点怎么设置rotate在css3的旋转中心点Apr 24, 2022 am 10:50 AM

在css3中,可以用“transform-origin”属性设置rotate的旋转中心点,该属性可更改转换元素的位置,第一个参数设置x轴的旋转位置,第二个参数设置y轴旋转位置,语法为“transform-origin:x轴位置 y轴位置”。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター

WebStorm Mac版

WebStorm Mac版

便利なJavaScript開発ツール

DVWA

DVWA

Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

SecLists

SecLists

SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター