整合营销服务商

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

免费咨询热线:

CSS3图片占位,解决页面布局跑位

CSS3图片占位,解决页面布局跑位

们经常会遇到这样的一个问题。

设计出了很牛逼的设计稿,客户确认了,前端静态制作也出来,还原设计稿95%以上,客户也确认了。

那是个完美啊!!做完程序了,交给客户了。然后客户自己上传了图片了。那个悲催啊!!惨不忍睹啊!!

完全和设计稿两码事?图片不好看,到处都跑位。

客户就骂过来了,你们是否也遇到这样的事情?因为客户的公司没有设计师啊,哈哈,这个问题可能遇到的不少。

其实大家都会说,这归根到底都是客户没有处理图片的问题所造成的。然后大家都推来推去。

那么,前端制作工程师是否有办法解决这样的问题,其实是可以的。如果因图片问题导致布局变了,解决了这个问题就只剩下图片的美观性,那这个就可以跟客户说你要请个设计师帮你处理图片啊。这样不就解决问题了吗?

这种方式和微信朋友圈的九宫格图片展示方式类似,只显示图片中间的内容,其他的将会被隐藏。

举个栗子:

这个列表是不是很整齐,看起来比较舒服,虽然图片有那么点点的变形,但不影响阅读。

如果其中有一张图片的尺寸稍微有一点点不一样,肯定会出现跑位的情况。就像下面这样。这样客户看到不被投诉才怪哦!!

那么就以这个来说说解决方式。

大家都知道图片有一种特性,就是当图片的宽度改变时,高度也会随着等比例在改变。

例如:一张宽高都为100px的图片,如果把宽度调至200px,那么高度是不是也会随之变成200px;没错的,就是利用这个特性来解决布局乱的情况。

这里就拿上一次说到的 “图文列表 纯css布局” 那次说的布局来说说,因为都是做好,和上面那个图类似。偷偷懒。如果没看过那篇,搜一下 “图文列表 纯css布局”,就可以找到了。(如需下载源码,请关注微信公众号:JS学吧)

效果是这样的:

如何切出占位图呢?如下操作

用PS打开文件,用裁剪工具把图片完整的裁下来,如下图

裁完成,再点击菜单栏目 “图像 > 图像大小” 或 按着 Alt键,再点两次 I 键。可以调出 “图像大小” 弹窗。

可以看到 “像素大小” 的宽度和高度都为260px,那么只要调其中一个就可以,就可以达到等比例调整。

我们先调成10px,确定后,再把图层的 “小眼睛” 关掉,另存为一个 png24 的透明图片,记得哦!!一定是要png24的。名字自己定啦!!

然后把 img 中的图片路径改为如下:

<a href=""><img src="rect.png" alt="" width="100%"></a>然后刷新看看效果,是不是发现原来的图片不见的,变成空白的,但是原来的布局结构没有改变。其实要的就是这样的效果。

然后我们在 img 的外层再包个div,就拿这个div来放图片。顺便加个背景色看看效果。

<a href="">

<div style="background: #000;">

<img src="rect.png" alt="" width="100%">

</div>

</a>

看,占位图片的效果出来了。外层div的宽度和高度都被img撑开了。是不是达到了想要的效果。

关键的时候来了。就是处理图片。我们要把产品图片做为背景的形式输出即可以。把图片的路径写在div上面的就解决了。再加上css3新属性就可以了。

HTML如下:

<a href="">

<div class="cover-img" style="background-image: url(pic001.jpg);">

<img src="rect.png" alt="" width="100%">

</div>

</a>

用背景样式 background-image 定入路径。再添加一个 cover-img 的类名。然后 cover-img 的样式如下:

.cover-img {

background-position: center;

background-repeat: no-repeat;

background-size: cover;

}

注意、注意、注意,中要的事说三遍。重点就在于 css3 的新属性 background-size: cove;

这个属性就是会把背景图片,以等比例的形式保持图像本身的宽高比例,将图片缩放到正好完全覆盖定义背景的区域。

是不是不明白,那就对了,挺不好理解。最好还是用实际效果来看看。

最终出来的效果就是和最开始的那张图片一样的,只是看不出来而已。

那么我们就来玩真的。直接上网整一张大图的路径放进去看看就知道了。

上某某网站找特大尺寸的图片来,例如下面这张:尺寸是2533x1583,够大了,也不是正方形哦!!我们一开始说的都是正方形,现在弄个不是正方形的图片来试试效果。

HTML如下:

<a href="">

<div class="cover-img" style="background-image: url(pic002.jpg);">

<img src="rect.png" alt="" width="100%">

</div>

</a>

更改url里的路径即可

出来的效果如下:

是不是自动调整了。

我们再换一张高形状的图片。二哈图:尺寸是2448x3264

HTML:如下

<a href="">

<div class="cover-img" style="background-image: url(pic003.jpg);">

<img src="rect.png" alt="" width="100%">

</div>

</a>

最终效果:

怎么样,效果还可以吧!!不知道你们看出了什么了没有。

第一张是宽形状的图片,是以高度填满 div 的区域。

第二张是高形状的图片,是以宽度填满 div 的区域。

全都是靠着 background-size: cover; 这个属性解决了。但也是有不好的地方。

例如不支持IE浏览器,图片显示不全,多一个文件服务器要多请求一次.....等等问题!!做图时的内容尽可能在正中间。

然后,不管客户上传什么鬼形状的图片,都不会产生布局变乱的情况。



获取《vue3.0大公司后台管理系统开发 正规开发流程项目实践》视频,

请点击下面 “了解更多” 或 请关注微信公众号《手把手撸码前端》

HTML的世界里,一切都是由容器和内容构成的。容器,就如同一个个盒子,用来装载各种元素;而内容,则是这些盒子里的珍宝。理解了这一点,我们就迈出了探索HTML布局的第一步。

在HTML中,布局标签主要用于控制页面的结构和样式。本文将介绍一些常用的布局标签及其使用方法,并通过代码示例进行演示。

一、理解布局的重要性

布局在我们前端开发中担任什么样的角色呢?想象一下,你面前有一堆散乱的积木,无序地堆放在那里。

而你的任务,就是将这些积木按照图纸拼装成一个精美的模型。HTML布局标签的作用就像那张图纸,它指导浏览器如何正确、有序地显示内容和元素,确保网页的结构和外观既美观又实用。

下面我们就来看看在HTML中常用的基础布局标签有哪些,如何使用这些布局标签完成我们的开发目标。

二、常用的布局标签

1、div标签

div标签是一个块级元素,它独占一行,用于对页面进行区域划分。它可以包含其他HTML元素,如文本、图片、链接等。通过CSS样式可以设置div的布局和样式。

示例代码:

<!DOCTYPE html>
<html>
<head>
<style>
  .box {
    width: 200px;
    height: 200px;
    background-color: red;
  }
</style>
</head>
<body>

<div>这是一个div元素

</div>

</body>
</html>

运行结果:

2、span标签

span标签是一个内联元素,它不独占一行,用于对文本进行区域划分。它主要用于对文本进行样式设置,如字体、颜色等。与div类似,span也可以包含其他HTML元素。
示例代码:

<!DOCTYPE html>
<html>
<head>
<style>
  .text {
    color: blue;
    font-size: 20px;
  }
</style>
</head>
<body>

<p>这是一个<span>span元素</span>。</p>

</body>
</html>

运行结果:

3、table标签

table标签用于创建表格,它包含多个tr(行)元素,每个tr元素包含多个td(单元格)或th(表头单元格)元素。

<table> 定义一个表格,<tr> 定义表格中的行,而 <td> 则定义单元格。通过这三个标签,我们可以创建出整齐划一的数据表,让信息的展示更加直观明了。

需要注意的是:

  • <table>和</table>标记着表格的开始和结束。
  • <tr>和</tr>标记着行的开始和结束,几组表示该表格有几行。
  • <td>和</td>标记着单元格的开始和结束,表示这一行中有几列。

示例代码:

<!DOCTYPE html>
<html>
<head>
<style>
  table, th, td {
    border: 1px solid black;
  }
</style>
</head>
<body>
<table>
  <tr>
    <th>姓名</th>
    <th>年龄</th>
  </tr>
  <tr>
    <td>张三</td>
    <td>25</td>
  </tr>
  <tr>
    <td>李四</td>
    <td>30</td>
  </tr>
</table>
</body>
</html>

运行结果:

4、form标签

<form>标签的主要作用是定义一个用于用户输入的HTML表单。这个表单可以包含各种输入元素,如文本字段、复选框、单选按钮、提交按钮等。

<form>元素可以包含以下一个或多个表单元素:<input>、<textarea>、<button>、<select>、<option>、<optgroup>、<fieldset>、<label>和<output>等。

示例代码:

<!DOCTYPE html>
<html>
<head>
<style>
  form {
    display: flex;
    flex-direction: column;
  }
</style>
</head>
<body>

<form>
  <label for="username">用户名:</label>
  <input type="text" id="username" name="username">
  <br>
  <label for="password">密码:</label>
  <input type="password" id="password" name="password">
  <br>
  <input type="submit" value="提交">
</form>

</body>
</html>

运行结果:

5、列表标签

1)无序列表

  • 指没有顺序的列表项目
  • 始于<ul>标签,每个列表项始于<li>
  • type属性有三个选项:disc实心圆、circle空心圆、square小方块。 默认属性是disc实心圆。

示例代码:

<!DOCTYPE html>
<htmml>
<head>
<meta charst="UTF-8">
<title>html--无序列表</title>
</head>
<body>
<ul>
<li>默认的无序列表</li>
<li>默认的无序列表</li>
<li>默认的无序列表</li>
</ul>
<ul>
<li type="circle">添加circle属性</li>
<li type="circle">添加circle属性</li>
<li type="circle">添加circle属性</li>
</ul>
<ul>
<li type="square">添加square属性</li>
<li type="square">添加square属性</li>
<li type="squaare">添加square属性</li>
</ul>
</body>
</html>

运行结果:


也可以使用CSS list-style-type属性定义html无序列表样式。

想要快速入门前端开发吗?推荐一个前端开发基础课程,这个老师讲的特别好,零基础学习无压力,知识点结合代码,边学边练,可以免费试看试学,还有各种辅助工具和资料,非常适合新手!点这里前往学习哦!「链接」

2)有序列表

  • 指按照字母或数字等顺序排列的列表项目。
  • 其结果是带有前后顺序之分的编号,如果插入和删除一个列表项,编号会自动调整。
  • 始于<ol>标签,每个列表项始于<li>。

示例代码:

<ol>
<li>默认的有序列表</li>
<li>默认的有序列表</li>
<li>默认的有序列表</li>
</ol>
<ol type="a" start="2">
<li>第1项</li>
<li>第2项</li>
<li>第3项</li>
<li value="20">第四项</li>
</ol>
<ol type="Ⅰ" start="2">
<li>第1项</li>
<li>第2项</li>
<li>第3项</li>
</ol>

运行结果:


同样也可以使用CSS list-style-type属性定义html有序列表样式。

3)自定义列表

  • 自定义列表不仅仅是一列项目,而是项目及其注释的组合。
  • 以<dl>标签开始。每个自定义列表项以<dt>开始。每个自定义列表项的定义以<dd>开始。
  • 用于对术语或名词进行解释和描述,自定义列表的列表项前没有任何项目符号。
    基本语法:
<dl>
<dt>名词1</dt>
<dd>名词1解释1</dd>
<dd>名词1解释2</dd>

<dt>名词2</dt>
<dd>名词2解释1</dd>
<dd>名词2解释2</dd>
</dl>

<dl>即“definition list(定义列表)”,
<dt>即“definition term(定义名词)”,
而<dd>即“definition description(定义描述)”。

示例代码:

<dl>
<dt>计算机</dt>
<dd>用来计算的仪器</dd>

<dt>显示器</dt>
<dd>以视觉方式显示信息的装置</dd>
</dl>

运行结果:


以上就是HTML中常用的布局标签及其使用方法。在实际开发中,还可以结合CSS和JavaScript来实现更复杂的布局和交互效果。

掌握了这些HTML常用布局标签,你已经拥有了构建网页的基础工具。记住,好的布局不仅需要技术,更需要创意和对细节的关注。现在,打开你的代码编辑器,开始你的布局设计之旅吧!

、摘 要

(OF作品展示)

OF之前介绍了用python实现数据可视化、数据分析及一些小项目,但基本都是后端的知识。想要做一个好看的小系统,我们还要学一些前端的知识,今天OF将讲解如何用pycharm(全栈开发不错的工具)做一张好看的网页,以后我们就可以自己开发网页/网站放到互联网上。

主要内容:网页前端布局

适用人群:Python初学者,前端初学者

准备软件:pycharm

二、pycharm操作说明

1. 创建项目

1) 下载完成pycharm, 点击file-New Project...

2) 按下图步骤创建一个项目,目前我们选择Pure python即可,以后我们可以学习用Django/flask等框架来做完整的系统

2. 创建HTML文件

1)在创建的项目空白处鼠标右键-New-HTML File

2)输入英文的网页名字,尽量不要输入中文/特殊字符

3. HTML格式说明

当双击打开我们创建后的HTML文件,大家会看到下面的界面

三、网页设计

1. 草图绘制

在开始开发网页前,我们需要自己设计下想要把网页做成什么样,为了节省成本OF都是自己设计的页面样式,可以手绘,也可以在PPT上画。

2. css名字定义

我们先学习一个比较简单的布局如下图,大家可以看到下图已经画出了我们需要添加的内容,要注意的地方是比如Taylor的图片和文字一定要用<div class=bord>框住,否则Taylor图片与文字将会是左右的关系,而不是上下

四、网页开发

1. body部分

根据上述的css名字定义,先填充<body>内的代码,那么我们就完成一半的工作了,代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<div id="intro">
    <p class="peo">人物介绍</p>
</div>
<div id="pic1">
    <div class="bord">
        <img class="img" src="pic/Taylor.png"/>
        <p class="word">Taylor</p>
    </div>
    <div class="bord">
        <img class="img" src="pic/yan.png"/>
        <p class="word">东</p>
    </div>
    <div class="bord">
        <img class="img" src="pic/song.png"/>
        <p class="word">乔</p>
    </div>
</div>
</body>
</html>

2. 网页测试

1)鼠标移到代码处,在右上角我们会看到一排浏览器,我们点击其中一个运行

2)目前看到的网页内容从上到下显示

3. head部分

首先我们简要了解下flex布局,大家可以看到下图中#main的style样式中display:flex,在body部分将3个颜色内容框在<div id="main">中,运行结果是3个颜色的内容横向展示了,而不是上下

1)那么我们先从“人物介绍”的布局开始,“人物介绍”居中展现(用flex中justify-content:center),而且下面有一条黑线,OF准备用border样式来实现,所以在<div id=intro>里另加了个<div class=peo>,代码如下:

(注:style中的#main对应body中的id=main, .main对应class=main)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        #intro {
            display: -webkit-flex; /* Safari */
            display: flex;
            justify-content: center;
        }
        .peo {
            max-width: 10rem;
            border-bottom: 0.2rem solid #000000;
            font-family: sans-serif;
            font-size: 1.5rem;
            color: #0070C0;
            line-height: 3rem;
        }
    </style>
</head>
<body>
<div id="intro">
    <p class="peo">人物介绍</p>
</div>
<div id="pic1">
    <div class="bord">
        <img class="img" src="pic/Taylor.png"/>
        <p class="word">Taylor</p>
    </div>
    <div class="bord">
        <img class="img" src="pic/yan.png"/>
        <p class="word">东</p>
    </div>
    <div class="bord">
        <img class="img" src="pic/song.png"/>
        <p class="word">乔</p>
    </div>
</div>
</body>
</html>

运行结果:

2)图片部分是3个<div class=bord>横向展示,所以要在框住它们的<div id=pic1>样式中设置flex布局,在<style>里加入以下代码:

#pic1 {
    display: -webkit-flex; /* Safari */
    display: flex;
    justify-content: center;
}

运行结果:

3)图片之间靠太近,图片大小不一致,文字没居中,我们在<style>里加入以下代码:

.bord{
    padding: 1rem 2rem;
}


.img {
    border: 0.2rem solid #e3e3e3;
    max-width: 15rem;
    height: 22rem;
}


.word {
    text-align: center;
}

运行结果:

五、总 结

今天我们学会了flex布局,今后所有的网页排版都可以实现了,祝愿大家都有所收获,完整的代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        #intro {
            display: -webkit-flex; /* Safari */
            display: flex;
            justify-content: center;


        }

        .peo {
            max-width: 10rem;
            border-bottom: 0.2rem solid #000000;
            font-family: sans-serif;
            font-size: 1.5rem;
            color: #0070C0;
            line-height: 3rem;
        }

        #pic1 {
            display: -webkit-flex; /* Safari */
            display: flex;
            justify-content: center;
        }

        .bord{
            padding: 1rem 2rem;
        }

        .img {
            border: 0.2rem solid #e3e3e3;
            max-width: 15rem;
            height: 22rem;
        }

        .word {
            text-align: center;
        }
    </style>
</head>
<body>
<div id="intro">
    <p class="peo">人物介绍</p>
</div>
<div id="pic1">
    <div class="bord">
        <img class="img" src="pic/Taylor.png"/>
        <p class="word">Taylor</p>
    </div>
    <div class="bord">
        <img class="img" src="pic/yan.png"/>
        <p class="word">东</p>
    </div>
    <div class="bord">
        <img class="img" src="pic/song.png"/>
        <p class="word">乔</p>
    </div>
</div>
</body>
</html>

今天的知识比较基础但非常实用,每天学会一个小技能,积少成多,以后就能成为大神。如果大家对网页上的实现有什么不懂的,尽请留言,OF一定会一一解答的。