CSS2-3常見的demo列子總結

龍恩0707發表於2015-10-15

CSS2-3常見的demo列子總結

閱讀目錄

1. css超過一行或者多行後顯示省略號。

  1. Css實現超過一行後顯示省略號;程式碼如下:
<p style="width:200px;white-space: nowrap;text-overflow:ellipsis;overflow:hidden;">我武漢東方店hi肉肉肉團阿斯達薩頂頂發感染他人山東省地方反而</p>

效果如下:

我們下面來理解 text-overflow 和 white-space 2個屬性;

一:text-overflow屬性  clip | ellipsis 預設值clip

  clip:當物件內文字溢位時不顯示省略標記(...),而是將溢位的部分裁切掉。

<p style="width:200px;white-space: nowrap;text-overflow:clip;overflow:hidden;">我武漢東方店hi肉肉肉團阿斯達薩頂頂發感染他人山東省地方反而</p>  

效果如下:

  ellipsis:當物件內文字溢位時顯示省略標記(...)。

二:white-space:normal | pre | nowrap | pre-wrap | pre-line 預設值為normal

 normal:預設處理方式。

  pre:用等寬字型顯示預先格式化的文字,不合並文字間的空白距離,當文字超出邊界時不換行。可查閱pre物件

  nowrap:強制在同一行內顯示所有文字,直到文字結束或者遭遇br物件。

  pre-wrap:用等寬字型顯示預先格式化的文字,不合並文字間的空白距離,當文字碰到邊界時發生換行。

  pre-line:保持文字的換行,不保留文字間的空白距離,當文字碰到邊界時發生換行。

含義:使用text-overflow:ellipsis 和 white-space: nowrap 的含義是:把文字限制在一行(white-space:nowrap), 這一行是有限制的(因此需要設定width), 並且當內容溢位來的時候需要隱藏(overflow:hidden),然後出現省略號(text-overflow:ellipsis);

 2. Css實現超過指定的行數後顯示省略號;

我們看看webkit瀏覽器或者移動端瀏覽器的情況;在webkit瀏覽器中我們可以直接使用webkit的css的擴充套件屬性(也是私有屬性) –webkit-line-clamp; 注意:這個屬性不屬於css規範當中的屬性。但是需要如下屬性結合使用:

  1. display: -webkit-box; 將物件作為彈性伸縮盒子模型顯示。
  2. -webkit-box-orient: vertical; 設定或檢索伸縮盒子物件的子元素的排列方式。
  3. text-overflow:ellipsis; 指定多行文字的情況下,使用省略號顯示超出範圍的文字。
  4. -webkit-line-clamp: 2; 含義是超出2行後的文字 使用省略號來顯示;

如下demo程式碼:

<p style="width:200px;text-overflow:ellipsis;display: -webkit-box;-webkit-line-clamp: 2;-webkit-box-orient: vertical;overflow:hidden;">我武漢東方店hi肉肉肉團阿斯達薩頂頂發感染他人山東省地方反而</p>

頁面顯示效果如下:

如上的解決方案是針對webkit瀏覽器或者移動端來做的。

2. css圖片未知高度垂直居中完美解決方案。

方法1. css圖片未知高度在標準瀏覽器下垂直居中.

該方法的實現方式是將外部容器顯示模式設定成display:table;img標籤外部再套一個容器,並對該容器設定顯示模式為display:table-cell; 類似與表格的顯示方式,且不要使用float等屬性,但是在IE6、IE7下是不支援的;如下程式碼:

<ul class="list">
    <li>
        <img src="m1.jpg"/>
    </li>
</ul>
<ul class="list">
    <li>
        <img src="m2.jpg"/>
    </li>
<ul>

CSS程式碼如下:

<style>
      *{margin:0;padding:0;}
      ul,li{list-style:none;}
      .list {
         float:left;
         margin:20px;
         width:250px;
         height:150px;
         display:table;
         text-align:center;
         border:1px solid #d3d3d3;
      }
      .list li{
         display:table-cell;
         vertical-align:middle;
      }
  </style>

效果截圖如下:

針對IE6,IE7的解決方案是使用定位的方式;我們可以使用父容器使用相對定位,對img的外層容器使用絕對定位 top:50%;left:50%;然後再對img元素定位top:-50%;left:-50%;即可,程式碼如下:

<style>
      *{margin:0;padding:0;}
      ul,li{list-style:none;}
      .list {
         *position:relative; 
         float:left;
         margin:20px;
         width:250px;
         height:150px;
         display:table;
         text-align:center;
         border:1px solid #d3d3d3;
      }
      .list li{
         display:table-cell;
         vertical-align:middle;
         *position:absolute;
         *left:50%;
         *top:50%;
      }
      .list li img{
         position:relative;
         *left:-50%;
         *top:-50%;
      }
  </style>

效果如下演示:

方法2. css圖片未知高度在標準瀏覽器下垂直居中.

下面我們是使用css的hack的解決方案,我們首先來看看標準瀏覽器下;比如現在的HTML程式碼如下:

<ul class="list">
    <li>
        <img src="m1.jpg"/>
    </li>
</ul>

Css程式碼如下:

*{margin:0;padding:0;}
ul,li{list-style:none;}
.list {
    margin:20px;
    width:250px;
    height:150px;
    display:table-cell;
    text-align:center;
    vertical-align:middle;
    border:1px solid #d3d3d3;
}

在標準瀏覽器顯示效果如下:

IE6下如下:

下面我們使用定位的方式對IE6,7下的居中對齊修復;如下我們的css程式碼改成如下:

<style>
      *{margin:0;padding:0;}
      ul,li{list-style:none;}
      .list {
         position:relative; 
         margin:20px;
         width:250px;
         height:150px;
         display:table-cell;
         text-align:center;
         vertical-align:middle;
         border:1px solid #d3d3d3;
      }
      
      .list li{
         *position:absolute; 
         *top:50%;            
      }
      .list li img{
         *position:relative; 
         *top:-50%;
         *left:-50%;         
      }
  </style>

IE6截圖如下:

這個方法有一個缺點是:對父級容器使用display:table-cell, 因此不能同時使用margin或者float屬性等。

方法3. css圖片未知高度在標準瀏覽器下垂直居中.

在標準瀏覽器下外部容器還是使用顯示模式設定為display:table-cell; IE6/7下利用img標籤的前面插入一對空標籤的方法;如下程式碼:

<ul class="list">
    <li>
        <i></i><img src="m1.jpg"/>
    </li>
</ul>

CSS程式碼如下:

<style>
      *{margin:0;padding:0;}
      ul,li{list-style:none;}
      .list {
         width:250px;
         height:150px;
         display:table-cell;
         text-align:center;
         vertical-align:middle;
         border:1px solid #d3d3d3;
      }
      
      .list i{
         *display: inline-block;
         *height:100%;
         *vertical-align:middle;
      }
      .list li img{
         *vertical-align:middle;        
      }
  </style>

在IE6下顯示效果還是如下:

方法4. css圖片未知高度在標準瀏覽器下垂直居中.

該方法對標準瀏覽器下還是使用上面的display:table-cell來解決,但是針對IE6或者7的話,將圖片外部容器的字型大小設定成該高度的0.873倍就可以實現居中,如下HTML程式碼:

<ul class="list">
    <li>
        <img src="m1.jpg"/>
    </li>
</ul>

Css程式碼如下:

<style>
      *{margin:0;padding:0;}
      ul,li{list-style:none;}
      .list {
         width:250px;
         height:150px;
         display:table-cell;
         text-align:center;
         vertical-align:middle;
         border:1px solid #d3d3d3;
         /* 相容IE6或者7 */
         *display:block;
         *font-size:131px; /* 字型大小約為容器高度的0.873倍 150*0.873 = 349 */
         *font-family:Arial; /* 防止非utf-8引起的hack失效問題,如gbk編碼 */
      }
  </style>

效果如下:

3. 學習使用 :before和 :after偽元素

偽元素 顧名思義 就是建立了一個虛假元素,並插入到目標元素之前或者之後。這兩個偽類下特有的屬性content,用於在css渲染中頭部和尾部新增內容,偽元素必須與content結合來使用,否則毫無意義,但是新增的內容不會改變文件的內容,不會出現在DOM結構中,僅僅是對使用者是可見的,但是對DOM結構是不可見的。比如如下程式碼:

<div class="example">example</div>

CSS程式碼如下:

.example:before{
    content:"#";
}
 .example:after{
    content: "@";
}

在頁面上被渲染成如下內容:

#example@

二:指定個別元素不進行插入

針對這個問題,content還有一個屬性none,含義是不需要為該元素有任何內容;比如如下程式碼:

<div class="example">example</div>
<div class="example sample">example</div>
<div class="example">example</div>

首先我對所有example類名前面新增#號,後面新增@符合,然後我對包含sample類名的前面和後面不新增任何符合程式碼如下:

.example:before{
    content:"#";
}
.example:after{
    content: "@";
}
.sample:before{
    content: none
}
.sample:after{
    content: none
}

三:插入影象檔案

我們不僅可以使用before或者after選擇器的在前面或者後面插入文字外,我們還可以插入影象檔案,插入影象檔案時,需要使用url屬性值來指定影象的路徑,比如如下程式碼:

<div class="example">example</div>
<div class="example sample">example</div>
<div class="example">example</div>

CSS程式碼如下:

.example:before{content:url("https://img.alicdn.com/tps/TB1sb2HJVXXXXXAXpXXXXXXXXXX-120-55.png_120x120.jpg");}
.example:after{
    content: "@";
}

效果如下:

可以看到,在前面插入了一個圖片。

瀏覽器支援程度:firefox,chrome,safari,opera,IE8+等瀏覽器。

2. 使用content屬性來插入專案編號

<元素>: before {content:counter(計算器名)}

並且需要在元素的樣式中追加對元素的counter-increment屬性的指定。

注意:計數器名可以任意寫,但是counter-increment指定的名字要相同。

如下程式碼:

<h1>我想解決單身問題</h1>
<p>可惜我不帥...沒有女孩喜歡我....</p>
<h1>我想解決單身問題</h1>
<p>可惜我不帥...沒有女孩喜歡我....</p>
<h1>我想解決單身問題</h1>
<p>可惜我不帥...沒有女孩喜歡我....</p>

Css程式碼如下:

h1:before{content:counter(mycounter)".";}
h1{counter-increment:mycounter;}

效果如下:

瀏覽器支援程度:ie8+,chorme,firefox等;

3. 在專案編號中追加文字;

HTML程式碼還是如上

css程式碼如下:

h1:before{content:"第"counter(mycounter)"章"".";}
h1{counter-increment:mycounter;}

效果如下:

我們還可以指定編號的樣式,我想讓顏色變為紅色,字型大小為18px,如下程式碼:

h1:before{content:"第"counter(mycounter)"章"".";color:red;font-size:18px;}

h1{counter-increment:mycounter;}

效果如下:

指定編號種類

使用before選擇器或者after選擇器中的content屬性,我們不僅可以追加數字編號,我們還可以追加字母編號或者羅馬數字編號,如下方法指定:

content: counter(計算器名,編號種類)

比如指定大寫字母編號時,使用”upper-alpha”屬性,指定大寫羅馬字母時,使用”upper-roman”屬性。

如下css程式碼:

h1:before{content:counter(mycounter,upper-alpha);color:red;font-size:36px;}
h1{counter-increment:mycounter;}
p:before{content:counter(longen,upper-roman);color:blue;font-size:36px;}
p{counter-increment:longen;}

效果如下:

編號巢狀:

可以在大編號中巢狀中編號,可以在中編號中巢狀小編號。如下程式碼:

<h1>我想解決單身問題</h1>
<h2>可惜我不帥...沒有女孩喜歡我....</h2>
<h2>我想解決單身問題</h2>
<h1>可惜我不帥...沒有女孩喜歡我....</h1>
<h2>我想解決單身問題</h2>
<h2>可惜我不帥...沒有女孩喜歡我....</h2>

Css程式碼如下:

h1:before{content:counter(mycounter)".";}
h1{counter-increment:mycounter;}

h2:before{content:counter(longen);}
h2{counter-increment:longen;margin-left:40px;}

效果如下:

在上面程式碼中,6箇中標題的編號是連續的,如果要將第二個大標題裡中標題重新開始編號的話,需要在大標題中使用counter-reset屬性將中編號進行重置。如下程式碼:

h1:before{content:counter(mycounter)".";}
h1{counter-increment:mycounter;counter-reset:longen;}

h2:before{content:counter(longen);}
h2{counter-increment:longen;margin-left:40px;}

如下效果:

我們再來看一個複雜一點的多層嵌入的demo,如下:

<h1>大標題</h1>
<h2>中標題</h2>
<h3>小標題</h3>
<h3>小標題</h3>

<h2>中標題</h2>
<h3>小標題</h3>
<h3>小標題</h3>

<h1>大標題</h1>
<h2>中標題</h2>
<h3>小標題</h3>
<h3>小標題</h3>

<h2>中標題</h2>
<h3>小標題</h3>
<h3>小標題</h3>

CSS程式碼如下:

h1:before{content:counter(mycounter)".";}
h1{counter-increment:mycounter;counter-reset:subcounter;}

h2:before{content:counter(mycounter) '-' counter(subcounter)'.';}
h2{counter-increment:subcounter;counter-reset:subsubcounter;margin-left:40px;color:red;}
h3:before{content:counter(mycounter) '-' counter(subcounter) '-' counter(subsubcounter) '.';}
h3{counter-increment:subsubcounter;margin-left:40px;color:blue;}

效果如下:

在字串兩邊新增巢狀文字元號

可以使用content屬性的open-quote屬性值與close-quote屬性值在字串兩邊新增如:括號,單引號,雙引號之類的巢狀文字元號,open-quote屬性值用於新增開始的巢狀文字元號,close-quote屬性值用於新增結尾的巢狀文字元號。

<h1>括號</h1>
<h2>雙引號</h2>
<h3>單引號</h3>

Css程式碼:

h1:before{content:open-quote;}
h1:after{content:close-quote;}
h1{quotes:"(" ")"}
      
h2:before{content:open-quote;}
h2:after{content:close-quote;}
h2{quotes:"\"" "\""}

h3:before{content:open-quote;}
h3:after{content:close-quote;}
 h3{quotes:'\'' '\''}

截圖如下:

其中雙引號和單引號需要使用轉義字元 “\”進行轉義。

相關文章