【问题标题】:Add unique class to section (PHP)向部分添加唯一类(PHP)
【发布时间】:2020-08-11 18:24:43
【问题描述】:

我的网页设计为我设置了一个 CMS,但我遇到了一些问题。

目前,部分都使用相同的 css 标签 .SectionOuterAlt 或 .SectionOuter(如果有多个,则变为“Alt”。同样适用于 .SectionInner。

我搜索了“SectionOuter”并发现了这行代码。在我看来,它添加了“Alt”。

问题是我需要每个部分都是独一无二的,这样我才能添加 css。如果我可以保留 'SectionOuter' 和可能的 'SectionOuterAlt' 但为每个部分添加一个独特的 css 类,这样我就可以对每个单独的部分进行独特的更改,那就太好了。

<section class="SectionOuter<?php echo $alt; ?>">
<section class="SectionInner<?php echo $alt; ?>">

有人可以帮忙吗?

谢谢

【问题讨论】:

  • 需要查看所有代码以获取建议,这里没有太多内容..

标签: php css content-management-system


【解决方案1】:

如果您希望每个类都有唯一值,那么您可以执行以下操作:

<?php

for ($k = 1; $k <= 2; $k++)
    echo '<section class="SectionOuter SectionOuterAlt SectionOuterAlt-' . $k . '">';

for ($k = 1; $k <= 2; $k++)
    echo '<section class="SectionInner SectionInnerAlt SectionInnerAlt-' . $k . '">';

输出会是这样的:

<section class="SectionOuter SectionOuterAlt SectionOuterAlt-1">
<section class="SectionOuter SectionOuterAlt SectionOuterAlt-2">
<section class="SectionInner SectionInnerAlt SectionInnerAlt-1">
<section class="SectionInner SectionInnerAlt SectionInnerAlt-2">

【讨论】:

  • 是的,对不起._.
  • 您好,感谢您的回复!我遇到了一个奇怪的问题 - ibb.co/P5gS2sp 它虽然可以使每个部分都独一无二!但是,它为每个页面使用相同的 css 类。有没有一种方法可以让它在所有页面上都独一无二,而不仅仅是一个?谢谢!
  • 这个答案将破坏任何现有的功能/样式,这些功能/样式依赖于SectionOuterAlt 和/或SectionInner 和/或SectionInnerAlt 类以及缺少SectionOuter 类。
  • 嗯,新更新的代码似乎破坏了网站。这些部分消失了。
  • 你想要的课程可能不是这些?
【解决方案2】:

另一个答案不起作用的原因是因为它正在应用可能不合适的类,并且可能需要替换其他类。

您需要做的是保持现有类不变,并添加一个 new 类,您可以将其用于独特的样式。

在页面顶部,您可以添加一个全局变量,例如

<?php $SectionCount = 0; ?>

然后你想在哪里添加一个独特的类,你可以这样做:

<section class="SectionOuter<?php echo $alt; ?> UniqueClass-<?php echo $SectionCount++; ?>" >
<section class="SectionInner<?php echo $alt; ?> UniqueClass-<?php echo $SectionCount++; ?>" >

这将自动为每个部分添加一个新的唯一类,称为UniqueClass-n(其中n 在页面中是唯一的),而不会影响现有功能或样式。它也不限于每页只有 2 个数字或部分。

全球化

您可以通过多种方式使其全局化,具体取决于您的页面设置方式,例如

  1. 在标头代码中添加全局变量
  2. 在页面body 上使用唯一的类来定位每个页面(例如.homepage .UniqueClass-1 {} .contactpage .UniqueClass-1 {} 等)

但是,如果没有关于您当前网站的设置方式的更多信息(例如 CMS,或者可能存在哪些模板文件可将代码添加到其中),我们无法准确告诉您如何实现这一目标。

更新:

为所有页面的每个部分添加唯一编号实际上并不可行 - 有可能,但与手动添加它们相比需要付出更多(或更多)的努力(为了使其持久和一致,它必须是分配给每个部分)。

你可以:

  1. 为页面正文和部分类(如上所述)使用唯一类/ID 的组合
  2. 根据页面的某些唯一标识符为每个部分生成一个新类

在任何一种情况下,您都需要在每个页面上使用唯一标识符。这取决于您的页面是如何设置的,但如果您使用的是 CMS,那么每个 &lt;body&gt; 元素都可能添加了一个唯一的类。

1.类组合

例如,您的主页可能有 &lt;body class="homepage page-452"&gt; 之类的内容,“关于”页面可能是:&lt;body class="page-about page-818"&gt; 等。

在这种情况下,您可以使用这些类的组合来定位每个特定页面上的部分,例如

// target ONLY UniqueClass-1 on the page with the specified body class
.page-452 .UniqueClass-1 { /* CSS HERE FOR HOMEPAGE ONLY */ } 
.page-818 .UniqueClass-1 { /* CSS HERE FOR ABOUT PAGE ONLY */ } 

如果不了解您的 CMS 或生成的 HTML 的更多信息,很难给出准确的答案,但您可以这样做。

(我在您开始此答案后发表的评论中看到您的 CMS 没有唯一的正文类,因此您需要使用下一个选项:)

2。生成唯一的类

或者,要为每个页面生成一个唯一的类,如果您的 CMS 生成了一个,或者如果页面标题始终是唯一的,您可以使用 slug,您可以通过添加将其转换为适合类名的字符串this 到您声明 $SectionCount 的页面顶部,例如:

在页面顶部:

<?php 
$SectionCount = 0;
$pageClass = preg_replace( '/[^A-Za-z0-9_-]/', '', $pageTitle);
?>

然后您可以按如下方式创建您的唯一类:

<section class="SectionOuter<?php echo $alt; ?> ClassPrefix-<?php echo $pageClass."-".($SectionCount++); ?>" >
<section class="SectionInner<?php echo $alt; ?> ClassPrefix-<?php echo $pageClass."-".($SectionCount++); ?>" >

现在您可以单独定位每个页面的每个部分,如下所示:

.ClassPrefix-generated-page-class-1 { /* CSS HERE */ }
.ClassPrefix-generated-page-class-2 { /* CSS HERE */ }
/* etc */

【讨论】:

  • 谢谢!完美运行。现在我只需要知道如何让每个页面生成一个唯一的类,以便我可以为每个页面和部分做唯一的 css。非常感谢!
  • @LukeHall 没问题!您使用的是什么 CMS?我们对现有代码了解得越多,我们就越能提供帮助:)
  • 这显然是一个自定义 CMS,但该网站看起来像是引导程序。抱歉,我帮不上什么忙,我以前不熟悉自定义 CMS,但对我来说它看起来很简单。简直无法形容!
  • @LukeHall 看看我更新答案的最后一部分 - 当我看到你的评论时,我已经写了“组合类”选项,所以你需要从页面标题 - 请注意,这仅在所有页面标题都是唯一的情况下才有效,但在一个制作精良的网站中,无论如何它们对于 SEO 来说应该是唯一的:)
  • 非常感谢,太完美了!你为我节省了很多时间——非常感谢。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多