美文网首页我爱编程
CSS中的一些细节知识

CSS中的一些细节知识

作者: edwin1993 | 来源:发表于2017-08-26 23:04 被阅读0次

    特殊性

    有的时候我们为同一个元素设置了不同的CSS样式代码,那么元素会启用哪一个CSS样式呢?我们来看一下面的代码:

    p{color:red;} 
    .first{color:green;} 
    
    <p class="first">三年级时,我还是一个<span>胆小如鼠</span>的小女孩。</p>
    

    p和.first都匹配到了p这个标签上,那么会显示哪种颜色呢?green是正确的颜色,那么为什么呢?是因为浏览器是根据权值来判断使用哪种css样式的,权值高的就使用哪种css样式。

    下面是权值的规则:

    标签的权值为1,类选择符的权值为10,ID选择符的权值最高为100

    p{color:red;} /*权值为1*/ 
    p span{color:green;} /*权值为1+1=2*/ 
    .warning{color:white;} /*权值为10*/ 
    p span.warning{color:purple;} /*权值为1+1+10=12*/ 
    #footer .note p{color:yellow;} /*权值为100+10+1=111*/
    

    重要性

    我们在做网页代码的时,有些特殊的情况需要为某些样式设置具有最高权值,怎么办?这时候我们可以使用!important来解决。

    p{color:red!important;}
    

    文字排版

    一些偶尔用到的文段排版

    下划线:
    span{text-decoration:underline;}
    删除线:
    .oldPrice{text-decoration:line-through;}
    缩进:
    p{text-indent:2em;}
    
    文字间隔或者字母间隔:
    h1{ letter-spacing:50px; }
    h1{ word-spacing:50px; }
    
    
    删除线.png

    元素分类:

    在CSS中,html中的标签元素大体被分为三种不同的类型:块状元素、内联元素(又叫行内元素)和内联块状元素。

    块级元素特点:

    1、每个块级元素都从新的一行开始,并且其后的元素也另起一行。
    2、元素的高度、宽度、行高以及顶和底边距都可设置。
    3、元素宽度在不设置的情况下,是它本身父容器的100%(和父元素的宽度一致),除非设定一个宽度。

    常用的块状元素有:
    <div>、<p>、<h1>...<h6>、<ol>、<ul>、<dl>、<table>、<address>、<blockquote> 、<form>


    内联元素特点:

    1、和其他元素都在一行上;
    2、元素的高度、宽度及顶部和底部边距不可设置;
    3、元素的宽度就是它包含的文字或图片的宽度,不可改变。

    常用的内联元素有:
    <a>、<span>、
    、<i>、<em>、<strong>、<label>、<q>、<var>、<cite>、<code>


    内联块状元素特点:

    1、和其他元素都在一行上;
    2、元素的高度、宽度、行高以及顶和底边距都可设置。

    常用的内联块状元素有:
    <img>、<input>

    通过以下方式可以实现转换
    display:block;
    display:inline;
    display:inline-block;
    eg:将内联元素a转换为块状元素
    a{display:block;}
    

    css布局模型

    布局模型与盒模型一样都是 CSS 最基本、 最核心的概念。 但布局模型是建立在盒模型基础之上,又不同于我们常说的 CSS 布局样式或 CSS 布局模板。
    CSS包含3种基本的布局模型,用英文概括为:Flow、Layer 和 Float。
    在网页中,元素有三种布局模型:
    1、流动模型(Flow)
    2、浮动模型 (Float)
    3、层模型(Layer)

    • 流动模型

    先来说一说流动模型,流动(Flow)是默认的网页布局模式。也就是说网页在默认状态下的 HTML 网页元素都是根据流动模型来分布网页内容的。

    流动布局模型具有2个比较典型的特征:

    第一点,块状元素都会在所处的包含元素内自上而下按顺序垂直延伸分布,因为在默认状态下,块状元素的宽度都为100%。实际上,块状元素都会以行的形式占据位置。
    第二点,在流动模型下,内联元素都会在所处的包含元素内从左到右水平分布显示。

    如果现在我们想让两个块状元素并排显示,设置元素浮动(float:value)


    • 层模型

    层布局模型就像是图像软件PhotoShop中非常流行的图层编辑功能一样,每个图层能够精确定位操作。

    层模型有三种形式:
    1、绝对定位(position: absolute)
    2、相对定位(position: relative)
    3、固定定位(position: fixed)

    绝对定位

    如果想为元素设置层模型中的绝对定位,需要设置position:absolute(表示绝对定位),这条语句的作用将元素从文档流中拖出来,然后使用left、right、top、bottom属性相对于其最接近的一个具有定位属性的父包含块进行绝对定位。如果不存在这样的包含块,则相对于body元素,即相对于浏览器窗口。

    div{ 
        position:absolute;
        left:100px;
        top:50px; }
    
    图片.png
    相对定位

    如果想为元素设置层模型中的相对定位,需要设置position:relative(表示相对定位),它通过left、right、top、bottom属性确定元素在正常文档流中的偏移位置。相对定位完成的过程是首先按static(float)方式生成一个元素(并且元素像层一样浮动了起来),然后相对于以前的位置移动,移动的方向和幅度由left、right、top、bottom属性确定,偏移前的位置保留不动。
    什么叫做“偏移前的位置保留不动”呢?
    就是原位置虽然因为位移空出来了,但是依然为元素保留,不会被占用。

    absolute.png relative.png
    固定定位

    fixed:表示固定定位,与absolute定位类型类似,但它的相对移动的坐标是视图(屏幕内的网页窗口)本身。由于视图本身是固定的,它不会随浏览器窗口的滚动条滚动而变化,除非你在屏幕中移动浏览器窗口的屏幕位置,或改变浏览器窗口的显示大小,因此固定定位的元素会始终位于浏览器窗口内视图的某个位置,不会受文档流动影响,这与background-attachment:fixed;属性功能相同。

    Relative与Absolute组合使用

    可以相对于其它元素进行定位,使用position:relative,但是必须遵守下面规范:

    1、参照定位的元素必须是相对定位元素的前辈元素:
    
    <div id="box1"><!--参照定位的元素-->
        <div id="box2">相对参照元素进行定位</div><!--相对定位元素-->
    </div>
    2、参照定位的元素必须加入position:relative;
    #box1{
        width:200px;
        height:200px;
        position:relative;        
    }
    3、定位元素加入position:absolute,便可以使用top、bottom、left、right来进行偏移定位了。
    #box2{
        position:absolute;
        top:20px;
        left:30px;         
    }
    

    盒模型代码简写

    盒模型时外边距(margin)、内边距(padding)和边框(border)设置上下左右四个方向的边距是按照顺时针方向设置的:上右下左。
    通常有下面两种缩写方法:

    1、如果top、right、bottom、left的值相同,如下面代码:
    margin:10px 10px 10px 10px;
    可缩写为:
    margin:10px;

    2、如果top和bottom值相同、left和 right的值相同,如下面代码:
    margin:10px 20px 10px 20px;
    可缩写为:
    margin:10px 20px;

    长度值

    长度单位总结一下,目前比较常用到px(像素)、em、% 百分比,要注意其实这三种单位都是相对单位。

    1、像素
    像素为什么是相对单位呢?因为像素指的是显示器上的小点(CSS规范中假设“90像素=1英寸”)。实际情况是浏览器会使用显示器的实际像素值有关,在目前大多数的设计者都倾向于使用像素(px)作为单位。

    2、em
    就是本元素给定字体的 font-size 值,如果元素的 font-size 为 14px ,那么 1em = 14px;如果 font-size 为 18px,那么 1em = 18px。如下代码:

    p{font-size:12px;text-indent:2em;}
    

    上面代码就是可以实现段落首行缩进 24px(也就是两个字体大小的距离)。

    下面注意一个特殊情况:

    但当给 font-size 设置单位为 em 时,此时计算的标准以 p 的父元素的 font-size 为基础。如下代码:

    html:
    <p>以这个<span>例子</span>为例。</p>
    css:
    
    p{font-size:14px}
    span{font-size:0.8em;}
    

    结果 span 中的字体“例子”字体大小就为 11.2px(14 * 0.8 = 11.2px)。

    3、百分比

    p{font-size:12px;line-height:130%}
    

    设置行高(行间距)为字体的130%(12 * 1.3 = 15.6px)

    水平居中设置

    对于行内元素:text-align:center
    对于块状元素:

    width:200px;/*定宽*/ 
    margin:20px auto;/* margin-left 与 margin-right 设置为 auto */
    
    不定宽块状元素方法
    • 加入 table 标签
      为什么选择方法一加入table标签? 是利用table标签的长度自适应性---即不定义其长度也不默认父元素body的长度(table其长度根据其内文本长度决定),因此可以看做一个定宽度块元素,然后再利用定宽度块状居中的margin的方法,使其水平居中。
    margin:0 auto;
    
    • 设置 display: inline 方法:与第一种类似,显示类型设为 行内元素,进行不定宽元素的属性设置。
      改变块级元素的 display 为 inline 类型(设置为 行内元素 显示),然后使用 text-align:center 来实现居中效果。
    .container{ text-align:center; }
    .container ul{ 
         display:inline; 
    }
    
    • 设置 position:relative 和 left:50%:利用 相对定位 的方式,将元素向左偏移 50% ,即达到居中的目的。
      通过给父元素设置 float,然后给父元素设置 position:relative 和 left:50%,子元素设置 position:relative 和 left: -50% 来实现水平居中。
    .container{  float:left;
        position:relative;
        left:50% }
     .container ul{   
        position:relative;
        left:-50%; }
    

    我们可以这样理解:假想ul层的父层(即下面例子中的div层)中间有条平分线将ul层的父层(div层)平均分为两份,ul层的css代码是将ul层的最左端与ul层的父层(div层)的平分线对齐;而li层的css代码则是将li层的平分线与ul层的最左端(也是div层的平分线)对齐,从而实现li层的居中。

    垂直居中

    分两种情况:父元素高度确定的单行文本,以及父元素高度确定的多行文本。

    父元素高度确定的单行文本

    父元素高度确定的单行文本的竖直居中的方法是通过设置父元素的 height 和 line-height 高度一致来实现的。(height: 该元素的高度,line-height: 顾名思义,行高(行间距),指在文本中,行与行之间的 基线间的距离 )。

    line-height 与 font-size 的计算值之差,在 CSS 中成为“行间距”。分为两半,分别加到一个文本行内容的顶部和底部。

    这种文字行高与块高一致带来了一个弊端:当文字内容的长度大于块的宽时,就有内容脱离了块。

    父元素高度确定的多行文本、图片等

    方法一:使用插入 table (包括tbody、tr、td)标签,同时设置 vertical-align:middle。

    <body>
    <table><tbody><tr><td class="wrap">
    <div>
        <p>看我是否可以居中。</p>
    </div>
    </td></tr></tbody></table>
    </body>
    
    td 标签默认情况下就默认设置了 vertical-align 为 middle,
    

    方法二:设置块级元素的 display 为 table-cell(设置为表格单元显示)

    .container{
        height:300px;
        background:#ccc;
        display:table-cell;/*IE8以上及Chrome、Firefox*/
        vertical-align:middle;/*IE8以上及Chrome、Firefox*/
    }
    

    相关文章

      网友评论

        本文标题:CSS中的一些细节知识

        本文链接:https://www.haomeiwen.com/subject/lzvpdxtx.html