美文网首页
常见问题及常见样式写法

常见问题及常见样式写法

作者: 苦瓜_6 | 来源:发表于2018-03-06 21:08 被阅读0次

常见问题

px, em, rem 的区别

  • px : 固定单位,像素。在缩放页面时无法调整那些使用它作为单位的字体、按钮等的大小;
  • em : 相对单位, 值不固定的,会继承父级元素的字体大小,代表倍数;
  • rem : 相对单位, 值不固定的,始终是基于根元素(html)的,也代表倍数

盒模型

W3C 标准中padding、border所占的空间不在width、height范围内;
IE盒模型中width包括“content尺寸+padding+border”。

  • IE盒模型
D889D700-0A44-4602-82E4-53CC5FA36FDE.png
  • W3C盒模型


    C638EE88-4111-4837-9821-D68E88CCCFDD.png

*{ box-sizing: border-box;}

*{ box-sizing: border-box;} 作用是告诉浏览器当前使用的是IE盒模型,设置的边框(border)和内边距(padding)值是包含在width和height内的。

line-height: 2和line-height: 200% 的区别

这两个都表示行高是字体大小的 2 倍, 他们的区别主要体现在子元素继承时, 如下所示:

  • line-height: 2 行高是2倍的文字大小,均以相应的字体为基准。也就是说父元素设置line-height: 2 会直接继承给子元素, 子元素会根据自己的 font-size 再去计算子元素自己的行高(继承倍数);
  • line-height: 200% 行高是2倍的文字大小,文字大小是指父元素中设定的字体大小。父元素设置line-height: 200%是计算好了line-height 值(多少px), 然后再把这个值继承给子元素,不随子元素的font-size改变(继承具体像素的行高值) 。

CSS sprite

原理:把多个小icon合成一个大的图片,使用的时候,元素以这张合成后的大图为背景,通过设置background-position的属性来获取指定icon。

优点:合并原来图片的请求,减少http的性能消耗。
缺点:CSS sprite不能太大,不然下载图片的时间会过长。

应用:

  1. 制作一张网页的图标。
  2. 制作动画。

让一个元素"看不见"有几种方式?有什么区别?

常规
display:none;
visibility:hidden;
opacity:0;

其他(以下消失都是有前提条件的):
height:0;width:0;padding:0;margin:0;border:0; ... etc
position:absolute; left:1000000px; top:100000px; ...etc;
z-index:-1000;...etc
background-color:rgba(0,0,0,0);
总结: 元素"看不见"的方式主要方式让元素用户在当前页面展示的视口里看不见。

区别

  • opacity: 0; 透明度为0, 整体,仍旧会占据空间, 只是看不到,绑定的事件还是会触发
  • visibility: hidden;opacity: 0类似,只是看不见, 但是实际依旧存在,利于SEO优化。如果父元素应用了 visibility: hidden ,则它的所有子元素也都会不可见,但是可以通过给子元素设置 visibility:visible 来让子元素可见。visibility:hidden;的元素绑定的事件不会触发
  • display:none;从文档流消失, 不占位置,对浏览器来说不存在, 还存在DOM树中,它但是不利于SEO。如果父元素应用了display:none;, 则它的所有子元素也都会不可见。display:none 绑定的事件不会触发
  • background-color: transparent;只是背景色透明

CSS 继承

什么是CSS继承

每个 CSS 属性定义的概述都指出了这个属性是默认继承的 ("Inherited: Yes") 还是默认不继承的 ("Inherited: no")。这决定了当你没有为元素的属性指定值时该如何计算值。
当元素的一个继承属性 (inherited property)没有指定值时,则取父元素的同属性的计算值 。只有文档根元素取该属性的概述中给定的初始值。
通俗的讲就是当 Inherited: Yes 时 , 子元素可以继承父元素的属性,即被包在内部的标签可以继承外部标签的样式。

  • 所有元素可继承: visibility和cursor
  • 内联元素可继承:
    letter-spacing、word-spacing、white-space、line-height、color、font、 font-family、font-size、font-style、font-variant、font-weight、text- decoration、text-transform、direction
  • 块状元素可继承:text-indent和text-align
  • 列表元素可继承:list-style、list-style-type、list-style-position、list-style-image
  • 表格元素可继承:border-collapse
  • 不可继承的:
    display、margin、border、padding、background、height、min-height、max- height、width、min-width、max-width、overflow、position、left、right、top、 bottom、z-index、float、clear、table-layout、vertical-align、page-break-after、 page-bread-before和unicode-bidi

常见样式写法

inline-block 特性及如何去除缝隙

inline-block特性

  • 默认不占据一行
  • 设置的上下padding、margin、border占据文档空间
  • 水平排列按照base-line对齐,且元素之间会存在一个'空'元素的缝隙
  • 可以用vertical-align设置垂直对齐,比如 设置vertical-align: top; 可以让 inline-block 元素顶端对齐
  • 可以设置text-align属性有效
  • 会形成一个BFC(块级格式化上下文)。

总结:一个拥有正常盒模型的行内元素,既拥有inline的特点,也有block的特性

去除缝隙

产生缝隙的原因是:回车、换行或者多个空格都会被浏览器当作一个空白字符。因此, 我们只要把空白字符去掉就可以了。

1. 去除HTML中的空格
  <span class="box">
  hello</span><span class="box">
  hello</span>

或者是:

 <span class="box">hello</span
    ><span class="box">hello</span>

又或者是:

  <span class="box">hello</span><!--消除缝隙
  --><span class="box">hello</span>
2. 父元素设置font-size:0。将父容器的font-size 设为0,这样空白字符大小为0 了, 自然就没有缝隙了。
.wrap{
  text-align: center;
  font-size: 0;
}
.box{
  border: 1px solid;
  width: 100px;
  display: inline-block;
  font-size: 16px
}
  • 标签不闭合,但是此时不能为inline-block元素设置width属性(设置了会换行)
<span class="box">hello
<span class="box">hello</span>

或者:

<span class="box">hello
<span class="box">hello
3.元素设置浮动

文本溢出

单行文本溢出加 ...

{ white-space: nowrap;  /* 禁止文字自动转行   */
  over-flow: hidden;  /*   溢出后隐藏 */
 text-overflow: ellipsis;  /* 文本溢出之后加 ···*/

多行文本溢出加 ...

  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-line-clamp: 3;  // 这里的 3 是可以根据需要改变的,这里代表只显示3行。超出就会溢出
  overflow: hidden;

用 CSS 实现一个三角形

思路:

  • 将div的宽高设置为0 ;
  • 然后分别设置上右下左边框(粗一些);
  • 最后将不需要的颜色改为transparent(透明)或跟背景色一样的颜色

CSS代码如下:

.triangle{
  width: 0;
  height: 0;
  border-top: solid 30px transparent;
  border-right: solid 30px blue;
  border-bottom: solid 30px transparent;
  border-left: solid 30px transparent;  
}

或者这样写:

.triangle {
  border-color: transparent blue transparent  transparent;
  border-style: solid;
  border-width: 30px 30px 30px 0;
  height: 0px;
  width: 0px;
}

效果如下:

970FF355-062B-4D5F-8897-77F8C74C1E1B.png

变换字母大小写 : text-transform && font-variant

text-transform: uppercase
text-transform: lowercase
text-transform: capitalize
font-variant: small-caps 
/* font Variant用于将字体变成小型的大写字母(即与小写字母等高的大写字母 */
image.png

禁止自动换行

 white-space: nowrap; 

用图片替换文字

有时我们需要在标题栏中使用图片,但是又必须保证搜索引擎能够读到标题,CSS语句可以这样写:

 h1 { 
    text-indent:-9999px; 
    background:url("h1-image.jpg") no-repeat; 
    width:200px; 
    height:50px; 
  }

CSS提示框

当鼠标移动到链接上方,会自动出现一个提示框

<a class="tooltip" href="#">
    链接文字 
   <span>提示文字</span>
</a>
a.tooltip {
  position: relative
}
a.tooltip span {
  display: none;
  padding: 5px;
  width: 200px;
}
a:hover {
  background: #fff;
}
a.tooltip:hover span {
  display: inline;
  position: absolute;
}

参考

相关文章

网友评论

      本文标题:常见问题及常见样式写法

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