美文网首页
CSS3学习笔记(四)

CSS3学习笔记(四)

作者: dev_winner | 来源:发表于2019-08-26 13:47 被阅读0次
  • 在Web的表单中,有些表单元素有可用:enabled)和不可用:disabled)状态,比如输入框密码框复选框等。在默认情况之下,这些表单元素都处于可用状态。我们可以通过伪选择器:enabled对这些表单元素设置样式。:disabled选择器用来选择不可用表单元素。要正常使用它,则需在表单元素的HTML中设置disabled属性,即disabled="disabled"
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>属性选择器</title>
    <style type="text/css">
    div {
        margin: 30px;
    }
    /*设置元素可用的样式*/
    input[type="text"]:enabled {
        border: 1px solid #f36;
        box-shadow: 0 0 5px #f36;
    }
    /*设置元素不可用的样式*/
    input[type="text"]:disabled {
        box-shadow: none;
        border: 1px solid black; 
    }
    </style>
</head>
<body>
    <form action="#">
        <div>
            <!-- 标签的 for 属性中的值与相关控件的 id 属性值一定要相同。 -->
            <label for="enabled">可用输入框:</label>
            <input type="text" id="enabled" />
        </div>
        <div>
            <label for="disabled">禁用输入框:</label>
            <input type="text" id="disabled" disabled="disabled" />
            <!-- 设置不可用 disabled属性值-->
        </div>
    </form>
</body>
</html>
设置可用状态的元素样式
  • 相邻兄弟选择器(Adjacent sibling selector):可选择紧接在另一元素后的元素,且二者有相同父元素。例如,若要增加紧接在 h1 元素后出现的段落的上边距,可以这样写:
    h1 + p {margin-top:50px;}
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>属性选择器</title>
    <style type="text/css">
    form {
        border: 1px solid #ccc;
        padding: 20px;
        width: 300px;
        margin: 30px auto;
    }
    .wrapper {
        margin-bottom: 10px;
    }
    .box {
        display: inline-block;
        width: 30px;
        height: 30px;
        margin-right: 10px;
        /*设置父元素为相对定位*/
        position: relative;
        background: orange;
        /*设置元素的垂直对齐方式:
        把此元素放置在父元素的中部。*/
        vertical-align: middle;
        border-radius: 100%;
    }
    .box input {
        /*设置input元素的透明度,取值为0~1*/
        opacity: 0;
        /*设置子元素为绝对定位*/
        position: absolute;
        top: 0;
        left: 0;
        width: 100%;
        height: 100%;
        /*设置元素的堆叠顺序:使input按钮在span的上一层,否则点击区域会出现不灵敏的情况*/
        z-index: 100;
    }
    /*自定义内圆圈样式*/
    .box span {
        /*span为行内元素,改为块级元素可设置宽高等*/
        display: block;
        width: 10px;
        height: 10px;
        border-radius: 100%;
        position: absolute;
        background: #fff;
        top: 50%;
        left: 50%;
        margin: -5px 0 0 -5px;
        /*设置span在input元素下一层*/
        z-index: 1;
    }
    input[type="radio"]+span {
        opacity: 0;

    }
    /*设置被选中的元素透明度为1,即将其显示出来*/
    input[type="radio"]:checked+span {
        opacity: 1;
    }
    </style>
</head>
<body>
    <form action="#">
        <div class="wrapper">
            <div class="box">
                <input type="radio" checked="checked" id="boy" name="1" /><span></span>
            </div>
            <label for="boy">男</label>
        </div>
        <div class="wrapper">
            <div class="box">
                <input type="radio" id="girl" name="1" /><span></span>
            </div>
            <label for="girl">女</label>
        </div>
    </form>
</body>
</html>
设置单选框样式
  • ::selection伪元素:用来匹配突出显示的文本(用鼠标选择文本时的文本)。浏览器默认情况下,用鼠标选择网页文本是以深蓝的背景,白色的字体显示的。
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>::selection选择器</title>
    <style type="text/css">
    ::selection {
        background: orange;
        color: white;
    }
    </style>
</head>
<body>
    <p>用鼠标选中这行文字,你将会看到不一样的效果!</p>
</body>
</html>
设置鼠标选中文本时的文本效果
  • :read-only伪类选择器:指定处于只读状态元素的样式。其中,标签元素中设置了属性readonly="readonly"
  • :read-write选择器:用来指定当元素处于非只读状态时的样式。
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>属性选择器</title>
    <style type="text/css">
    form {
        width: 300px;
        padding: 10px;
        border: 1px solid #ccc;
        margin: 50px auto;
    }
    form>div {
        margin-bottom: 10px;
    }
    input[type="text"] {
        border: 1px solid orange;
        padding: 5px;
        background: #fff;
        border-radius: 5px;
    }
    /*设置只读状态的标签的样式*/
    input[type="text"]:read-only {
        border-color: #ccc;
    }
    textarea:read-only {
        border: 1px solid #ccc;
        height: 50px;
        resize: none;
        background: #eee;
        border-radius: 5px;
    }
    /*设置非只读状态的标签的样式*/
    input[type="text"]:read-write{
        border-color: #f36;
    }
    </style>
</head>
<body>
    <form action="#">
        <div>
            <label for="name">姓名:</label>
            <input type="text" name="name" id="name" placeholder="张三" />
        </div>
        <div>
            <label for="address">地址:</label>
            <input type="text" name="address" id="address" placeholder="中国深圳" readonly="readonly" />
            <!-- 规定文本区域为只读 -->
        </div>
        <div>
            <label for="comment">评论:</label>
            <textarea name="comment" id="" cols="30" rows="10" readonly="readonly" placeholder="这里的文本区域只读不可写!"></textarea>
        </div>
    </form>
</body>
</html>
设置只读和非只读文本区域的样式
  • ::before::after这两个主要用来给元素的前面或后面插入内容,常和属性"content"(指定要插入的内容)配合使用,使用的场景最多的就是清除浮动。一般代码编写如下:
.clearfix::before,
.clearfix::after {
    content: "."; /* 可以是空串,但不能不写*/
    display: block; /*只有作为块级元素才能清除浮动*/
    height: 0;
    visibility: hidden; /*规定元素是否可见*/
}
.clearfix:after {clear: both;} /*清除左浮动和右浮动,若只清除左浮动就写clear:left,右同理*/
.clearfix {zoom: 1;}
<!DOCTYPE html>
<html>
<head>
    <meta charset=utf-8 />
    <title>before、after</title>
    <style>
    .box h3 {
        /*文字居中*/
        text-align: center;
        /*父元素为相对定位*/
        position: relative;
        /*距离当前所在盒子的顶部为80像素*/
        top: 80px;
    }
    .box {
        /*盒子宽*/
        width: 70%;
        /*盒子高*/
        height: 200px;
        /*背景颜色*/
        background: #fff;
        /*外边距:上下40px,左右自适应*/
        margin: 40px auto;
    }
    .effect {
        /*父元素为相对定位*/
        position: relative;
        -webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3), 0 0 40px rgba(0, 0, 0, 0.1) inset;
        -moz-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3), 0 0 40px rgba(0, 0, 0, 0.1) inset;
        /*盒子阴影*/
        box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3), 0 0 40px rgba(0, 0, 0, 0.1) inset;
    }
    /*同时设置before和after,增强阴影效果*/
    .effect::before,
    .effect::after {
        /*插入的内容为空*/
        content: "";
        position: absolute;
        /*隐藏在div下一层,作为阴影层*/
        z-index: -1;
        -webkit-box-shadow: 0 0 20px rgba(0, 0, 0, 0.8);
        -moz-box-shadow: 0 0 20px rgba(0, 0, 0, 0.8);
        box-shadow: 0 0 20px rgba(0, 0, 0, 0.8);
        /*注意必须设置上右下左四个方向的位置,否则浏览器不能解析该样式*/
        top: 50%;
        bottom: 0;
        left: 10px;
        right: 10px;
        -moz-border-radius: 100px / 10px;
        /*设置圆角:水平半径/垂直半径*/
        border-radius: 100px / 10px;
    }
    </style>
</head>
<body>
    <!-- 引用两个类,effect作为阴影层,便于其他元素的引用,以降低代码的冗余 -->
    <div class="box effect">
        <h3>Shadow Effect </h3>
    </div>
</body>
</html>
设置伪元素before和after

CSS3变形

  • 旋转rotate()函数:通过指定的角度参数使元素相对原点进行旋转。若参数为正值,则元素相对原点中心顺时针旋转;若参数为负值,则元素相对原点中心逆时针旋转
  • transform属性应用于元素的2D或3D转换,其允许你将元素旋转缩放移动倾斜等。
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>变形与动画</title>
    <style type="text/css">
    .wrapper {
        margin: 100px auto;
        width: 300px;
        height: 200px;
        border: 2px dotted blue;
    }
    .wrapper div {
        width: 300px;
        height: 200px;
        line-height: 200px;
        text-align: center;
        background: green;
        color: #fff;
        -webkit-transform: rotate(-20deg);
        -moz-transform: rotate(-20deg);
        /*逆时针旋转20度*/
        transform: rotate(-20deg);
    }
    .wrapper span {
        /*改为块级元素,将文本旋转回到原来水平位置。*/
        display: block;
        -webkit-transform: rotate(20deg);
        -moz-transform: rotate(20deg);
        /*顺时针选择20度*/
        transform: rotate(20deg);
    }
    </style>
</head>
<body>
    <div class="wrapper">
        <div><span>我不想旋转(^_^)</span></div>
    </div>
</body>
</html>
设置元素旋转
  • 扭曲skew()函数(2D):可以将一个对象以其中心位置围绕着X轴和Y轴按照一定的角度倾斜。rotate()函数只是旋转,而不会改变元素的形状;skew()函数不会旋转,而只会改变元素的形状
    1、skew(xdeg,ydeg)使元素在水平和垂直方向同时扭曲(X轴和Y轴同时按一定的角度值进行扭曲变形);第一个参数对应X轴(横向倾斜度数),第二个参数对应Y轴(纵向倾斜度数)。如果第二个参数未提供,则值为0,也就是Y轴方向上无斜切。
    2、skewX(xdeg)仅使元素在水平方向扭曲变形(X轴扭曲变形)。x取值为X轴(水平方向)不动Y轴(竖直方向)逆时针倾斜一定角度。x取值为X轴(水平方向)不动,Y轴(竖直方向)顺时针倾斜一定角度。
    3、skewY(ydeg)仅使元素在垂直方向扭曲变形(Y轴扭曲变形)。y取值为y轴(竖直方向)不动x轴(水平)顺时针倾斜一定角度。y取值为y轴(竖直方向)不动,x轴(水平方向)逆时针倾斜一定角度。
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>变形与动画</title>
    <style type="text/css">
    .wrapper {
        width: 300px;
        height: 100px;
        /*边界为点线形式*/
        border: 2px dotted red;
        margin: 30px auto;
    }
    .wrapper div {
        width: 300px;
        height: 100px;
        line-height: 100px;
        text-align: center;
        /*字体颜色*/
        color: #fff;
        background: green;
        -webkit-transform: skew(45deg);
        -moz-transform: skew(45deg);
        /*Y轴逆时针倾斜45度*/
        transform: skew(45deg);
    }
    .wrapper span {
        display: block;
        /*Y轴顺时针倾斜45度*/
        -webkit-transform: skew(-45deg);
        -moz-transform: skew(-45deg);
        transform: skew(-45deg);
    }
    </style>
</head>
<body>
    <div class="wrapper">
        <div><span>我不想被扭曲(^_^)</span></div>
    </div>
</body>
</html>
横向倾斜
  • scale()缩放函数:将元素根据中心原点进行缩放。
    1、 scale(X,Y)使元素水平方向和垂直方向同时缩放(也就是X轴和Y轴同时缩放)举个例子:scale(2,3)转变宽度为原来的大小的2倍,和其原始大小3倍的高度。注意:Y是一个可选参数,若没有设置Y值,则表示X,Y两个方向的缩放倍数是一样的。scale()的取值默认为1,当值设置为0.01~0.99之间的任何值,都将一个元素缩小;而任何\ge 1.01 的值,都将一个元素放大。
    2、scaleX(x)元素仅水平方向缩放(X轴缩放)。
    3、scaleY(y)元素仅垂直方向缩放(Y轴缩放)。
设置缩放
  • translate()函数:将元素向指定的方向移动,类似于position中的relative。也就是说,使用translate()函数,可以把元素从原来的位置移动,而不影响在X、Y轴上的任何Web组件。
    1、translate(x,y)水平方向和垂直方向同时移动(也就是X轴和Y轴同时移动);
    2、translateX(x)仅水平方向移动(X轴移动);
    3、translateY(y)仅垂直方向移动(Y轴移动)。
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>变形与动画</title>
    <style type="text/css">
    /*不知道宽度和高度的元素情况下实现水平、垂直居中。*/
    .wrapper {
        padding: 20px;
        background: orange;
        color: #fff;
        position: absolute;
        top: 50%;
        left: 50%;
        border: 1px solid black;
        border-radius: 5px;
        -webkit-transform: translate(-50%, -50%);
        -moz-transform: translate(-50%, -50%);
        /*往上(x轴),左(y轴)移动自身宽高的 50%,以使其居于中心位置。*/
        transform: translate(-50%, -50%);
    }
    /*简单的移动*/
    .wrapper1 {
        float: left;
        width: 200px;
        height: 200px;
        border: 2px dotted red;
        margin: 20px auto;
    }
    .wrapper1 div {
        width: 200px;
        height: 200px;
        line-height: 200px;
        text-align: center;
        background: orange;
        color: #fff;
        -webkit-transform: translate(50px, 100px);
        -moz-transform: translate(50px, 100px);
        /*从当前元素位置向右移动50px,向下移动100px*/
        transform: translate(50px, 100px);
    }
    </style>
</head>
<body>
    <div class="wrapper">
        我不知道我的宽度和高是多少,我要实现水平垂直居中
    </div>
    <div class="wrapper1">
        <div>我向右向下移动</div>
    </div>
</body>
</html>
移动元素
  • matrix()矩阵函数:一个含六个值(a,b,c,d,e,f)的变换矩阵,包含旋转缩放移动(平移)倾斜功能。这6个参数通过矩阵计算推导可以得出如下结论:
    1、平移:transform: matrix(1,0,0,1,e,f); <=>transform: translate(e,f);
    2、缩放:transform: matrix(a,0,0,d,0,0);<=> transform: scale(a,d);
    3、旋转:transform: matrix(cosθ, sinθ, -sinθ, cosθ,0,0);<=>transform: rotate(θdeg);
    4、倾斜:transform: matrix(1, tanθy, tanθx, 1, 0, 0);<=>transform: skew(θx, θy);
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>变形与动画</title>
    <style type="text/css">
    .wrapper {
        width: 300px;
        height: 200px;
        border: 2px dotted red;
        margin: 40px auto;
    }
    .wrapper div {
        width: 300px;
        height: 200px;
        background: orange;
        -webkit-transform: matrix(1, 0, 0, 1, 50, 50);
        /*参数1:宽度为比例1表示原大小,      
          参数2:上下倾斜:0就是不倾斜,
                        1就是2倍,
                        2就是3倍,      
          参数3:左右倾斜: 含义同上,    
          参数4:高度比例1就是原大小,
          参数5:X轴上的像素位移,X方向就是左右,
          参数6:Y轴上的像素位移,Y方向就是上下*/
        transform: matrix(1, 0, 0, 1, 50, 50);
    }
    </style>
</head>
<body>
    <div class="wrapper">
        <div></div>
    </div>
</body>
</html>
设置matrix
  • 原点transform-origin:任何一个元素都有一个中心点,默认情况之下,其中心点是居于元素X轴和Y轴的50%处。在没有重置transform-origin改变元素原点位置的情况下,CSS变形进行的旋转、位移、缩放,扭曲等操作都是以元素自己中心位置进行变形。我们可以通过设置属性transform-origin来对元素进行原点位置改变,使元素原点不在元素的中心位置,以达到需要的原点位置。
  • transform-origin取值和元素设置背景中的background-position取值类似,如下表所示:
transform-origin的取值
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>变形与动画</title>
    <style type="text/css">
    .wrapper {
        width: 150;
        height: 150px;
        float: left;
        margin: 100px;
        border: 2px dotted red;
        line-height: 150px;
        text-align: center;
    }
    .wrapper div {
        background: orange;
        /*顺时针旋转45度*/
        -webkit-transform: rotate(45deg);
        transform: rotate(45deg);
    }
    .transform-origin div {
        /*改变元素原点到左上角*/
        -webkit-transform-origin: left top;
        transform-origin: left top;
    }
    </style>
</head>
<body>
    <div class="wrapper">
        <div>原点在默认位置处</div>
    </div>
    <div class="wrapper transform-origin">
        <div>原点重置到左上角</div>
    </div>
</body>
</html>
修改元素原点

参考文章

相关文章

  • CSS3学习笔记(四)

    在Web的表单中,有些表单元素有可用(:enabled)和不可用(:disabled)状态,比如输入框,密码框,复...

  • Scss进阶篇3

    慕课网学习笔记 @importSass 支持所有 CSS3 的 @ 规则, 以及一些 Sass 专属的规则,也被称...

  • css3学习笔记

    css3简介 CSS3是层叠样式表(Cascading Style Sheets)语言的最新版本,旨在扩展CSS2...

  • css3学习笔记

    最近做的项目中,涉及到了许多动画效果的实现,今天主要谈谈css3 Animation的使用。 CSS3属性中有关于...

  • CSS3学习笔记

    1. border-radius 向 div 元素添加圆角边框 例子 2border-radius: 2em 1e...

  • CSS3 学习笔记

    过渡 注意:如果时长未规定,则不会有过渡效果,因为默认值是 0。 边框 border-radius border-...

  • CSS3学习笔记

    效果如图 只需要创建一个一个div CSS代码如下

  • 07day

    CSS3动画 CSS3 @keyframes 规则如需在 CSS3 中创建动画,您需要学习 @keyframes ...

  • 前端学习笔记-CSS3

    项目代码同步上传到https://github.com/panhoucheng/Front-End-Study c...

  • CSS3学习笔记(二)

    background-origin:元素背景图片的原始位置。语法: 参数分别表示背景图片是从边框,内边距(默认值)...

网友评论

      本文标题:CSS3学习笔记(四)

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