CSS の調整

高洛峰
高洛峰オリジナル
2017-02-22 13:42:211086ブラウズ

前に言った事

両端の位置合わせはナビの制作において非常によく使われます。この記事では、CSSの両端揃えの3つの実装方法を詳しく紹介します

flex

フレキシブルボックスモデルのflexは、両端揃えを含むほとんどのレイアウト効果を保持できる強力な伸縮性のあるレイアウト方法です。主軸の配置 justify-content の両端配置属性 space-between を使用できますjustify-content的两端对齐属性space-between

justify-content: space-between;

  如果要考虑flex三个版本的兼容,则使用如下代码

  [注意]IE9-浏览器不支持

.justify-content_flex-justify{
    -webkit-box-pack: justify;
    -ms-flex-pack: justify;
    -webkit-justify-content: space-between;
    justify-content: space-between;
}


<style>
body{margin: 0;}    
ul{margin: 0;padding: 0;list-style: none;}
.list{width: 200px;overflow: hidden;border: 1px solid gray;background-color: lightgreen;line-height: 30px;}
.in{background-color: lightblue;padding: 0 10px;}
.display_flex{display: -webkit-box;display: -ms-flexbox;display: -webkit-flex;display: flex;}
.display_flex > *{display: block;}
.justify-content_flex-justify{-webkit-box-pack: justify;-ms-flex-pack: justify;-webkit-justify-content: space-between;justify-content: space-between;}
</style>
<ul class="list display_flex justify-content_flex-justify">
    <li class="in">内容</li>
    <li class="in">样式</li>
    <li class="in">行为</li>
</ul>

text-align

  水平对齐text-align本身就有一个属性值是两端对齐justify。但是,要注意的是,使用它实现两端对齐,需要注意在元素之间添加空白符(包括空格、换行符、制表符)才起作用。由于HTML结构中,<li>元素之间存在换行,所以不需要额外添加空白符

  但仅仅是这样,元素也无法实现两端对齐效果

  元素必须占满一行才行,如下所示。占满一行的元素可以实现两端对齐,没有占满的则无法实现

【text-align-last】

  显然,上面的情况都不符合要求,这时就需要使用属性text-align-last,该属性用来规定如何对齐文本的最后一行

  于是把text-align属性替换成text-align-last。但是,要兼容IE浏览器需要同时设置text-align:justify

  [注意]safari浏览器、IOS、androis4.4-浏览器不支持

<style>
body{margin: 0;}    
ul{margin: 0;padding: 0;list-style: none;}
.list{width: 200px;overflow: hidden;border: 1px solid gray;background-color: lightgreen;line-height: 30px;text-align: justify;text-align-last: justify;}
.in{background-color: lightblue;padding: 0 10px;display:inline-block;}
</style>
<ul class="list ">
    <li class="in">内容</li>
    <li class="in">样式</li>
    <li class="in">行为</li>  
</ul>

【after伪元素】

  使用text-align-last可以实现两端对齐的效果,但是兼容性并不好。通过给父元素设置伪元素:after,并为伪元素设置inline-block,并设置宽度100%,相当于伪元素:after被挤到第二行。从而使原来的元素占满了第一行,触发了两端对齐的效果

  这里要注意的是,因为空白会被解析为换行,所以可以通过设置父元素的高度height,并溢出隐藏,来解决多余的换行问题

<style>
body{margin: 0;}    
ul{margin: 0;padding: 0;list-style: none;}
.list{width: 200px;height: 30px;overflow: hidden;border: 1px solid gray;background-color: lightgreen;line-height: 30px;text-align: justify;}
.in{background-color: lightblue;padding: 0 10px;display:inline-block;}
.list:after{content:"";width:100%;display:inline-block;}
</style>
<ul class="list ">
    <li class="in">内容</li>
    <li class="in">样式</li>
    <li class="in">行为</li>  
</ul>

column

  使用多列布局column也可以实现类似的效果。column-count定义了元素的列数,例子中有3个子元素,所以定义为3列。特别要注意的是,这时需要把子元素设置为block元素才会生效

  [注意]IE9-浏览器不支持

<style>
body{margin: 0;}    
ul{margin: 0;padding: 0;list-style: none;}
.list{width: 200px;overflow: hidden;border: 1px solid gray;background-color: lightgreen;line-height: 30px;text-align: center;}
.col3{-webkit-column-count:3;-moz-column-count:3;column-count:3;}
.in{background-color: lightblue;padding: 0 10px;display:block;}
</style>
<ul class="list col3">
    <li class="in">内容</li>
    <li class="in">样式</li>
    <li class="in">行为</li>  
</ul>

  如果子元素之间需要使用竖线,且竖线高度与子元素高度相同时,使用column-rule

<style>
body{margin: 0;}    
ul{margin: 0;padding: 0;list-style: none;}
.list{width: 200px;overflow: hidden;border: 1px solid gray;background-color: lightgreen;line-height: 30px;text-align: center;}
.col3{-webkit-column-count:3;-moz-column-count:3;column-count:3;}
.col-rule{-webkit-column-rule: 1px solid black;-moz-column-rule: 1px solid black;column-rule: 1px solid black;}
.in{background-color: lightblue;padding: 0 10px;display:block;}
</style>
<ul class="list col3 col-rule">
    <li class="in">内容</li>
    <li class="in">样式</li>
    <li class="in">行为</li>  
</ul>
flex の 3 つのバージョンの互換性を考慮したい場合、次のコードを使用します

[注意]IE9 - ブラウザは🎜rrreee🎜text-align🎜🎜 水平配置 text-align自体に両端揃えの属性値があります justify コード>。ただし、これを使用して両端の位置合わせを行う場合、機能するには要素間に空白文字 (スペース、改行、タブを含む) を追加することに注意する必要があることに注意してください。 HTML 構造の <li> 要素の間には改行があるため、追加の空白文字を追加する必要はありません 🎜🎜 ただし、このように、要素は両端を揃える効果を実現できません🎜🎜 要素は埋める必要があります。以下に示すように、1行で十分です。行を埋める要素は両端に揃えることができますが、行を埋めない要素は揃えることができません 🎜🎜【text-align-last】🎜🎜 明らかに、この場合、上記の状況はいずれも満たされません。 text-align-last 属性を使用する必要があります。この属性は、テキストの最後の行を配置する方法を指定するために使用されます。そのため、text-align 属性を text-align-last。ただし、IE ブラウザと互換性を持たせるためには、同時に text-align:justify を設定する必要があります。 [注意] Safari ブラウザ、IOS、androis4.4 - ブラウザは 🎜rrreee🎜 をサポートしていません。 [疑似要素後]🎜 🎜 text-align-lastを使用すると両端を揃える効果が得られますが、互換性は良くありません。親要素に擬似要素 :after を設定し、擬似要素に inline-block を設定し、幅を 100% に設定すると、擬似要素 :after code> は 2 行目に詰め込まれています。その結果、元の要素が最初の行を占め、両端を揃える効果が発生します🎜🎜 ここで注意したいのは、空白部分は改行として解析されるため、親要素のの高さを設定できることです。 height、および冗長な改行の問題を解決するためのオーバーフローの非表示🎜rrreee🎜column🎜🎜 複数列レイアウトの column を使用しても同様の効果を実現できます。 column-count は要素の列数を定義します。この例では、子要素が 3 つあるため、3 列として定義されます。子要素を有効にするには、ブロック要素として設定する必要があることに特に注意してください。 [注意] IE9 ブラウザでは、高さが同じ場合は、column-rule を使用できます。 を使用すると、ニーズを簡単に実現できます🎜rrreee🎜 CSS 配置関連の記事については、PHP 中国語 Web サイトに注目してください。 🎜
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。