CSS知识

盒子模型

Paste_Image.png

盒子宽度=margin左右宽度+border左右边框宽度+padding左右宽度+content 的宽度
盒子高度=margin上下高度+border上下边框高度+padding上下高度+content 的高度。
本章节主要介绍三个属性:box-sizingborder-radiusbox-shadow

box-sizing

box-sizing有三个属性:content-box(default),border-box,padding-box
如果box-sizing的属性为border-box,则表示盒子的width属性包含border之内的宽度。
代码示例

div
{
box-sizing:border-box;
-moz-box-sizing:border-box; /* Firefox */
-webkit-box-sizing:border-box; /* Safari */
width:50%;
float:left;
}

border-radius

border-radius可以向div元素添加圆角边框,有四个属性:border-top-left-radius、 border-top-right-radius、border-bottom-right-radius、border-bottom-left-radius
代码示例-半径为50px的圆

div{
    width:100px;
    height:100px;
    background-color:#fc0;
    border-radius:50px 50px 50px 50px;
}

通过顺序添加不同的圆角边框值,可以让div的边框变得圆滑。

box-shadow

box-shadow属性向框添加一个或多个阴影
语法为:box-shadow: h-shadow v-shadow blur spread color inset;
h-shadow为水平阴影位置,v-shadow为垂直阴影位置,blur为模糊距离,spread为阴影的尺寸,color为阴影的颜色,insert可将外部阴影 (outset) 改为内部阴影。前两个属性必选,后面三个属性为可选属性。
代码示例:

div
{
   background-color:yellow;
   width:200px;
   height:100px;
   box-shadow:10px 10px 50px 20px pink inset;
}

居中

元素的居中分为水平居中和垂直居中

水平居中

常规流内联元素的居中

为父元素设置text-align:center即可

#myDiv{
   text-align:center;
}
<div id="myDiv">
    <span>内联元素水平居中</span>
</div>

常规流block元素居中

  1. 为块元素设置宽度
  2. 设置左右的margin为auto
div{
       width:100px;
       margin:auto;
}

浮动元素的居中

  1. 为元素设置宽度
  2. 设置 position:relative;
  3. left:50%;
  4. margin-left:-1/2 width;
    代码示例:
div{
        width: 500px;         
        float: left;
        position: relative;   
        left: 50%;            
        margin-left: -250px; 
}

绝对定位元素的居中

方法一

  1. 为元素设置宽度;
  2. 偏移量设为50%;
  3. margin-left:-1/2 width;
    代码示例:
div{
     position:absolute;
     width:100px;
     left:50%;
     margin-left:-50px;
}

方法二

  1. 为元素设置宽度;
  2. 设左右偏移量均为0;
  3. 设左右外边距为auto;
    代码示例:
div{
    position:absolute;
    width:100px;
    left:0;
    right:0;
    margin:auto;
}

垂直居中

单行文本垂直居中—line-height方法

  1. 为父元素设置高度
  2. 设置父元素的line-height与高度一致
HTML:
<div id="parent">
      <p id="child"></p>
</div>
CSS:
#parent{
   height:100px;
   line-height:100px;
}

内联元素垂直居中

  1. 内联元素display:inline-block;
  2. vertical-aline:middle;
HTML:
<div class="pic">  
        ![图片垂直居中](https://ss0.bdstatic.com/5aV1bjqh_Q23odCf/static/superman/img/logo/bd_logo1_31bdc765.png)  
   </div>  
CSS:
.pic{ 
       display:inline-block; //display:table-cell也可以,但不支持IE-6/7
       vertical-align:middle;}  

块级元素

绝对定位居中

  1. 设置Margin:auto;
  2. 为元素添加绝对定位;
  3. 上下左右偏移量均为0;
    代码示例:
div{
     margin:auto;
     position:absolute;
     left:0;top:0;right:0;bottom:0;
}

浮动元素垂直居中

  1. 为元素设置高度
  2. 设置 position:relative;
  3. top:50%;
  4. margin-top:-1/2 width;
    代码示例:
div{
        width: 500px;         
        float: left;
        position: relative;   
        top: 50%;            
        margin-top: -250px; 
}

绝对定位元素的居中

  1. 为元素设置高度;
  2. 偏移量设为50%;
  3. margin-top:-1/2 width;
    代码示例:
div{
     position:absolute;
     width:100px;
     top:50%;
     margin-top:-50px;
}

绝对定位元素居中更多方法可参考这里
flexbox布局也可以实现居中,这里先不做详细介绍。

定位&浮动

利用定位和浮动,可以建立列式布局,实现将布局的一部分与另一部分重叠等效果。
CSS有三种定位机制:普通流、浮动和绝对定位,如果没有特殊指定,所有框都在普通流中定位

position 定位

position有四种不同的属性:static、relative、absolute、fixed

  1. static:元素框正常生成。块级元素生成一个矩形框,作为文档流的一部分,行内元素则会创建一个或多个行框,置于其父元素中。
  2. relative:元素框偏移某个距离。元素仍保持其未定位前的形状,它原本所占的空间仍保留。
  3. absolute:元素框从文档流完全删除,并相对于其包含块定位。包含块可能是文档中的另一个元素或者是初始包含块。元素原先在正常文档流中所占的空间会关闭,就好像元素原来不存在一样。元素定位后生成一个块级框,而不论原来它在正常流中生成何种类型的框。
    4.fixed:元素框的表现类似于将 position 设置为 absolute,不过其包含块是视窗本身。
    CSS定位属性除了position的四中属性外,还有top、right、bottom、left、overflow、vertical-align、z-index、clip属性。通过以上属性可以具体定位元素的位置。

相对定位

相对定位元素中的相对是指想对自己,也就是将元素相对于自己进行重新布局,该元素原来的位置依然存在于文档流中,不会被删除,也即不会被别的元素覆盖。
代码示例:

#box_relative {
  position: relative;
  left: 30px;
  top: 20px;
}

绝对定位

绝对定位元素的位置与文档流无关,即文档流中已将该元素删除,这一点与相对定位完全不同。
元素的绝对定位指的是相对于其祖先元素的绝对定位,如果没有指定祖先元素,则该元素绝对定位的祖先元素则为window
代码示例:

HTML:
<div class="parent">
        <div class="child"></div>
</div>
CSS:
.parent
{
      position:relative//为祖先元素设置定位为relative
}
.child
{
      position:absolute;
      left:100px;
      top:50px;
}

flex布局

.parent{display:flex;justify-content:center;align-items:center;}

浮动

浮动的框可以向左或向右移动,直到它的外边缘碰到下一个浮动框或边缘框就会停止浮动。
代码示例:

<ul>
     <li><a href="http://baidu.com">导航链接一</a></li>
     <li><a href="http://baidu.com">导航链接二</a></li>
     <li><a href="http://baidu.com">导航链接三</a></li>
     <li><a href="http://baidu.com">导航链接四</a></li>
    </ul>
li {
        float:left;
        height:40px;
        margin-right:20px;
        list-style:none;
}

清除浮动

clear属性规定元素的哪一侧不允许其他浮动元素。
代码示例:

<html>
<head>
<style type="text/css">
img
  {
      float:left;
      clear:both;
  }
</style>
</head>
<body>
      ![](/i/eg_smile.gif)
      ![](/i/eg_smile.gif)
</body>
</html>

布局

display

display属性规定元素应该生成的框的类型。
display常见的属性有:inline、block、inline-block、table、table-caption、table-cell、table-column、table-column-group、table-row、table-row-group、none
display:inline是指元素以内联元素显示,和其他元素都在一行上,高、行高及顶和底边距不可改变。

  1. 水平方向上根据direction依次布局
  2. 不会在元素前后进行换行
  3. 受white-space控制
  4. margin/padding在竖直方向上无效,水平方向上有效
  5. width/height属性对非替换行内元素无效,宽度由元素内容决定
  6. 非替换行内元素的行框高由line-height确定,替换行内元素的行框高由height,margin,padding,border决定
  7. 浮动或绝对定位时会转换为block
  8. vertical-align属性生效

display:block是指元素以块元素显示

  1. 处于常规流中时,如果width没有设置,会自动填充满父容器
  2. 可以应用margin/padding
  3. 在没有设置高度的情况下会扩展高度以包含常规流中的子元素
  4. 处于常规流中时布局时在前后元素位置之间(独占一个水平空间)
  5. 忽略vertical-align属性。

display:inline-block将对象呈递为内联对象,但是对象的内容作为块对象呈递。旁边的内联对象会被呈递在同一行内,允许空格。(准确地说,应用此特性的元素呈现为内联对象,周围元素保持在同一行,但可以设置宽度和高度地块元素的属性)。
display:none是会让元素完全从渲染树中消失,渲染的时候不占据任何空间。

详细的布局可参考这里

CSS3

前面的章节已经涉及到一些CSS3的知识了,比如border-radius、box-sizing等都属于CSS3内容。接下来主要对背景、2D/3D转换、过渡、动画等进行介绍!

背景新增属性

CSS3新增的背景属性有:background-size、background-origin

background-size

background-size属性规定背景图片的尺寸,可以以像素或百分比规定尺寸,如果用百分比那么是相对于父元素的宽度、高度。
代码示例:

div
{
   background:url(bg_flower.gif);
   -moz-background-size:63px 100px; /* 老版本的 Firefox */
   background-size:63px 100px;
   background-repeat:no-repeat;
}

background-origin

background-origin属性规定背景图片的定位区域,背景图片可以放置于content-boxpadding-boxborder-box 区域。
代码示例:

div
{
   background:url(bg_flower.gif);
   background-repeat:no-repeat;
   background-size:100% 100%;
   -webkit-background-origin:content-box; /* Safari */
   background-origin:content-box;
}

文本新增属性

CSS3中文本的新增属性有text-shadowword-wrap
text-shadow可向文本应用阴影,规定水平阴影、垂直阴影、模糊距离以及阴影的颜色。
代码示例:

h1
{
   text-shadow: 5px 5px 5px #FF0000;
}

word-wrap属性允许文本强制换行。
p {word-wrap:break-word;}

2D 转换

2D转换方法主要有:translate()、rotate()、scale()、skew()、matrix()、

translate()

通过该方法,可以是元素从当前位置移动,有left(x坐标)和top(y坐标)两个参数。
代码示例:

div
{
   transform: translate(50px,100px);
   -ms-transform: translate(50px,100px);        /* IE 9 */
   -webkit-transform: translate(50px,100px);    /* Safari and Chrome */
   -o-transform: translate(50px,100px);     /* Opera */
   -moz-transform: translate(50px,100px);       /* Firefox */
} 

rotate()

rotate()方法可以将元素按照顺时针进行旋转,如果值为负数,则按照逆时针旋转。
代码示例:

div
{
   transform: rotate(30deg);
   -ms-transform: rotate(30deg);        /* IE 9 */
   -webkit-transform: rotate(30deg);    /* Safari and Chrome */
   -o-transform: rotate(30deg);     /* Opera */
   -moz-transform: rotate(30deg);       /* Firefox */
}

scale()

scale()方法可以让元素成倍的放大或缩小,从宽度和高度两个方面不同程度的放大或缩小。
代码示例:

div
{
    transform: scale(2,4);    /* 宽度放大2倍,高度放大4倍 */
   -ms-transform: scale(2,4);   /* IE 9 */
   -webkit-transform: scale(2,4);   /* Safari 和 Chrome */
   -o-transform: scale(2,4);    /* Opera */
   -moz-transform: scale(2,4);  /* Firefox */
}

skew()

skew()方法可以让元素翻转一定的角度,根据给定的水平线和垂直线的参数。
代码示例:

div
{
  transform: skew(30deg,20deg);        /* 绕x轴旋转30度,绕y轴旋转20度 */
  -ms-transform: skew(30deg,20deg); /* IE 9 */
  -webkit-transform: skew(30deg,20deg); /* Safari and Chrome */
  -o-transform: skew(30deg,20deg);  /* Opera */
  -moz-transform: skew(30deg,20deg);    /* Firefox */
}

matrix()

matrix()方法把所有 2D 转换方法组合在一起;matrix() 方法需要六个参数,包含数学函数,允许您:旋转、缩放、移动以及倾斜元素。
代码示例:

div
{
  transform:matrix(0.866,0.5,-0.5,0.866,0,0);
  -ms-transform:matrix(0.866,0.5,-0.5,0.866,0,0);       /* IE 9 */
  -moz-transform:matrix(0.866,0.5,-0.5,0.866,0,0);  /* Firefox */
  -webkit-transform:matrix(0.866,0.5,-0.5,0.866,0,0);   /* Safari and   
    Chrome */
  -o-transform:matrix(0.866,0.5,-0.5,0.866,0,0);        /* Opera */
}

兼容

更新中

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,723评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,485评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,998评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,323评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,355评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,079评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,389评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,019评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,519评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,971评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,100评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,738评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,293评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,289评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,517评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,547评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,834评论 2 345

推荐阅读更多精彩内容

  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 13,728评论 1 92
  • 各种纯css图标 CSS3可以实现很多漂亮的图形,我收集了32种图形,在下面列出。直接用CSS3画出这些图形,要比...
    剑残阅读 9,476评论 0 8
  • 选择符 子选择符:> 紧邻同胞选择符:+ 一般同胞选择符:~ 属性名选择符:标签名[属性名] 属性值选择符:标签名...
    Mike_Gu阅读 357评论 0 0
  • CSS 层叠样式表(表示层) 一、CSS引入方式 1.CSS行内样式 直接使用style属性 style=”wid...
    Lizzy95阅读 352评论 0 1
  • 多肉默默生长,龟背竹偷偷分了新芽,绿萝今年格外怯怯弱弱,沉默依旧是那束干花,青竹如往年一样。各种物品箱子挤挤埃挨。...
    倾新阅读 137评论 0 0