• CSS简笔画:纯CSS绘制一艘邮轮


    <div class="ship">
    <div class="ship-body"></div>
    </div>

    :root{
    --seaColor:#54a0ff;
    --lineColor: #fff;
    --enclosureColor: #000;
    }
    body {
    100%;
    height: 100vh;
    }
    .ship{
    position: absolute;
    480px;
    height: 150px;
    left: 50%;
    top: 50%;
    margin-left: -240px;
    margin-top: -75px;
    }
    .ship-body{
    position: absolute;
    480px;
    height: 150px;
    background: var(--seaColor);
    transform: rotate(180deg) perspective(3em) rotateX(9deg);
    z-index: 1;
    left: 50%;
    top: 50%;
    margin-left: -240px;
    margin-top: -75px;
    }

    这里用到了元素水平垂直居中的另外一种方式,让元素绝对定位,然后left/top=50%,然后margin-left/top=负元素宽度的一半,就可以居中了。

    船体镂空梯形

    这个也就非常简单了,在制作个小一些的白色梯形,覆盖到船体上方即可。

    <div class="ship">
      ...
      <div class="ship-body-out"></div>
    </div>
    
    HTML
    .ship-body-out{
      position: absolute;
      width: 305px;
      height: 36px;
      background: var(--lineColor);
      transform: rotate(180deg) perspective(1em) rotateX(6deg);
      z-index: 1;
      left: 66px;
      top: -30px;
    }
    
    CSS

    细心的小伙伴可能就发现了,图一的左右不是一般高,上图却是一样高的,我只能说,你眼神真好!

    我们在用伪类,盖住一部分高度去

    .ship-body-out:after{
      position: absolute;
      display: block;
      content: '';
      background: var(--lineColor);
      height: 10px;
      width: 133px;
      left: 305px;
      top: 19px;
    }
    
     

    船名

    每艘船都一个属于它自己的名字,和人名一样。比较有名的,如:定远号(亚洲第一舰)、长城号、东风号等。

    下面也为咱们的船弄个名字上去

    <div class="ship">
      ...
      <div class="ship-name">Web秀号</div>
    </div>
    
    HTML
    .ship-name{
      position: absolute;
      z-index: 1;
      text-align: center;
      width: 100%;
      color: #fff;
      font-size: 18px;
      top: 50px;
    }
    .ship-name:after, .ship-name:before {
      position: absolute;
      content: '';
      display: block;
      width: 10px;
      height: 10px;
      top: 10px;
      border-radius: 100%;
      --disance: 120px;
    }
    .ship-name:after{
      right: var(--disance);
      box-shadow: 
        -10px 0px,
        -30px 0px,
        -50px 0px;
    }
    .ship-name:before{
      left: var(--disance);
      box-shadow: 
        10px 0px,
        30px 0px,
        50px 0px;
    }
    
    CSS

    伪类主要是用来主要是用来展示名字两旁的点(专业名词作者不知道,希望有专业的小伙伴告知一下),点的个数主要是用box-shadow实现。

    box-shadow 多阴影的宽高,圆角都继承元素本身的宽高,圆角,这里也就是伪类的宽高,然后box-shadow主要控制多阴影的个数和位置,前面的值是X坐标,后面的是Y坐标,同时还可以在后面添加颜色。

    船锚

    <div class="ship">
      ...
      <div class="ship-anchor">
        <div class="anchor">
          <div class="anchor-left"></div>
          <div class="anchor-right"></div>
        </div>
      </div>
    </div>
    
    HTML
    .ship-anchor{
      position: absolute;
      z-index: 1;
      width: 100%;
      top: 20px;
    }
    .ship-anchor .anchor{
      position: absolute;
      width: 30px;
      height: 30px;
      border: 5px solid var(--lineColor);
      border-radius: 100%;
      right: 30px;
    }
    
    .ship-anchor .anchor:after{
      position: absolute;
      content: '';
      display: block;
      width: 5px;
      height: 20px;
      background: var(--lineColor);
      margin-left: -2.5px;
      left: 50%;
      top: 25px;
    }
    
    CSS

    到这里还非常简单,就是普通的一个同心圆和一个矩形,组成的形状。然后添加锚的钩子

    .anchor-left {
      position: absolute;
      width: 0;
      height: 0;
      border-top: 9px solid transparent;
      border-right: 9px solid var(--lineColor);
      transform: rotate(163deg);
      left: -22px;
      top: 32px;
    }
    .anchor-left:after {
      content: "";
      position: absolute;
      border: 0 solid transparent;
      border-top: 4px solid var(--lineColor);
      border-radius: 50px 0 0 0;
      top: -18px;
      left: -26px;
      width: 34px;
      height: 15px;
      transform: rotate(45deg);
    }
    
    .anchor-right {
      position: absolute;
      width: 0;
      height: 0;
      border-top: 9px solid transparent;
      border-right: 9px solid var(--lineColor);
      transform: rotateX(150deg);
      left: 31px;
      top: 27px;
    }
    .anchor-right:after {
      content: "";
      position: absolute;
      border: 0 solid transparent;
      border-top: 4px solid var(--lineColor);
      border-radius: 50px 0 0 0;
      top: -18px;
      left: -26px;
      width: 34px;
      height: 15px;
      transform: rotate(45deg);
    }
    
    CSS

    护栏

    <div class="ship">
      ...
      <div div class="ship-head-enclosure"></div>
      <div class="ship-center-enclosure"></div>
      <div class="ship-foot-enclosure"></div>
    </div>
    
    HTML

    护栏有3段,船头、船中和船尾。然后分别调试取得宽度(F12,和现有船体对齐),然后利用box-shadow一一实现护栏样式。

    主要是先用个黑色背景,然后横向画出多个白色正方形块,每个块之间错位一个像素,这样就可以看到块与块之间的黑色部分了。然后top距离容器1px,上方的底色也就可以看到。下地就不用了,让容器高度刚好多出2个像素,底部底色就可以显示出来

  • 相关阅读:
    Python find()方法
    Python expandtabs()方法
    RGB-D对红外热像仪和毫米波雷达标定
    ADAS虚拟车道边界生成
    3D惯导Lidar SLAM
    语义分割改进:通过视频传播和标签松弛
    YOLOv4:目标检测(windows和Linux下Darknet 版本)实施
    tensorflow-yolov4实施方法
    3D惯导Lidar仿真
    YOLOv4实用训练实践
  • 原文地址:https://www.cnblogs.com/kyooo/p/13534154.html
Copyright © 2020-2023  润新知