大前端——知识点回顾(CSS)

CSS

一、CSS3新特性锚伪类target

<li><a href="#bg5">我在为我的激光充能!</a></li>
<img src="bg5.jpg" alt="" class="bg rotate"         id="bg5" />
.rotate:target{
    z-index: 100;
    animation-name: rotate;
    animation-duration: 2s;
    animation-iteration-count: 1;     
    animation-fill-mode:forwards; 
}

在点击完链接a标签后,锚链接目标元素就多了个伪类 :target:,类似伪类 :hover

参考例子:
【纯CSS3-animation】实现背景动态切换

二、CSS实现隐藏页面的方式

Opacity:0;
display:none;
visibility:hidden;
position: absolute;
   top: -1000%;
   left: -1000%;

三、如何实现水平居中和垂直居中。

水平居中

1、margin和固定width实现水平居中

width:100px;
margin: 0 auto;

2、inline-block实现水平居中方法
仅inline-block属性是无法让元素水平居中,他的关键之处要在元素的父容器中设置text-align的属性为“center”

ul {
text-align:center;
}
ul > li {
display:inline-block;
}

3、浮动实现水平居中的方法

pagination {
  float: left;
  width: 100%;
  overflow: hidden;
  position: relative;
}
.pagination ul {
  clear: left;
  float: left;
  position: relative;
  left: 50%;/*整个分页向右边移动宽度的50%*/
  text-align: center;
}**
.pagination li {
    line-height: 25px;
    margin: 0 5px;
    display: block;
    float: left;
    position: relative;
    right: 50%;/*将每个分页项向左边移动宽度的50%*/**
}

4、绝对定位和浮动实现水平居中

.pagination {
    position: relative;
}
.pagination ul {
    position: absolute;
    left: 50%;
}**
.pagination li {
      line-height: 25px;
      margin: 0 5px;
     float: left;
      position: relative;/*注意,这里不能是absolute,大家懂的*/
      right: 50%;**
}

5、绝对定位和transform实现水平居中

position: absolute;
left: 50%;
transform:translateX(-50%);

6、CSS3的flex实现水平居中方法

ul {
display:flex;
justify-content:center;
}
垂直居中

1、通过verticle-align:middle实现CSS垂直居中。
通过vertical-align:middle实现CSS垂直居中是最常使用的方法,但是有一点需要格外注意,vertical生效的前提是元素的display:inline-block。

2、通过display:flex实现CSS垂直居中

3、通过伪元素:before实现CSS垂直居中。
具体方式是为父元素添加伪元素:before,使得子元素实现垂直居中

.parent:before {
    content:"";
    display:inline-block;
    vertical-align: middle;
    height: 100%;
}

4、通过display:table-cell实现CSS垂直居中。
给父元素display:table,子元素display:table-cell的方式实现CSS垂直居中。

5、通过隐藏节点实现CSS垂直居中。
创建一个隐藏节点#hide,使得隐藏节点的height值为剩余高度的一半即可。
这种方法也适用于CSS水平居中,原理一样。

6、绝对定位和transform实现垂直居中

四、请解释*{box-sizing:border-box;}的作用,并说明使用它的好处
将宽高也包括边框宽度,当需要按比例相应式布局时,也可以不用考虑边框的影响。

五、浮动元素引起的问题和解决办法?绝对定位和相对定位,元素浮动后的display值

浮动元素引起的问题
1.由于浮动元素已脱离文档流,所以父元素无法被撑开,影响与父级元素同级的元素。
2.与浮动元素同级的非浮动元素(内联元素)会跟随其后,也是由于浮动元素脱离文档流,不占据文档流中额位置。
3.如果该浮动元素不是同级第一个浮动的元素,则它之前的元素也应该浮动,否则容易影响页面的结构显示。

解决方法

.clearfix:after{
    content: ".";       
    display: block;  
    height: 0;  
    clear: both;  
    visibility: hidden;
} 

六、link和@import引入css的区别

1、link
<link rel="stylesheet" type="text/css" href="sheet.css">
link的作用是将外部文件引入到当前文件中,可以引入除去css文件之外别的类型的文件。但是只能位于head中
rel = “stylesheet”表示的是当前文档与引用的文档之间的关系。
type=“text/css”表示引用的文档是文本类型的css文件。
href=“URL”指明引用文件的URL

2、@import

@import url(sheet.css);

@import是css的一个属性,代表着引入css文件到当下css文件中,且只能引入css文件。@import只能位于文件的顶部,这降低了灵活性

七、解释一下css3的flexbox,以及适用场景
Flex布局的完整基本语法

八、inline和inline-block的区别
1、display:block
block元素会独占一行,多个block元素会各自新起一行。默认情况下,block元素宽度自动填满其父元素宽度。
block元素可以设置width,height属性。块级元素即使设置了宽度,仍然是独占一行。
block元素可以设置margin和padding属性。

2、display:inline
inline元素不会独占一行,多个相邻的行内元素会排列在同一行里,直到一行排列不下,才会新换一行,其宽度随元素的内容而变化。
inline元素设置width,height属性无效。
inline元素的margin和padding属性,水平方向的padding-left, padding-right, margin-left, margin-right都产生边距效果;但竖直方向的padding-top, padding-bottom, margin-top, margin-bottom不会产生边距效果。

3、display:inline-block
简单来说就是将对象呈现为inline对象,但是对象的内容作为block对象呈现。之后的内联对象会被排列在同一行内。比如我们可以给一个link(a元素)inline-block属性值,使其既具有block的宽度高度特性又具有inline的同行特性

九、哪些是块级元素那些是行级元素,各有什么特点
1、行级元素
a、em、span、br、i、input、label、img

十、grid布局

父容器(Grid Container)的属性
display

将元素定义为 grid contaienr,并为其内容建立新的网格格式化上下文(grid formatting context)。
值:

grid - 生成一个块级(block-level)网格
inline-grid - 生成一个行级(inline-level)网格
subgrid - 如果你的 grid container 本身就是一个 grid item(即,嵌套网格),你可以使用这个属性来表示你想从它的父节点获取它的行/列的大小,而不是指定它自己的大小。

grid-template-columns / grid-template-rows

使用以空格分隔的多个值来定义网格的列和行。这些值表示轨道大小(track size),它们之间的空格代表表格线(grid line)。

.container {
  grid-template-columns: <track-size> ... | <line-name> <track-size> ...;
  grid-template-rows: <track-size> ... | <line-name> <track-size> ...;
}

例子:
(如果未显示的给网格线命名),轨道值之间仅仅有空格时,网格线会被自动分配数字名称:

  grid-template-columns: 40px 50px auto 50px 40px;
  grid-template-rows: 25% 100px auto;
image.png

可以给网格线指定确切的命名。 注意中括号里的网格线命名语法:

.container {
  grid-template-columns: [first] 40px [line2] 50px [line3] auto [col4-start] 50px [five] 40px [end];
  grid-template-rows: [row1-start] 25% [row1-end] 100px [third-line] auto [last-line];
}
image.png

grid-template-areas

通过引用 grid-area属性指定的网格区域的名称来定义网格模板。 重复网格区域的名称导致内容扩展到这些单元格。 点号表示一个空单元格。 语法本身提供了网格结构的可视化。

值:

  • <grid-area-name> - 使用 grid-area 属性设置的网格区域的名称
  • . - 点号代表一个空网格单元
  • none - 没有定义网格区域

举例:

.item-a {
  grid-area: header;
}
.item-b {
  grid-area: main;
}
.item-c {
  grid-area: sidebar;
}
.item-d {
  grid-area: footer;
}

.container {
  grid-template-columns: 50px 50px 50px 50px;
  grid-template-rows: auto;
  grid-template-areas: 
    "header header header header"
    "main main . sidebar"
    "footer footer footer footer";
}

这将创建一个四列宽三行高的网格。 整个第一行将由 header 区域组成。 中间一行将由两个 main 区域、一个空单元格和一个 sidebar 区域组成。 最后一行是footer区域组成。

image.png

grid-template
在单个声明中定义 grid-template-rows、grid-template-columns、grid-template-areas 的简写。

值:

none - 将三个属性都设置为其初始值
subgrid - 把 grid-template-rows 和 grid-template-columns 设置为 subgrid, 并且 grid-template-areas 设置为初始值
grid-template-rows / <grid-template-columns - 把 grid-template-columns 和 grid-template-rows 设置为指定值, 与此同时, 设置 grid-template-areas 为 none
.container {
grid-template: none | subgrid | <grid-template-rows> / <grid-template-columns>;
}
它也可以使用一个更复杂但相当方便的语法来指定这三个值。 一个例子:

.container {
  grid-template:
    [row1-start] "header header header" 25px [row1-end]
    [row2-start] "footer footer footer" 25px [row2-end]
    / auto 50px auto;
}

以上等价于:

.container {
  grid-template-rows: [row1-start] 25px [row1-end row2-start] 25px [row2-end];
  grid-template-columns: auto 50px auto;
  grid-template-areas: 
    "header header header" 
    "footer footer footer";
}

由于 grid-template 不会重置隐式网格属性(grid-auto-columns,grid-auto-rows和grid-auto-flow),而这可能是大多数情况下你想要做的。因此建议使用grid属性来代替grid-template。

具体参考:
# CSS Grid 系列(上)-Grid布局完整指南

十一、table布局的作用
主要作用:

用于布局(过时)
用于显示批量的数据

缺点:

加载页面的时候,需要全部的数据都请求到,才显示页面,否则就是一片的空白

十二、实现两栏布局有哪些方法?

  1. 双inline-block方案
  2. 双float方案
  3. 使用absolute+margin-left方法
  4. 使用float+BFC方法
.wrapper-float-bfc {
    overflow: auto;
}

.wrapper-float-bfc .left {
    float: left;
    margin-right: 20px;
}

.wrapper-float-bfc .right {
    margin-left: 0;
    overflow: auto;
}
  1. flex方案
  2. grid方案

十三、BFC是什么?
1、块格式化上下文(BFC)有下面几个特点:

BFC是就像一道屏障,隔离出了BFC内部和外部,内部和外部区域的渲染相互之间不影响。BFC有自己的一套内部子元素渲染的规则,不影响外部渲染,也不受外部渲染影响。
BFC的区域不会和外部浮动盒子的外边距区域发生叠加。也就是说,外部任何浮动元素区域和BFC区域是泾渭分明的,不可能重叠。
BFC在计算高度的时候,内部浮动元素的高度也要计算在内。也就是说,即使BFC区域内只有一个浮动元素,BFC的高度也不会发生塌缩,高度是大于等于浮动元素的高度的。
HTML结构中,当构建BFC区域的元素紧接着一个浮动盒子时,即,是该浮动盒子的兄弟节点,BFC区域会首先尝试在浮动盒子的旁边渲染,但若宽度不够,就在浮动元素的下方渲染

2、如何创建BFC

float属性不为none
overflow不为visible(可以是hidden、scroll、auto)
position为absolute或fixed
display为inline-block、table-cell、table-caption

3、BFC的作用

3.1、 清除内部浮动

我们在布局时经常会遇到这个问题:对子元素设置浮动后,父元素会发生高度塌陷,也就是父元素的高度变为0。解决这个问题,只需要把把父元素变成一个BFC就行了。常用的办法是给父元素设置overflow:hidden。

3.2、 垂直margin合并
在CSS当中,相邻的两个盒子的外边距可以结合成一个单独的外边距。这种合并外边距的方式被称为折叠,并且因而所结合成的外边距称为折叠外边距。
折叠的结果:

两个相邻的外边距都是正数时,折叠结果是它们两者之间较大的值。
两个相邻的外边距都是负数时,折叠结果是两者绝对值的较大值。
两个外边距一正一负时,折叠结果是两者的相加的和。
这个同样可以利用BFC解决

十四、css 和 dpi 的关系?

DPI就是DOT PER INCH
图像的输出分辨率
设备输出图像时每英寸可产生的点数dpi,以dpi为单位
普通屏幕通常包含96dpi
1in = 2.54cm = 25.4 mm = 101.6q = 72pt = 6pc = 96px

十五、你知道attribute和property的区别么
1、差异点是哪些

DOM有其默认的基本属性,而这些属性就是所谓的“property”,无论如何,它们都会在初始化的时候再DOM对象上创建。
如果在TAG对这些属性进行赋值,那么这些值就会作为初始值赋给DOM的同名property
attributes是属于property的一个子集
打印attribute属性不会直接得到对象的值,而是获取一个包含属性名和值的字符串
HTML标签中定义的属性和值会保存该DOM对象的attributes属性里面;
这些attribute属性的JavaScript中的类型是Attr,而不仅仅是保存属性名和值这么简单;

2、是否双向绑定

property能够从attribute中得到同步;
attribute不会同步property上的值;
attribute和property之间的数据绑定是单向的,attribute->property;
更改property和attribute上的任意值,都会将更新反映到HTML页面中;

十六、流式布局如何实现,响应式布局如何实现
1、流式布局的特点以及应用场景

特点:当上面一行的空间不够容纳新的TextView时候,
应用场景:图片墙

2、响应式布局
兼容不同屏幕分辨率、清晰度以及屏幕定向方式竖屏(portrait)、横屏(landscape)
2.1、Meta标签定义
使用 viewport meta 标签在手机浏览器上控制布局

<meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1" />

通过快捷方式打开时全屏显示

<meta name="apple-mobile-web-app-capable" content="yes" />

隐藏状态栏

<meta name="apple-mobile-web-app-status-bar-style" content="blank" />

iPhone会将看起来像电话号码的数字添加电话连接,应当关闭

<meta name="format-detection" content="telephone=no" />

2.2、使用Media Queries适配对应样式
2.2.1、设备类型(media type):

all所有设备
screen 电脑显示器

2.2.2、设备特性(media feature):

width浏览器宽度;
height浏览器高度;
device-width设备屏幕分辨率的宽度值;
device-height设备屏幕分辨率的高度值;
orientation浏览器窗口的方向纵向还是横向,当窗口的高度值大于等于宽度时该特性值为portrait,否则为landscape;
aspect-ratio比例值,浏览器的纵横比;
device-aspect-ratio比例值,屏幕的纵横比。

@media only screen and (min-device-width:241px) and (max-device-width:320px){
   selector{ ... }
}

3、响应式内容
3.1、响应式图片

<span data-picture data-alt="图片描述文本">
     <span data-src="small.jpg"></span>
     <span data-src="medium.jpg"     data-media="(min-width: 400px)"></span>
     <span data-src="large.jpg"      data-media="(min-width: 800px)"></span>
     <span data-src="extralarge.jpg" data-media="(min-width: 1000px)"></span>
     <!-- 浏览器不支持JS时的备用方案. -->
     <noscript>
         <img src="external/imgs/small.jpg" alt="图片描述文本">
     </noscript>
</span>

其原理就是JS获取Source的源以及CSS Media Queries规则,输出适应图片
3.2、高分辨率(DPI)下的响应式处理

(1)、SVG:优点可承载色彩丰富、设计复杂图形,且渲染不会出现边缘不顺滑;缺点是IE的支持不完美。
(2)、Icon fonts:支持多浏览器,图形颜色大小的修改成本低,易于维护;图形表现单一,不支持色彩丰富且复杂的图形,IE6渲染有毛边。
(3)、-webkit-image-set:只支持单个图形的适配,不利于图形合并,兼容不完美(Safari 6+, Chrome 21+)。
JS检测:var retina = window.devicePixelRatio > 1;

CSS Media Query:

@media (-webkit-min-device-pixel-ratio: 2), 
/* Webkit-based browsers */
  (min--moz-device-pixel-ratio: 2),   
 /* Older Firefox browsers (prior to Firefox 16) */
  (min-resolution: 2dppx),             
/* The standard way */
  (min-resolution: 192dpi)            
 /* dppx fallback */

3.3、高分辨率下的1px border

由于高清屏的特性,1px是由2×2个像素点来渲染,那么我们样式上的border:1px在Retina屏下会渲染成2px的边框,与设计稿有出入,为了追求1px精准还原,我们就不得不拿出一个完美的解决方案。

在Photoshop中,如果需要看似0.5px的边框,常见的方法就是对1px边框加上阴影模糊1px。同理,我们在retina屏下需要做到真实的1px边框,可利用box-shadow属性模拟。

@media only screen and (-webkit-min-device-pixel-ratio:1.5),
  only screen and (min-device-pixel-ratio:1.5) {
  button {
  border:none;
  padding:0 16px;
  box-shadow: inset 0 0 1px #000,
  inset 0 1px 0 #75c2f8,
  0 1px 1px -1px rgba(0, 0, 0, .5);
  }
  }

十七、移动端布局方案
rem方案

十八、overflow:hidden有什么缺点?什么时候失效?
通常一个盒子的内容是被限制在盒子边界之内的。但有时也会产生溢出,即部分或全部内容跑到盒子边界之外。溢出将在满足下列条件之一时出现:

  1. 一个不换行的行元素宽度超出了容器盒子宽度。
  2. 一个宽度固定的块元素放在了比它窄的容器盒子内。
  3. 一个元素的高度超出了容器盒子的高度。
  4. 一个子孙元素,由负边距值引起的部分内容在盒子外部。
  5. text-indent属性引起的行内元素在盒子的左右边界外。
  6. 一个绝对定位的子孙元素,部分内容在盒子外。但超出的部分不是总会被剪裁。子孙元素的内容就不会被子孙元素和其包含块之间的祖先元素的overflow的设置所剪裁。

十九、transition和animation的区别

  1. 触发条件不同。transition通常和hover等事件配合使用,由事件触发。animation则和gif动态图差不多,立即播放。
  2. 循环。 animation可以设定循环次数。
  3. 精确性。 animation可以设定每一帧的样式和时间。tranistion 只能设定头尾。 animation中可以设置每一帧需要单独变化的样式属性, transition中所有样式属性都要一起变化。
  4. 与javascript的交互。animation与js的交互不是很紧密。tranistion和js的结合更强大。js设定要变化的样式,transition负责动画效果,天作之合,比之前只能用js时爽太多。

二十、对less在开发中有哪些应用?
1、样式可以嵌套使用,使用简便,更有结构性
2、可以定义变量,后面可以统一使用一样的样式在相同的组件上,可以通过更换变量值,改变所有使用该变量的组件样式

@fontSize-small: 12px;

3、mixin,就是用一个变量表示一组的样式

.vk-clearfix() {
    &::before,
    &::after {
        content: " ";
        display: table;
    }

    &::after {
        clear: both;
    }
}

其它类名,直接将mixin变量引入,就可以拥有mixin变量的所有样式

.layout {
  .vk-clearfix
}

mixin可以看出是函数,可以传参

.px2rem(@name, @px) {
    @{name}: @px / @root-px;
}
@root-px: 1rem

设置字体大小,将px转成rem

.main {
  .px2rem(font-size, 28);
}

4、可以简化多类名的使用

,circle .circle-red {}

在less可以更简单的表示同时存在多个类名的元素

.circle {
    &-red {;
    }
}

二十一、CSS 选择器的优先级是怎样的?

内联样式表的权值为 1000
ID 选择器的权值为 100
Class 类选择器的权值为 10
HTML 标签选择器的权值为 1

二十二、解释一下“::before”和“:after”中的双冒号和单冒号的区别

单冒号(:)用于CSS3伪类,双冒号(::)用于CSS3伪元素。
需要兼容webkit、firefox、opera等浏览器,建议对于伪元素采用双冒号的写法,如果不得不兼容
还是用CSS2的单冒号写法比较安全

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