整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

CSS3伪装元素,尽管没有得到完美的兼容,仍有很强的

CSS3伪装元素,尽管没有得到完美的兼容,仍有很强的用途

CSS3增强用户界面的新属性中,提供了一个名为appearance的属性。该属性的大部分取值主流浏览器是不兼容的,但是仅有的两个取值一定有很强的用途。本篇文章小海前端(头条号)就为大家来介绍该属性的用法,并通过一个简单的实例结合上一篇文章中讲到的几个CSS3属性来学习它们的综合用法。

承接文章:CSS3增强用户界面属性,有关溢出、缩放、轮廓与文本选中的解决方案

技术等级:中级 | 适合有一定的CSS基础的人士阅读。

希望收藏了这篇文章的你同时也可以关注一下“小海前端”的头条号,因为这些文章都是连载的,并且是经过系统的归纳和总结的。塌下心来认真阅读,你一定会学到对你有用的知识。

CSS3所提供的增强用户界面的属性以及与此相关的属性比较多,小海前端(头条号)将分几次对其进行讲解。所包含的所有增强用户界面的属性包括:

  • box-shadow

  • box-sizing

  • overflow-x

  • overflow-y

  • resize

  • outline

  • outline-width

  • outline-style

  • outline-color

  • outline-offset

  • pointer-events

  • user-select

  • appearance

  • content

  • counter-increment

  • counter-reset

  • quotes

本篇文章为大家讲解appearance属性的用法。

一、CSS3伪装元素:

CSS3技术使用appearance属性来实现对元素的伪装。

CSS3技术使用appearance属性来实现对元素的伪装

该属性有以下两个取值可以被浏览器兼容:

  • none,去除系统默认的元素外观。

  • button,将元素伪装为按钮。

首先要声明,这个属性现在只有webkit内核的浏览器和火狐浏览器支持。因此使用的时候需要为该属性添加浏览器兼容性前缀:

  • -webkit-appearance

  • -moz-appearance

例1:将一个超级链接伪装为按钮。

HTML文档中有如下的一个超级链接:

<a href="#">小海前端(头条号)</a>

利用下列CSS代码将其伪装为按钮:

a{

text-decoration: none; //去除超级链接下方的下划线

appearance:button; //伪装为按钮

-webkit-appearance:button; //兼容webkit内核的浏览器

-moz-appearance:button; //兼容Firefox浏览器

width:150px; height:30px; //设置宽度和高度

text-align: center; //文本水平居中对齐

line-height: 30px; //文本垂直居中对齐

}

上述代码执行后,得到的最终效果如下图所示。

例1的最终效果

例2:将一个复选框表单元素去除系统默认的外观。

HTML文档中有如下的一个复选框表单元素:

<input type=”checkbox” value=”1”> 你好

利用下列CSS代码将其默认外观取消掉:

input[type=checkbox]{

appearance:none; //去除系统默认外观

-webkit-appearance:none; //兼容webkit内核的浏览器

-moz-appearance:none; //兼容Firefox浏览器

}

上述代码执行后,复选框中原有的矩形选择外观被删除,只留下后面的文本内容,即“你好”字样。

有的小伙伴会说,这和display属性设置为none不是一样的效果吗?注意:appearance属性取值为none和display属性取值为none是完全不一样的。

  • display:none,将元素隐藏,元素本身和元素所占位置均不在页面中体现,完全消失掉了。

  • appearance:none,将元素伪装为没有系统默认外观的样式,并不会将元素隐藏掉。

二、实例:美化表单元素中的下拉菜单

这个实例首先将表单元素中的下拉菜单的系统默认外观去除掉,并通过其他CSS样式对其进行美化。整个实例的最终效果如下图所示。

实例的最终效果

1、在HTML中制作一个下拉菜单表单元素:

<div>

<select name="spec">

<option disabled selected>请选择您的专业</option>

<option value="1">计算机网络技术</option>

<option value="2">计算机应用</option>

<option value="3">计算机信息管理</option>

<option value="4">计算机软件工程</option>

</select>

</div>

上述代码中第一个<option></option>标记对中设置了两个属性:第一个disabled设置菜单项不可用,保证了这一项是无法选中的;第二个selected设置该菜单项默认是选中项,这样就可以让这个用户无法选中的菜单项在默认情况下展示出来。

2、利用CSS去除掉系统默认外观:

.box select{

-webkit-appearance:none;

-moz-appearance:none;

appearance:none;

}

将表单元素的下拉菜单取出系统默认外观后的效果如下图所示。

去除掉系统默认外观的下拉菜单表单元素

3、设置容器.box的CSS样式:

.box{

width:240px; height:30px;

position: relative;

}

这段代码为下拉菜单的外部容器指定了宽度和高度,由于.box并没有设置任何可见的效果(例如背景或边框),所以这段代码对整个效果的外观是没有影响的。但是这个容器会影响内部元素的一些效果,将这个容器设置为相对定位,接下来对<select>标记对设置为绝对定位,可以让.box容器内的元素在容器内进行定位。

4、设置<select>标记的CSS样式:

这主要是一些与外观有关的CSS样式设置,包括圆角效果、背景颜色、字体设置、字号大小、首行缩进、元素轮廓等样式。

.box select{

width:240px; height:30px;

border-radius: 5px;

background-color: #efefef;

font-family: Microsoft YaHei;

font-size: 16px;

text-indent: 10px;

outline:none;

}

5、为<select>标记添加右侧的下三角:

我们发现,当将下拉菜单系统默认的外观去除后,表示可以单击下拉的下三角也被删除了。这就需要我们在<box></box>标记对内部再添加一个下三角。这里需要用到content属性,该属性必须结合伪元素选择器::before或::after共同使用。

.box::after{

content:"▼";

position: absolute;

right:5px; top:5px;

pointer-events: none;

}

上述代码表示在.box的末尾(::after)添加content属性指定的文本内容,我们为该属性设置了一个下三角符号,这个符号小伙伴们可以从Word软件中输入并复制过去。

最后一行 pointer-events:none的含义是将这个下三角变为不能接收鼠标事件的状态,也就是说,单击这个下三角就好像单击它的父元素似的,这样给人的感觉就是单击下三角能够拉下来所有的菜单项。

对于不了解pointer-events属性的小伙伴,可以参考小海前端(头条号)书写的上一篇文章,即《CSS3增强用户界面属性,有关溢出、缩放、轮廓与文本选中的解决方案》一文,该文章的最后对pointer-events属性有讲解。

小海声明

在头条上发表的这些文章都是从前端开发的基础开始一步一步讲起的。我非常希望能有更多的前端开发初学者通过我写的文章,逐步学到一定的知识,甚至慢慢有了入门的感觉。这些文章都是我这几年教学过程中的经验,每写一篇时我都尽量把握好措辞,用简单易懂的语言描述,同时精心设计版面,让版面更加丰富,激发阅读兴趣。所以,每一篇文章可能篇幅不长,但是都要耗费小海老师很久的时间。

希望收藏了这篇文章的你同时也可以关注一下“小海前端”的头条号,因为这些文章都是连载的,并且是经过系统的归纳和总结的。塌下心来认真阅读,你一定会学到对你有用的知识。

关注“小海前端”,我会继续为大家奉上更加深入的前端开发文章,也希望更多的初学者跟着学下去,我们共同将前端开发的路努力坚持的走下去。

文章预告

在明天的文章中,将为大家讲解增强用户界面的content属性的使用。该属性的用法较多,正在学习CSS3技术的小伙伴们一定不要错过。

  • order就是边框

一、以下是边框最常见的用法,我们先做一个盒子box,给个简单宽高样式。

图1

二、这种三个参数的写法,应该是用得比较多的。

图2

图3

三、如果这四条边,你只想要一条或两条三条,可以通过top、left、right、bottom来实现。

图4

图5

四、再来一条右边的线。

图6

图7

五、补一个小知识点,圆角。

图8

图9

六、border-radius也有四个参数的写法。

图10

图11

七、当圆角圆到一定的程度,盒子就成了一个圆形。

图12

图13

择器

  • 子孙后代选择器: 通过元素之间的层级关系选择元素

格式: body div div p{样式代码} 匹配body里面的div里面的div里面的所有p标签(包括后代)

  • 子元素选择器: 通过元素之间的层级关系选择元素

格式: body>div>div>p{样式代码} 匹配body里面的div里面的div里面的所有p子元素(不包含后代)

  • 伪类选择器: 选择的是元素的状态, 元素有哪些状态? 【包括】:未访问状态,访问过状态,悬停状态,点击状态

格式: a:link/visited/hover/active:{样式代码}

<head>
    <meta charset="UTF-8">
    <title>Title</title>
	<!--样式-->
<style>
    #l2{color: green}
    .c1{color: yellow}
    input[type="text"],body>p{background-color: red}
    /*子元素选择器*/
    body>div>div>p{color: pink}
		/*子孙后代选择器*/
    body div div p{background-color: yellow}
    /*伪类选择器*/
    a:link{color: red;}/*未访问*/
    a:visited{color: pink}/*访问过*/
    a:hover{color: green}/*悬停*/
    a:active{color: yellow}/*点击*/
</style>
</head>
<body>
<ul>
    <li>刘备</li><li id="l2">关羽</li><li class="c1">张飞</li>
</ul>
<p>香蕉</p><p class="c1">苹果</p>
<input type="text">
<input type="password">
<div>
    <p>p1</p>
    <div><p>p2</p></div>
    <div><div><p>p3</p></div></div>
</div>
<a href="http://www.celinfcom">注释助手</a>

颜色赋值

三原色: 红绿蓝 ,red green blue rgb ,每个颜色的取值范围0-255 颜色赋值的几种方式:

  • 颜色单词: 常见颜色单词都可以使用
  • 6位16进制赋值: #ff0000 3位16进制赋值: #f00
  • 3位10进制赋值: rgb(255,0,0)
  • 4位10进制赋值: rgba(255,0,0,0~1) a=alpha代表透明度
<style>
      h1{
        /*color: #ff0000;*/
        /* color: #f00;*/
        /*color: rgb(255,0,0);*/
        color: rgba(255,0,0,0.3);
      }
    #d2{
      width: 200px;
      height: 200px;
      background-color: pink;
      /*设置背景图片*/
      background-image: url("../b.jpg");
      /*设置背景图片尺寸*/
      background-size: 100px 100px;
      /*禁止重复*/
      background-repeat: no-repeat;
      /*控制位置:横向 纵向*/
      /*background-position: 50px 100px;*/
      background-position: 50% 50%;
    }
</style>
<body>
<div id="d2"></div>
<h1>颜色测试</h1>
</body>

背景图片

  • background-image:url("路径") 设置背景图片
  • background-size:100px 200px 设置背景图片尺寸
  • background-repeat:no-repeat; 禁止重复
  • background-position: 横向 纵向; 设置背景图片的位置,两种方式: ①像素 ②百分比
<style>
    #d1{
      width: 611px;
      height: 376px;
      background-color: #e8e8e8;
      background-image: url("http://celinf.org/itemCat/study_computer.png");
      background-repeat: no-repeat;
      background-position: 90% 90%;
      background-size: 318px 319px;
    }
</style>
<body>
<div id="d1"></div>
</body>

文本和字体相关样式

  • text-align:left/right/center; 文本水平对齐方式
  • line-height:20px; 设置行高, 多行文本时可以控制行间距, 单行文本时可以控制垂直居中(因为文本默认是在当前所在行内居中)
  • text-decoration:overline上划线/underline下划线/line-through删除线/none去掉文本修饰
  • text-shadow:颜色 x偏移值 y偏移值 浓度; 阴影
  • font-size:20px; 设置字体大小
  • font-weight:bold加粗/normal去掉加粗
  • font-style:italic; 设置斜体
  • font-family: xxx,xxx,xxx; 设置字体
  • font:20px xxx,xxx,xxx; 这只字体大小+字体
<style>
      div{
        width: 200px;
        height: 50px;
        border: 1px solid red;
        /*水平对齐方式*/
        text-align: center;
        /*行高*/
        line-height: 50px;
        /*文本修饰 overline上划线underline下划线 line-through删除线
                none去掉文本修饰*/
        text-decoration: line-through;
        /*文本阴影:颜色 x偏移值 y偏移值  浓度*/
        text-shadow: red -15px -15px 5px;
        /*字体大小*/
        font-size: 20px;
        /*字体加粗 bold加粗  normal去掉加粗*/
        font-weight: bold;
      }
    a{
      text-decoration: none;/*去掉自带下划线*/
    }
    h3{
      font-weight: normal;/*去掉自带加粗*/
      /*设置斜体*/
      font-style: italic;
      /*设置字体*/
      /*font-family: cursive;*/
      font: 30px cursive;
    }
    </style>
<body>
<h3>这是个h3</h3>
<a href="">超链接</a>
<div>文本和字体测试</div>
</body>

元素的显示方式display

  • block: 块级元素的默认值, 特点: 独占一行 可以修改宽高, 包括: h1-h6 , p, div
  • inline: 行内元素的默认值, 特点: 共占一行 不可以修改宽高, 包括: span, b,i,s,u,超链接a
  • inline-block:行内块元素默认值, 特点: 共占一行 并且可以修改宽高, 包括: img,input
  • none: 隐藏元素
  • 行内元素不能直接修改宽高, 如必须修改则先将元素的显示方式改成blockinline-block
<style>
      div{
        width: 100px;
        height: 100px;
        border: 1px solid red;
      }
    span{
      border: 1px solid blue;
      /*行内元素不能修改宽高*/
      width: 100px;
      height: 100px;
      /*把行内元素改成了块级元素或行内块元素都可以修改宽高 */
      display: inline-block;
    }
    img{
      width: 100px;
      height: 100px;
      display: none;/*隐藏元素*/
    }
    a{
      width: 132px;
      height: 40px;
      background-color: #0aa1ed;
      /*行内元素不能修改宽高*/
      display: block;
      text-align: center;
      line-height: 40px;
      color: white;
      text-decoration: none;
      font-size: 20px;
      /*圆角 值越大越圆*/
      border-radius: 3px;
}
</style>
<body>
<a href="">查看详情</a>
<img src="../b.jpg" alt="">
<img src="../b.jpg" alt="">
<img src="../b.jpg" alt="">
<div>div1</div>
<div>div2</div>
<div>div3</div>
<span>span1</span>
<span>span2</span>
<span>span3</span>
</body>

盒子模型

盒子模型用来控制元素的显示效果包括: 元素内容content+外边距margin+边框border+内边距padding

  • 元素内容content:控制元素的显示尺寸
  • 外边距margin:控制元素的显示位置
  • 边框border:控制边框效果
  • 内边距padding:控制元素内容的位置

border边框效果

盒子模型之内容content

  • 包括:width和height
  • 赋值方式有两种:①像素 ②上级元素的百分比
  • 行内元素不能直接修改宽高

盒子模型之外边距margin

  • 作用: 控制元素的显示位置
  • 赋值方式:
  1. margin-left/right/top/bottom:10px; 单独某个方向赋值
  2. margin:10px; 四个方向赋值
  3. margin:10px 20px; 上下10 左右20
  4. margin:10px 20px 30px 40px; 上右下左 顺时针赋值
  • 行内元素上下外边距无效
  • 上下相邻彼此添加外边距 取最大值
  • 左右相邻彼此添加外边距 两者相加
  • 粘连问题: 当元素的上边缘和上级元素的上边缘重叠时,给元素添加上外边距会出现粘连问题,给上级元素添加overflow:hidden解决

盒子模型之边框border

赋值方式:

  1. border:1px solid red; 给四个方向添加边框
  2. border-left/right/top/bottom:1px solid red; 单独给某个方向添加边框
  3. border-radius:10px; 值越大越圆 当值超过宽高的一半时为正圆(前提是正方形)
<style>
      #d1{
        width: 100px;
        height: 100px;
        border:1px solid red;
        /*margin-left: 100px;
                margin-top: 100px;*/
        /*margin-bottom: 50px;*/
        margin: 10px 20px 30px 40px;
      }
    #d2{
      width: 100px;height: 100px;border:1px solid red;
      /*上下相邻彼此添加外边距 取最大值*/
      margin-top: 100px;
    }
    #s1{
      /*行内元素上下外边距无效*/
      margin-right: 100px;
    }
    #s2{
      /*左右相邻彼此添加外边距 两者相加*/
      margin-left: 50px;
    }
    #big{
      width: 200px;height: 200px;background-color: green;
      overflow: hidden;/*解决粘连问题*/
    }
    #big>div{
      width: 50px;height: 50px;background-color: red;
      margin-left: 50px;
      /*当元素的上边缘和上级元素的上边缘重叠时,给元素添加上外边距会出现粘连问题*/
      margin-top: 50px;
    }
    #border_div{
      width: 400px;
      height: 200px;
      border: 10px solid blue;
      /*设置圆角*/
      border-radius: 200px;
    }
</style>

<body>
<div id="border_div"></div>
<div id="big">
    <div></div>
</div>
<span id="s1">span1</span><span id="s2">span2</span>
<div id="d1">外边距测试</div>
<div id="d2">div2</div>
</body>

盒子模型之内边距padding

  • 作用: 控制元素内容的位置
  • 赋值方式: 和外边距类似
  1. padding-left/right/top/bottom:10px; 单独某个方向赋值
  2. padding:10px; 四个方向赋值
  3. padding:10px 20px; 上下和 左右赋值
  4. padding:10px 20px 30px 40px; 上右下左顺时针赋值
  • 给元素添加内边距会影响元素的显示宽高
<style>
      div{
        width: 150px;
        height: 150px;
        border:1px solid red;
        /*内边距会影响元素的宽高*/
        padding-top: 50px;
        padding-left: 50px;
      }
</style>
<body>
<div>内边距</div>
</body>

CSS的三大特性

  • 继承: 元素可以继承上级元素文本和字体相关的样式,部分标签自带的效果不受继承影响, 比如超链接字体颜色
  • 层叠:多个选择器可能选择到同一个元素,如果添加的样式不同则全部层叠有效,如果作用的样式相同 则由优先级决定哪个生效
  • 优先级: 指CSS中的选择器具有优先级, 作用范围越小优先级越高, !important>id>class>标签名>继承(属于间接选中)
<style>
      #d1{
        color: red;
      }
    div{
      /*!important作用是提升优先级*/
      color: blue !important;
    }
</style>
<body>
<div id="d1">
    <p>这是个p标签</p>
    <span>这是div里面的span</span>
    <a href="">超链接</a>
</div>
<span>这是div外面的span</span>
</body>

综合性练习【Demo】

<style>
      body{
        font: 12px "simhei", Arial, Helvetica, sans-serif;
        color: #666;width: 1000px;
      }
    #d1{
      width: 611px;height: 376px;
      background-color: #e8e8e8;
      background-image: url("http://celinf.org/study_computer1.png");
      background-size: 318px 319px;
      background-repeat: no-repeat;
      background-position: 90% 90%;
      overflow: hidden; display: inline-block;
    }
    #d2{margin: 68px 0 0 36px; width: 245px;height: 232px;  }
    #d3{
      width: 375px;height: 376px;
      background-color: #e8e8e8; overflow: hidden;
      background-image: url("http://celinf.org/study_computer.png");
      background-repeat: no-repeat;
      background-size: 292px 232px;
      background-position: 85% 85%; display: inline-block;
    }
    div>div{width: 253px; height: 232px;margin: 39px 0 0 25px; }
    .title_p{
      color: #333333;font-size: 32px;
      margin-bottom: 12px;
      font-weight: lighter;
    }
    .intro_p{font-size: 12px;font-weight: lighter;margin-bottom: 24px;}
    .price_p{
      font-size: 24px;color: #0aa1ed;
      font-weight: bold;margin-bottom: 12px;
    }
    a{
      display: block; background-color: #0aa1ed;
      color: white;
      width: 132px;height: 40px;
      text-align: center; line-height: 40px;
      font-size: 20px; text-decoration: none;
      border-radius: 2px;
    }
</style>
<body>
<div id="d1">
    <div id="d2">
        <p class="title_p">灵越 燃7000系列</p>
        <p class="intro_p">
            酷睿双核i5处理器|256GB SSD| 8GB内存<br>
            英特尔HD显卡620含共享显卡内存
        </p>
        <p class="price_p">¥4999.00</p>
        <a href="#">查看详情</a>
    </div>
</div>
</div>
<div id="d3">
    <div>
        <p class="title_p">颜值 框不住</p>
        <p class="intro_p">
            酷睿双核i5处理器|256GB SSD| 8GB内存
            <br>
            英特尔HD显卡620含共享显卡内存
        </p>
        <p class="price_p">¥6888.00</p>
        <a href="#">查看详情</a>
    </div>
</div>
</body>

学习记录,如有侵权请联系删除