ホームページ ウェブフロントエンド CSSチュートリアル CSS を中心とした一般的なディスカッション

CSS を中心とした一般的なディスカッション

Feb 10, 2017 pm 04:26 PM

1 整列するだけです:

<style>
    .container{
        text-align: center;
    }</style><p>
    <img  src="/static/imghw/default1.png" data-src="Mars.png" class="lazy" alt="CSS を中心とした一般的なディスカッション" >
    </p><p>火星</p>
ログイン後にコピー
CSS を中心とした一般的なディスカッション
実際の効果は次のとおりです:

Mars

これの問題は、最も外側のコンテナに text-align 属性を直接設定すると、すべての子が発生することです。画像のタイトルの下にテキストの説明がある場合は、以下に示すようにテキストの説明も中央に配置されます: CSS を中心とした一般的なディスカッション

火星

火星は、太陽系の 8 つの惑星の 1 つです。 、その天文記号は ♂

しかし実際には、テキストの説明を左揃えにしたいので、テキストの説明に text-align:left 属性を追加して、親要素の属性をオーバーライドする必要があります。これを行う必要がある子要素が他にもある場合は、属性を上書きします。これ自体が悪い考えであるため、ここでは他のメソッドが使用されます。表示される画像が変化し、幅と高さが可変であるため、画像には幅と高さを明示的に設定するのが一般的です。幅がわかっている場合は、margin: 0 auto メソッドを使用できます。左右のマージン値を auto に設定すると、ブラウザは自動的に左右のマージン値を残りの幅の半分に設定します。コンテナ: CSS を中心とした一般的なディスカッション

火星


火星 (火星) は、太陽系の 8 つの惑星の 1 つです。コードは次のとおりです:

CSS を中心とした一般的なディスカッション

<style>
    figure{
        width: 100px;
        margin: 0 auto;
    }
    figcaption{
        text-align: center;
    }</style>
    <p>
        <figure>
            <img  src="/static/imghw/default1.png" data-src="Mars.png" class="lazy" alt="CSS を中心とした一般的なディスカッション" >
            <figcaption>火星</figcaption>
        </figure>
        </p><p>火星(Mars)是太阳系八大行星之一,天文符号是♂</p>
    
ログイン後にコピー

。この方法は上下のセンタリングには適用されないことに注意してください。

Use margin: 0 auto はブロック要素だけでなくインライン要素にも適用できる最も一般的な左右中央揃え方法と言えます。多くのウェブページのレイアウトは、メインコンテンツが固定幅で中央に表示されます。たとえば、淘宝網のPC側:

ただし、メインコンテンツも固定幅で中央に表示されます. 縦方向のセンタリング、問題は縦方向のセンタリングです。ただし、垂直方向のセンタリングには、テーブルセルの垂直方向のセンタリングを使用する、より一般的な方法があります。この方法では、次の属性を親コンテナに追加します:

.container{ 
    display: table-cell;
    vertical-align: middle;
}
ログイン後にコピー

効果は次のとおりです:

CSS を中心とした一般的なディスカッション

CSS を中心とした一般的なディスカッション

Table-Cell を使用する Mars

の欠点は、 Margin がテーブル レイアウトに適していないため、コンテナの Magin 属性は無効です。したがって、コンテナを中央に配置したい場合、margin: 0 auto を使用しても機能しません。解決策は、コンテナの外層に別のコンテナを追加し、そのコンテナを block margin: 0 auto として表示させることです。

もう 1 つの欠点は、テーブル セル要素の幅と高さをパーセンテージに設定すると機能しないことです。一般的なシナリオは、幅を外側のコンテナの幅の 100% に設定することです。コンテナの値を 3000px などの非常に大きな値に設定すると、100% が達成されます。もう1つの問題はIE6/7に対応していないことだが、現在本番環境は基本的にIE6/7に対応する必要はない。

このメソッドが失敗する場合があります。それは、コンテナーが位置を絶対に設定する必要がある場合です。なぜなら、position:Absolute を設定すると、(非フレックス) 要素の表示が強制的にブロックされるからです。解決策は、上記を真似して、外側のレイヤーに別のコンテナを追加し、このコンテナに絶対を適用することです。副作用として、内側のコンテナの高さと幅をパーセンテージに設定すると失敗します (位置も絶対に設定しない限り)。 )。このため、表セルの垂直方向のセンタリング表示が使用できない状況が発生します。

      这种场景就是需要在页面弹个框,这个框的位置需要在当前屏幕左右上下居中:

CSS を中心とした一般的なディスカッション

      通常需要将这个框的positiion设置成absolute,这个时候table-cell就不能发挥作用了,即使你在外面再套多两层,最外层为absolute,里层为table-cell,但由于里层无法设置height为外层的100%,也就是说高度无法刚好占满整个屏幕,所以不能起作用。

      解决办法是使用relative定位,设置top为50%,再设置margin-top为元素高度的负的一半。一开始设置top 50%,将弹框的起始位置放到页面中间,然后再设置margin-top为弹框高度的一半取负,这样使得弹框在页面中间位置再往上移一半自身的高度,这样就刚好在正中间了,左右居中也可类似处理:

<style> 
    .mask{
        position: absolute; width: 100%; height: 100%;
    }
   .outer{
        position: relative;
        top: 50%;
        left: 50%;
        margin-top: -100px;
        margin-left: -100px;
    }
    .container{
        width: 200px;
        height: 200px;
        display: table-cell;
        vertical-align: middle;
    }</style><p>
    </p><p>
        </p><p>

        </p>
    
ログイン後にコピー

效果如下:





CSS を中心とした一般的なディスカッション

火星

       这种办法的缺点是需要知道高度,无法根据内容长短自适应。所以就有了transform的方法,将margin-top一个具体的负值改成transform: translate(0, -50%),由于translate里面的面百分比是根据元素本身的高度计算的,于是就可以达到自适应的效果。将上面outer样式改为:

   .outer{
        position: relative;
        top: 50%;
        left: 50%;
width: 200px;
        transform: translate(-50%, -50%);
    }
ログイン後にコピー

      这个办法十分地方便,为了提高兼容性,需要添加-ms-和-webkit-前缀,缺点是IE8不支持。

      上面的两种办法:margin-top一个负值和translate -50%都有一个潜在的弊端, 就是如果设置left为50%是借助position为absolute的话,可能会导致换行:

<style>
    .container{
        position: relative;
    }
     .nav{
        position:absolute;
        left: 50%;
        transform: translate(-50%, 0);
        bottom: 0;
     }</style><p>
    <figure>    
        <img  src="/static/imghw/default1.png" data-src="Mars.png" class="lazy" alt="CSS を中心とした一般的なディスカッション" >
    </figure>   
    </p><p><span>地形</span><span>气候</span><span>运动</span></p> 
ログイン後にコピー

      效果如下:


CSS を中心とした一般的なディスカッション

地形气候运动

 

      可以看到,本来应该在一行显示的p元素却换行了,这是因为在一个relative元素里面absolute定位的子元素会尽可能地不超过容器的边界,通过把行内元素换行的方式。由于设置left为50%,导致p元素超了边界,所以就换行了,即使再translate -50%但已经晚了。即使是交换下两者的位置也是一样的效果,看得出浏览器执行的顺序始终是以absolute的定位优先。所以这种方法还是有不适合的场景,主要是用于左右居中定位为absolute的的情况。

      另外一个CSS3居中的办法是使用flex布局,flex布局居中十分容易和方便,只需要在父容器添加三行代码,例如上面的居中情况,可将.nav的样式改为:

    .nav{
        position:absolute;
        bottom: 0;
        display: flex;
        align-items: center;
        justify-content: center;
        width: 100%;
    }
ログイン後にコピー

      效果如下:


CSS を中心とした一般的なディスカッション

地形气候运动

       flex布局在自适应领域的功能真的是非常强大,不过IE的兼容性不好,所以说可能的话,不要太去照顾IE了。

 

      上面讨论的都是一些复合元素的居中,接下来分析单纯的行内元素的垂直居中。

      主要是要借助vertical-align: middle。如下,有一张图片和文字:

    <p>
        <img  src="/static/imghw/default1.png" data-src="Mars.png" class="lazy" alt="CSS を中心とした一般的なディスカッション" >
        <span>photo</span>
    </p>
ログイン後にコピー

      如果不做任何处理,那么默认的垂直居中是以baseline为基准:

CSS を中心とした一般的なディスカッションphoto

      为了让它们能够垂直居中,需要改变它们的居中方式:

        .container img,
        .container span{
            vertical-align: middle;
        }
ログイン後にコピー

      注意每个元素都需要设置,效果:

CSS を中心とした一般的なディスカッションphoto

       如果container的高度比图片还要高:

CSS を中心とした一般的なディスカッションphoto

 

      为了让中间的内容能够在container里上下居中,可以设置文字的line-height为container的高度,那么文字就上下居中了,由于照片是和文字是垂直居中的,所以照片在container里也上下居中了,代码:

        .container span{
            vertical-align: middle;
            line-height: 150px;
        }
ログイン後にコピー

      效果:

CSS を中心とした一般的なディスカッションphoto

       这也就给了一个启示,如果需要垂直居中一个p里的比p高度小的照片,可以添加一个元素,让它的line-height等于p的高度,如下:

<style>
        .container{
            width: 150px;
            height: 150px;
            text-align: center;
        }
       .container img{
            vertical-align: middle;
        }
        .container:before{
            content: "";
            vertical-align: middle; 
            line-height: 150px;
        }</style><p>
        <img  src="/static/imghw/default1.png" data-src="Mars.png" class="lazy" alt="CSS を中心とした一般的なディスカッション" ></p>
ログイン後にコピー

      或者是弄一个inline-block的元素,设置height为100%,这种的兼容性更好:

        .container:before{
            content: "";
            display: inline-block;
            vertical-align: middle; 
            height: 100%;
        }
ログイン後にコピー

     上下居中效果:

CSS を中心とした一般的なディスカッション

 

       还有另外一种方法借助absolute定位和margin: auto:

        .container{
            position: relative;
        }
       
        .container img{
            position: absolute;
            left: 0;
            top: 0;
            right: 0;
            bottom: 0;
            margin: auto;
        }
ログイン後にコピー

      这个方法的神奇之处在于最后的margin: auto,这种方法也适用于p,但是需要给p显式指定一个height,不然p的height会达到外层容器的100%。

      如果图片比container大,这种方法就不适用了。因为有一种比较常见的场景是:照片有一边和container一样高,另外一边按照片的比例缩放,照片居中显示,超出的截断,这种应该叫“占满”(occupy)布局。这种情况,只需要把left/right/top/bottom/设成一个很大的负值即可:

        .container img{
            position: absolute;
            left: -9999px;
            top: -9999px;
            right: -9999px;
            bottom: -9999px;
            margin: auto;
        }
        .container{
            overflow: hidden;
        }
ログイン後にコピー

      效果:

CSS を中心とした一般的なディスカッション

      综合上面的讨论,左右居中常用text-align和margin: 0 auto,上下居中一种办法是借助table-cell,另外一种是设置top: 50%和margin-top/translate(0, -50%)结合的办法,还有就是使用flex布局,对于行内元素设置vertical-align: middle,同时借助一个高度为100%的元素达到垂直居中的效果。最后是position: absolute和margin: auto结合使用的办法。可以说没有一个方法可以100%适用,可以根据不同的情况合理结合使用。

      如果上文有不妥的地方,或者读者有其它的居中方式,还请指出

更多CSS を中心とした一般的なディスカッション相关文章请关注PHP中文网!

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホット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ヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

GraphQLキャッシングの使用 GraphQLキャッシングの使用 Mar 19, 2025 am 09:36 AM

最近GraphQLの作業を開始した場合、またはその長所と短所をレビューした場合、「GraphQLがキャッシュをサポートしていない」または

最初のカスタムSvelteトランジションを作成します 最初のカスタムSvelteトランジションを作成します Mar 15, 2025 am 11:08 AM

Svelte Transition APIは、コンポーネントがカスタムSVELTE遷移を含むドキュメントを入力または離れるときにアニメーション化する方法を提供します。

ショー、Don&#039; t Tell ショー、Don&#039; t Tell Mar 16, 2025 am 11:49 AM

あなたのウェブサイトのコンテンツプレゼンテーションの設計にどれくらいの時間に費やしますか?新しいブログ投稿を書いたり、新しいページを作成したりするとき、あなたは考えていますか

Redwood.jsと動物相を使用してイーサリアムアプリを構築します Redwood.jsと動物相を使用してイーサリアムアプリを構築します Mar 28, 2025 am 09:18 AM

最近のビットコインの価格が20k $ $ USDを超えており、最近30Kを破ったので、イーサリアムを作成するために深く掘り下げる価値があると思いました

CSSを使用して、テキストシャドウやグラデーションなどのテキスト効果を作成しますか? CSSを使用して、テキストシャドウやグラデーションなどのテキスト効果を作成しますか? Mar 14, 2025 am 11:10 AM

この記事では、影やグラデーションなどのテキスト効果にCSSを使用し、パフォーマンスのために最適化し、ユーザーエクスペリエンスの向上について説明します。また、初心者向けのリソースもリストしています。(159文字)

NPMコマンドは何ですか? NPMコマンドは何ですか? Mar 15, 2025 am 11:36 AM

NPMコマンドは、サーバーの開始やコンパイルコードなどの1回限りのプロセスまたは継続的に実行されるプロセスとして、さまざまなタスクを実行します。

Eleventyで独自のBragdocを作成します Eleventyで独自のBragdocを作成します Mar 18, 2025 am 11:23 AM

開発者としての段階に関係なく、私たちが完了したタスクは、大小を問わず、個人的および専門的な成長に大きな影響を与えます。

特異性について話すために(x、x、x、x)を使用しましょう(x、x、x、x) 特異性について話すために(x、x、x、x)を使用しましょう(x、x、x、x) Mar 24, 2025 am 10:37 AM

先日、エリック・マイヤーとおしゃべりをしていたので、形成期のエリック・マイヤーの話を思い出しました。 CSS特異性に関するブログ投稿を書きました

See all articles