html、css 实现轮播图的静态样式

男娘i 2023-06-20 09:14 25阅读 0赞

最终效果:利用html、css实现轮播图(静态的,我只实现轮播图的基本样式)

在这里插入图片描述


一:选取四张图片作为轮播图的素材:

在这里插入图片描述
html:

  1. <div class="banner">
  2. <div class="imgs">
  3. <a href=""><img src="./img/Ahri01.jpg" alt=""></a>
  4. <a href=""><img src="./img/Ahri02.jpg" alt=""></a>
  5. <a href=""><img src="./img/Ahri03.png" alt=""></a>
  6. <a href=""><img src="./img/Ahri04.jpg" alt=""></a>
  7. </div>
  8. </div>

css:

  1. .banner{
  2. width: 520px;
  3. height: 300px;
  4. margin: 1em auto;
  5. }
  6. .banner .imgs img{
  7. width: 520px;
  8. height: 300px;
  9. object-fit: cover;
  10. }
  • object-fit一般在视频、图片中使用,表示其适应方式
    它有三个取值:





















object-fit取值 说明
fill 默认值,不保持比例,图片全部显示
contain 保持宽高比例,图片不能溢出
cover 比例不变,填充满,牺牲掉图片信息

这时候,你细心的话,可能会发现,为什么四个图片之间有空隙呢?
其实这些空隙就是一个空格
因为img元素被a元素包着,a元素是行盒(其实img元素也是行盒),行盒之间是有空白折叠的

空白折叠:在源代码中的连续空白字符(space、enter、tab),在页面上显示时,会被折叠为一个空格

  1. <a href="">zgh</a>
  2. <a href="">666</a>

输出:

  1. zgh 666

若两个a元素挨着写(中间没有空隙)是这么写:

  1. <a href="">zgh</a><a href="">666</a>

输出:

  1. zgh666

解决图片之间的空隙也很简单,后面会使用某个css属性,顺便把这个问题解决的。

二:将这四张图片横向排列:

在这里插入图片描述
四个图片的宽高我都设置的是相同的,我只需要将包着图片的那个div.imgs设置一下宽高即可,高为图片的高,宽为图片的宽的4倍

img元素被a元素包着,而a元素是行盒(其实img元素也是行盒),行盒中的内容是会同行显示的(若知识不够扎实,会认为四个图片刚刚好横向排列在div.imgs中)

css:

  1. .banner .imgs{
  2. width: 2080px;
  3. height: 300px;
  4. }

在这里插入图片描述
但可惜由于空白折叠的存在,图片之间还有一个空格,导致div.imgs的宽度 < 图片的宽度的4倍 + 3个空格的宽度
那么,div.imgs中放下了三张图片之后,剩余空间的宽度 < 图片的宽度,那么第四张图片就会跑到下面去了

不要想着去把div.imgs的宽度改为图片的宽度的4倍 + 3个空格的宽度,这样写太傻了,今天你的轮播图里面只放4张图片,这样确实是可以;当时日后,你要放8张、9张图片的时候,你还要来改div.imgs的宽度嘛(这不现实,会大大的增加开发难度)

所以要去解决空白折叠的问题

空白折叠的解决办法:

  1. 写html代码时,把标签挨着写(这是下下策:这么写,代码的可读性太差劲了!)
  2. 将图片变为块盒display: block;(块盒之间没有空白折叠)

但是又会出现一个问题,块盒是单行显示的(图片间的空白折叠是解决了,但是图片又变成竖向排列了)

这时候,就是浮动该出场的时候了

float的属性值:

  1. left
    左浮动,元素靠上靠左
  2. right
    右浮动,元素靠上靠右
  3. none
    默认值,为常规流

float的基本特点:

  • 当一个元素浮动后,元素必定为块盒(display的值变为block)
  • 浮动元素的包含块,依旧为父元素的内容盒

css:

  1. .banner .imgs a{
  2. float: left;
  3. }

于是,问题解决

三:将不需要显示的图片隐藏:
在这里插入图片描述

盒子隐藏,有两种方法:

  1. display: none;不生成盒子(会影响到其它元素的排列)
  2. visibility: hidden;生成盒子,只是从视觉上移除盒子,盒子仍然占据空间

但我这里不需要隐藏盒子,需要的是溢出隐藏

overflow 溢出处理:控制内容溢出边框盒后的处理方式

overflow的属性值:

  1. visible(默认值)
  2. hidden
  3. scroll(会生成滚动条)
  4. auto(滚动条自适应)

overflow还有两个子属性:overflow-xoverflow-y

css:
在这里插入图片描述

这四张图片怎么在轮播图中进行切换呢?
其实也很简单,修改div.imgs的margin-left即可,
不过这是JS的工作,就不多说了(我这里只写轮播图的静态样式)
在这里插入图片描述

四:轮播图的左右切换按钮:

在这里插入图片描述

这两个切换按钮,需要使用定位了

html:
在这里插入图片描述
css:

首先需要将div.banner设置为相对定位
在这里插入图片描述

然后开始设置两个按钮的css样式:

在这里,轮播图中的左右切换按钮,我是用的大于号和小于号做的,不够精美好看,不过勉强可以用一用(有兴趣的,可以把左右按钮改为图标)

  1. .banner .left, .banner .right{
  2. position: absolute;
  3. top: 0;
  4. bottom: 0;
  5. margin: auto 0;
  6. width: 50px;
  7. height: 50px;
  8. color: #fff;
  9. font-size: 3em;
  10. line-height: 50px;
  11. text-align: center;
  12. font-family: Arial;
  13. border-radius: 50%;
  14. cursor: pointer;
  15. }
  16. .banner .left{
  17. left: 20px;
  18. }
  19. .banner .right{
  20. right: 20px;
  21. }
  22. .banner .left:hover, .banner .right:hover{
  23. background-color: #fff;
  24. color: #f40;
  25. }

五:轮播图下方需要一个遮罩层:

在这里插入图片描述

html:
在这里插入图片描述
css:

  1. .banner .modal{
  2. position: absolute;
  3. left: 0;
  4. bottom: 0;
  5. width: 100%;
  6. height: 40px;
  7. background-color: rgba(0, 0, 0, 0.3);
  8. }

遮罩层我使用了alpha通道设置透明度,其实我觉得这样就挺好看的,很多网站将遮罩层做成颜色渐变的(个人觉得一般般,就没有用css3的知识来做渐变颜色,有兴趣的可以自己试一试)

六:轮播图下方的完整样式:

在这里插入图片描述

一般,轮播图的下方有一个遮罩层,上面会有两个东西:

  • 左边:文字
  • 右边:图片个数的切换小圆圈
    蒙层(为了文字、小圆圈圈显示清晰,不被背景图片的颜色干扰)

html:

在这里插入图片描述
css:

  1. .banner .modal{
  2. position: absolute;
  3. left: 0;
  4. bottom: 0;
  5. width: 100%;
  6. height: 40px;
  7. line-height: 40px;
  8. background-color: rgba(0, 0, 0, 0.3);
  9. box-sizing: border-box;
  10. padding: 0 20px;
  11. color: #fff;
  12. }
  13. .banner .modal .title{
  14. float: left;
  15. font-weight: bold;
  16. }
  17. .banner .modal .dots{
  18. float: right;
  19. }
  20. .banner .modal .dots ul li{
  21. width: 8px;
  22. height: 8px;
  23. background-color: #999;
  24. display: inline-block;
  25. margin: 0 2px;
  26. border-radius: 50%;
  27. cursor: pointer;
  28. }

右边的四个小圆圈圈,我是用无序列表做的,然后把li元素设置为行块盒(display: inline-block),

行块盒

  • 不独占一行
  • 盒模型中的所有尺寸都有效

自此,本文结束,本文基本只涉及html、css的知识,做的轮播图也是静态的,不过把怎么做它的样式说清楚了(日后,有兴致再加入JS吧,把它做成动态的)

开发工具:VsCode、Chrome
代码:html、css
完整代码:github
在这里插入图片描述

发表评论

表情:
评论列表 (有 0 条评论,25人围观)

还没有评论,来说两句吧...

相关阅读