美文网首页
css 基础+实战布局

css 基础+实战布局

作者: 赵碧菡 | 来源:发表于2017-12-10 18:14 被阅读0次

一、margin

margin与可视尺寸
  • 适用于,没有设定width/height的普通block水平元素
  • 只适用于水平方向

利用这一特性实现一侧定宽自适应布局

图片.png
margin与占据尺寸
  • 适用于block/inline-block水平元素,inline元素可设置margin-left和margin-right,设置margin-top、margin-bottom 无效。
  • 与有没有设定width/height值无关
  • 适用于垂直和水平方向
百分比margin

垂直和水平方向的百分比都是相对于父元素的宽度计算的

margin重叠
  • block元素,不包括float和absolute元素
  • 只发生在垂直方向(margin-top/bottom)

margin重叠的情境

  • 相邻的兄弟元素


    图片.png
  • 父级和第一个/最后一个子元素


    图片.png
    图片.png
  • 空的block元素


    图片.png
    图片.png
margin中auto

auto 适用设置固定宽度的块元素

  • 一侧是定值,一侧auto,auto为剩余空间大小(如果只设置margin-right:100px,是不生效的)


    图片.png
  • 两侧都是auto,则会居中显示

  • 垂直居中显示

    .father{
      height:200px;width:400px; writing-mode:vertical-lr
    
     .son{
       height:100px;width:100px;margin:auto;
     }
    

    给父级设置样式writing-mode:vertical-lr改成垂直流布局,子 元素设置样式;margin:auto,这种情况水平方向就不能居中了。

  • 绝对定位元素设置auto,水平垂直都居中


    图片.png
margin负值下的两端对齐
  • margin改变元素尺寸
    列表两端对齐,每个元素之间还设置margin值


    图片.png
margin失效情形
  • inline水平元素的垂直margin无效
  • margin重叠
  • display:table-cell/display:table-row 等声明的margin无效
  • 绝对定位元素非定位的margin值“无效”
    比如不给绝对定位元素设置bottom值,设置margin-bottom值是无效的,margin-right一样。

二、overflow

注意:

  • 如果overflow-x 和 overflow-y 值相同等同于 overflow
  • 如果overflow-x 和 overflow-y 其中一个设置为visible(默认值),另一个设置成hidden、auto、,设置visible的会被重置成 auto
使用条件
  • 非display:inline水平
  • 对应方位的尺寸限制。
    width/height/max-width/max-height/absolute拉伸
  • 对于单元格 td 等,还需要Table为 table-layout:fixed 状态才行
浏览器兼容问题

浏览器IE7,文字越多,元素两侧padding留白就越大

解决办法:给元素添加样式 overflow:visible

overflow与滚动条

默认滚动条来自 <html>,而不是<body>标签。

去除页面默认滚动条,只需

html{overflow:hidden}

JS获取滚动条高度

  • 谷歌:document.body.scrollTop
  • 其他:document.documentElement.scrollTop

兼容写法

var top=`document.body.scrollTop || document.documentElement.scrollTop

滚动条会占用容器的可用宽度和高度


图片.png 图片.png

1、水平居中跳动问题修复(当出现滚动条时,页面右侧会有空白)

解决办法:

  • html{overflow-y:scroll}
  • .container{padding-left:calc(100vw-100%)},100vw是浏览器宽度,100% 是可用内容宽度

2、overflow与两栏自适应布局(左侧浮动,右侧自适应)


图片.png

解决办法 给右侧 div 加css样式overflow:hidden

图片.png
overflow与absolute
  • overflow:hidden失效
    子元素绝对定位时
    解决办法:给overflow元素添加 position:relative

三、float

  • 自适应布局,右侧固定,左侧自适应


    图片.png
   <div class="warp-right">
        <div class="content-left"> .....  </div>
        <img src="./135.jpg" alt="" srcset="">
   </div>
.content-left{
   float: left;
   margin-right: 80px;
}
 .warp-right  img{
     float: left;
     width: 50px;
     margin-left: -50px;
}
  • 自适应布局,左侧固定,右侧自适应


    图片.png
   <div class="warp-right">
        <img src="./135.jpg" alt="" srcset="">
        <div class="content-right"> .....  </div> 
   </div>
 .warp-right  img{
     float: left;
     width: 50px;
}
.content-right{
   overflow: hidden;
}

四、absolute

小图标,absolute的应用
图片.png

这样布局的好处

  • 导航中,当内容改变时,小图标的位置也会跟着移动,不会出现重叠的现象(自适应)
  • 不用给父级设置position,当父级改变时也不受影响
absolute + margin实现下拉框
图片.png

这种实现方式自适应比较强,当浏览器大小改变时,位置不容易发生改变。

文本图标对齐
图片.png
absolute 与整体布局

使div占满整个屏幕,使用拉伸

<body>
    <div class="page"></div>
</body>
 body{
        width: 100%;
        height: 100%;
    }
.page{
        position: absolute;
        left: 0;
        right: 0;
        top: 0;
        bottom: 0;
    }

头、侧边栏、内容区、底部 , 布局


图片.png

绝对定位整个页面布局


图片.png
absolute 元素垂直 水平 居中
  • 水平居中
      .box{
          position: absolute;
          width: 100px;
          height: 100px;
          left: 0;
          right: 0;
          margin: auto;
      }
    
  • 垂直居中
    .box{
         position: absolute;
         width: 100px;
         height: 100px;
         top: 0;
         bottom: 0;
         margin: auto;
     }
    

注意: 设置absloute 可以使 inline元素具有block元素的特性

五、line-height

  • 对内联元素、table-cel 起作用
  • 内联元素是由行高决定的
  • 行高具有继承性
  • 内容区域高度+行间距=行高
    内容区域高度与字体和字号有关,与line-height无关
    字体为宋体时,内容区域高度=font-size大小

body全局数值行高使用经验,匹配20像素

body{font-size:14px;line-height:1.4286}    // 20/14
line-height 的实际应用
  • 图片垂直居中(接近居中)
图片.png
  • 多行文本垂直居中


    图片.png

六、vertical-align

vertical-align 的百分比值是相对于 line-height计算的

vertical-align 起作用的前提
  • inline ,inline-block 水平元素
  • table-cell 元素

默认情况下(不对元素display设置)支持vertical-align的有:
图片、文字、按钮、单元格

实战布局
  • <p><img src=" "/></p> 使图片垂直居中
p{display:table-cell; vertical-align:middle}
  • 图片和文字始终垂直居中对齐


    图片.png
<div>
   <span>文字</span>
  <img src=" "/>
</div>
span{display:inline-block;width:200px;vertical-align:middle}
img{vertical-align:middle}
  • 小图标和文字对齐
    vertical-align 负值
  • 不定尺寸图片或多行文字垂直居中


    图片.png
图片.png

七、relative

relative 与 absolute
  • 限制absolute元素定位


    图片.png
  • 限制层级
    absolute 外层没有被relative元素包裹时,层级高的在上面


    图片.png

当 外部被relative元素包裹时,层级关系就由relative元素设置的 z-index 来控制


图片.png
  • 限制超越 overflow
    overflow:hidden,对absolute元素是不起作用的。给absolute外层父元素设置relative、overflow:hidden,可以限制超越


    图片.png
relative 与 fixed
  • 限制层级
relative 定位

相对自身原来位置定位,还占有原来的位置。

八、z-index

不考虑css3的情况下,只有定位的元素才起作用(position:relative/absolute/fixed/sticky)不包括static

z-index 与定位元素
  • 如果定位元素 z-index 发生嵌套,祖先优先原则,(z-index 为数值)


    图片.png
z-index 相关实践
图片.png

九、padding

  • 对于 block 元素
    padding值暴走(超过宽),一定会影响尺寸
    width 非auto(设置固定宽度),会影响尺寸
    width为 auto 或者 box-sizing:border-box,同时padding没有暴走,不影响尺寸。
  • 对于inline 水平元素
    水平 padding 影响尺寸,垂直padding 不影响尺寸,但是会影响背景色。
padding 百分比

是相对于元素的宽,利用这一特性可以实现正方形

标签元素padding
  • 所有浏览器 radio/checkbox 单选框无内置padding

十、border

dashed 虚线
dotted 点线
double 双线

border实现三角
图片.png
  • 第一种


    图片.png
.triangle{
      border-width:12px 20px;
      border-style: solid;
      border-color:gold gold transparent transparent;
}

drop-shadow 给 png 图标赋色


图片.png
icon{filter:drop-shadow(20px 0 #ff8040)}

十一、背景图像

背景图像区域
  • background-clip属性
    指定背景绘制区域
    background-clip:border-box | padding-box | content-box
    参数说明:
    • border-box:背景被剪裁到边框(内容区+padding区+边框区都显示背景)


      图片.png
    • padding-box:背景被剪裁到内边距框(内容区+padding区)


      图片.png
    • content-box:背景被剪裁到内容框 (内容区 显示背景)


      图片.png
背景图像定位
  • background-origin属性 (兼容性需注意)
    background-origin属性指定background-position属性应该是相对位置
    background-origin:border-box | padding-box | content-box
背景图像大小
  • background-size属性
    background-size:length | percentage | cover | contain
    • background-size:100%
      根据元素来计算,当只设置一个参数时,背景按图片宽度等比例缩放
    • background-size: 800px 固定尺寸
    • background-size:cover
      将背景图片等比缩放以填满整个容器,不留白
    • background-size:contain
      即将背景图片等比缩放至某一边紧贴容器边缘为止(会留白)

十二、css 渐变

渐变可以在两个或多个指定颜色之间显示平稳的过渡

线性渐变

是沿着一根轴线改变颜色,从起点到终点颜色进行顺序渐变
background:linear-gradient(direction,color-stop1,color-stop2,.......)

  • 从上到下 (默认)
    background:linear-gradient(color-stop1,color-stop2,.......)
    图片.png
  • 从左到右
    不同浏览器内核,写的方式不一样
    background:-webkit- linear-gradient(begin-direction,#44A504,#C5DF99)
    background:    -moz-linear-gradient(end-direction,#44A504,#C5DF99)
    background  :    -o-linear-gradient(end-direction,#44A504,#C5DF99)
    background:          linear-gradient(to end-direction,#44A504,#C5DF99)
    
    实例
    background:-webkit- linear-gradient(left,#44A504,#C5DF99)
    background:    -moz-linear-gradient(right,#44A504,#C5DF99)
    background  :    -o-linear-gradient(right,#44A504,#C5DF99)
    background:          linear-gradient(to right,#44A504,#C5DF99)
    
图片.png
  • 对角
    background:-webkit- linear-gradient(begin-level begin-vertical,#44A504,#C5DF99)
    background:    -moz-linear-gradient(end-level end-vertical,#44A504,#C5DF99)
    background  :    -o-linear-gradient(end-level end-vertical,#44A504,#C5DF99)
    background:          linear-gradient(to end-level end-vertical,#44A504,#C5DF99)
    
    实例
    background:-webkit- linear-gradient(left top,#F84812,#DFC999);
    background:    -moz-linear-gradient(right bottom,#F84812,#DFC999);
    background  :    -o-linear-gradient(right bottom,#F84812,#DFC999);
    background:          linear-gradient(to right bottom,#F84812,#DFC999);
    
图片.png
  • 多个颜色
    background: linear-gradient(to right,#44A504,#A0F387,r#DFA209,#DFC999); 
    
图片.png
在颜色后面加 百分比
 background: linear-gradient(to right,#44A504 10%,#A0F387 40%,#DFA209 60%,#DFC999) 100%;

从 10% 到 40% 是从 #44A504#A0F387 的渐变
从 40% 到 60% 是从 #A0F387#DFA209 的渐变
从 60% 到 100% 是从 #DFA209#DFC999 的渐变

最后一个不写 默认是 100%,第一个不写默认是0

  • 透明度渐变
    background:linear-gradient(to right, rgba(255, 0, 0, 0),rgba(255, 0, 0,1));
    
图片.png

十三、css 盒阴影 box-shadow属性

box-shadow属性可以设置一个或多个下拉阴影的框
box-shadow:h-shadow v-shadow blur spread color inset

参数说明:

  • h-shadow 水平方向偏移量
  • v-shadow 竖直方向偏移量
  • blur 模糊度,不能设赋值
  • spread 扩展多少
  • color:颜色
  • inset 内阴影还是外阴影

只设置了偏移量,没有设置模糊度


图片.png

十三、边界图片 border-image

border-image-source属性

指定要是用的图像,而不是由border-style属性设置的边框样式。

border-image-slice属性

指定图像的边界向内偏移
border-image-slice:number | % | fill

border-image-width属性

十四、选择器

子元素选择器

只能选择某元素的子元素 (直接后代选择器)

语法格式: 父元素 > 子元素

图片.png
图片.png
相邻兄弟元素选择器

相邻兄弟元素选择器 可以选择紧接在另一元素后的兄弟元素,他们具有一个相同的父元素

语法格式 :元素 + 兄弟相邻元素

图片.png
例子:选择除了 第一个 li 以外的 li ul li + li{}
通用兄弟选择器

选择某元素后面的所有兄弟元素,他们具有一个相同的父元素

语法格式:元素 ~ 后面兄弟元素

图片.png
属性选择器
  • Element [ attribute ]

    为带有 attribute 属性的 Element 元素设置样式

     a[href]{color:red}
     a[href="#"]{color:red}
    
  • Element [ attribute ~="value" ]

    选择 attribute 属性包含单词 “value”的元素,并其设置样式


    图片.png
  • Element [ attribute ^="value" ]

    选择 attribute 属性值以 “value”开头的元素,并其设置样式

图片.png
  • Element [ attribute $="value" ]

    选择 attribute 属性值以 “value”结尾的元素,并其设置样式

  • Element [ attribute *="value" ]

    设置attribute 属性值 包含 “value” 的所有元素样式


    图片.png
  • Element [ attribute |="value" ]

    选择 attribute 属性值为 "value" 或以 "value—" 开头的元素,并设置样式。

图片.png
伪类选择器
  • 动态伪类选择器

    这些伪类并不存在html 中,只有当用户和网站交互的时候才能体现出来

    锚点伪类: :link :visited (链接/访问过)
    用户行为伪类::focus :hover :active (获取光标/鼠标经过/正在访问)

  • UI元素伪类
    • :enabled:可编辑的
    • :disabled : 禁用的
    • :checked
      图片.png
结构伪类
  • Element :first-child

    选择属于其父元素的首个子元素的每个 Element 元素

    图片.png
    图片.png
  • Element :last-child

    选择属于其父元素的最后一个子元素的每个 Element 元素

  • Element :nth-child(N)

    选择器匹配属于其父元素的第 N 个子元素,不论元素类型

    • nth-child(2n) 偶数
    • nth-child(2n+1) 奇数
    • nth-child(3n+1) 、 nth-child(n+4)从第四个开始
    • nth-child(odd)奇数、 nth-child(even) 偶数


      图片.png
  • Element :nth-last-child(N)

    匹配属于其元素的第 N 个子元素的每个子元素,不论元素的类型,从最后一个子元素开始计数。

  • Element :nth-of-type(N)

    匹配属于父元素的 特定类型的第N 个子元素的每个元素

  • Element :first-of-type
  • Element :last-of-type
  • Element :only-child

    匹配属于其父元素的唯一子元素的每个元素(只有他自己一个孩子)

    图片.png
  • Element :empty

    匹配没有子元素(包括文本节点)的每个元素

    图片.png
  • 否定选择器 (:not)

    :not(Element/selector) 选择匹配非指定 元素/选择器的每个元素

    语法格式:父元素:not(子元素/子选择器)

css 权重
  • 权重等级:

    行内样式(1000) > ID选择器 >类、属性选择器和伪类选择器(10)>元素和伪元素(1)>*(0)

  • 权重计算:

    从0开始,一个行内样式+1000,一个id+100,一个属性选择器、class或者伪类+10,一个元素或者伪元素+1

  • css 权重规则:
    • ID 选择器(#idValue)的权重比属性选择器([id="idValue"])高
  • 带有向下问关系的选择器比单纯的元素选择器权重高


    图片.png
  • 与元素 “挨得近” 的规则生效,比如嵌套css

  • 最后定义的这条规则会覆盖上面与之冲突的规则

  • 无论多少个元素组成的选择器,都没有一个class选择器权重高

  • 通配符选择器权重是0,被继承的 css 属性也带有权重,权重是0

伪元素

语法格式 :元素::伪元素

  • Element::first-line

    first-line 伪元素中的样式对 Element元素的一个行文本进行格式化,只能用于 块元素


    图片.png
  • Element::first-letter

    用于向文本的首字符设置特殊样式,只能用于 块元素


    图片.png
  • Element::selection

    用于设置在浏览器中的选中文本后的背景色与前景色


    图片.png

相关文章

网友评论

      本文标题:css 基础+实战布局

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