下面我将从CSS样式、表单结构和织梦后台设置三个方面,为你提供一套完整且易于操作的解决方案。

(图片来源网络,侵删)
核心思路
手机自适应的核心是响应式设计,我们通过CSS媒体查询(Media Queries)来检测设备的屏幕宽度,当宽度小于某个值(例如768px,代表平板和手机)时,应用一套专门为小屏幕优化的样式。
第一步:优化HTML表单结构 (关键)
在写CSS之前,必须确保你的HTML表单结构是清晰、语义化的,这不仅是自适应的基础,也有利于SEO和可访问性。
一个标准的织梦自定义表单HTML结构通常是这样的:
<form name='myform' action='/plus/diy.php' enctype='multipart/form-data' method='post'>
<input type='hidden' name='action' value='post' />
<input type='hidden' name='diyid' value='1' /> {/* 这里填写你的表单ID */}
<input type='hidden' name='do' value='2' />
{/* CSRF Token织梦5.7及以上版本需要 */}
{dede:php}
if (version_compare(DEDEVERSION, '5.7', '>=')) {
echo '<input type="hidden" name="__hash__" value="' . $_SESSION['dede__hash__'] . '"/>';
}
{/dede:php}
<div class="form-group">
<label for="name">姓名</label>
<input type="text" name="name" id="name" class="form-control" placeholder="请输入您的姓名">
</div>
<div class="form-group">
<label for="tel">手机号码</label>
<input type="tel" name="tel" id="tel" class="form-control" placeholder="请输入您的手机号">
</div>
<div class="form-group">
<label for="content">留言内容</label>
<textarea name="content" id="content" class="form-control" rows="4" placeholder="请输入您的留言内容"></textarea>
</div>
<div class="form-group">
<label>验证码</label>
<div class="captcha-row">
<input type="text" name="vdcode" class="form-control" placeholder="请输入验证码">
<img src='{dede:global.cfg_cmspath/}/include/vdimgck.php' onclick='this.src="{dede:global.cfg_cmspath/}/include/vdimgck.php?"+Math.random()' alt='看不清?点击换一张' />
</div>
</div>
<button type="submit" name="submit" class="btn-submit">提交</button>
</form>
结构优化要点:

(图片来源网络,侵删)
- 使用
div.form-group:将每个表单项(包括label和input)包裹在一个div中,方便整体控制间距和布局。 - 添加
placeholder:为输入框添加提示文字,提升用户体验。 - 为输入框添加
class:class="form-control",这样我们就可以通过CSS统一控制它们的样式。 - 处理验证码:将验证码输入框和图片放在一个
div中,方便在小屏幕上让它们上下排列。
第二步:编写CSS样式实现自适应
这是实现自适应的核心,你可以将这些样式添加到你模板的CSS文件中(/templets/你的模板/style.css)。
这里我们提供一个完整、实用的CSS示例:
/* --- 基础样式 (PC端和移动端通用) --- */
.form-group {
margin-bottom: 20px; /* 表单项之间的间距 */
}
.form-group label {
display: block;
margin-bottom: 8px;
font-weight: bold;
color: #333;
}
/* 统一输入框、文本域的样式 */
.form-control {
width: 100%;
padding: 12px;
border: 1px solid #ccc;
border-radius: 4px; /* 圆角 */
box-sizing: border-box; /* 关键!让padding不会导致元素超出容器宽度 */
font-size: 16px; /* 关键!防止iOS上自动缩放 */
}
/* 提交按钮样式 */
.btn-submit {
width: 100%;
padding: 12px;
background-color: #007bff;
color: white;
border: none;
border-radius: 4px;
font-size: 16px;
cursor: pointer;
transition: background-color 0.3s;
}
.btn-submit:hover {
background-color: #0056b3;
}
/* --- 验证码区域 --- */
.captcha-row {
display: flex; /* 使用Flexbox布局 */
align-items: center; /* 垂直居中对齐 */
gap: 10px; /* 子元素间距 */
}
.captcha-row .form-control {
flex: 1; /* 输入框占据剩余所有空间 */
}
.captcha-row img {
height: 42px; /* 设置一个固定高度,与输入框匹配 */
cursor: pointer;
border: 1px solid #ccc;
border-radius: 4px;
}
/* --- 响应式样式 (针对手机和平板) --- */
@media screen and (max-width: 768px) {
/* 768px以下的设备,比如iPad、手机 */
.form-group {
margin-bottom: 15px;
}
.form-control {
padding: 10px;
font-size: 16px; /* 确保在手机上输入时不会缩放 */
}
.btn-submit {
padding: 15px;
font-size: 18px; /* 按钮字体可以稍大,方便点击 */
}
/* 在小屏幕上,让验证码区域换行 */
.captcha-row {
flex-direction: column; /* 改为垂直排列 */
align-items: stretch; /* 子元素拉伸填满宽度 */
}
.captcha-row img {
width: 100%; /* 图片宽度100% */
max-width: 150px; /* 但设置一个最大宽度,避免过长 */
margin-top: 10px;
align-self: center; /* 图片在水平方向上居中 */
}
}
@media screen and (max-width: 480px) {
/* 480px以下的设备,比如小屏手机 */
.form-group label {
font-size: 14px;
}
}
CSS代码解析:
box-sizing: border-box;:这是响应式设计的“神器”,它告诉浏览器,元素的width和height属性应该包含padding和border,这样,你设置width: 100%后,加上padding也不会导致元素溢出父容器。font-size: 16px;:为了防止在iOS Safari上,当用户点击输入框时,页面会自动放大,通常16px或以上的字体可以避免这个问题。@media screen and (max-width: 768px):这是媒体查询,当浏览器窗口宽度小于或等于768像素时,大括号内的样式就会生效。- Flexbox布局:在
.captcha-row中,我们使用display: flex让输入框和图片在一行内对齐,在手机端(max-width: 768px),我们通过flex-direction: column将其改为垂直排列,完美解决了在小屏幕上显示不下的问题。
第三步:在织梦后台进行设置
-
创建自定义表单 登录织梦后台 -> 核心 -> 频道模型 -> 自定义表单。
- 表单名称:填写你的表单名称,如“在线留言”。
- 表单模板:选择你刚刚修改好的模板页面(或者选择默认,然后在模板里直接写HTML)。
- 保存位置:选择一个栏目,提交成功后数据会保存在这里。
- 成功提示:可以设置提交成功后跳转的页面或提示文字。
- 点击“保存”,系统会给你一个表单ID,记下这个ID(
diyid=1)。
-
在模板中调用表单 在你需要显示表单的模板文件(
index.htm)中,使用以下代码调用:{dede:diyform name='myform'/}name='myform'必须和你创建的自定义表单的表名一致。 -
确保模板加载了CSS文件 确保你的模板文件(
head.htm或index.htm的头部)正确引入了你的CSS文件。<link rel="stylesheet" type="text/css" href="{dede:global.cfg_templets_skin/}/style.css" />
总结与最佳实践
- 移动优先:更推荐的做法是先为手机写样式(基础样式),然后再用媒体查询为PC端写扩展样式,这样可以保证在所有设备上的基础体验是好的。
- 测试:务必在真实的手机或浏览器的开发者工具(模拟手机模式)下进行测试,检查布局、点击区域、字体大小是否合适。
- 简化:手机屏幕小,尽量减少不必要的表单项,让用户填写起来更轻松。
- 提交反馈:提交成功后,给用户一个清晰的反馈,比如弹出一个提示框或跳转到感谢页面,而不是一个冷冰冰的页面刷新。
通过以上三步,你就可以轻松地为织梦CMS的自定义表单实现一个美观、好用的手机自适应提交界面了。
