【问题标题】:Coordinating CSS, is there a more straightforward approach than using JS?协调CSS,有没有比使用JS更直接的方法?
【发布时间】:2014-06-11 06:24:28
【问题描述】:

我发现自己不得不经常使用 JS,因为我认为这些东西应该可以单独用 CSS 解决。

这是我正在尝试做的示例情况:

div.outer { height:{Y}px }
div.inner { padding-top:{Y}px }

我并不是很想专门设置外部div的高度,但我想要的是内部div的padding-top属性与外部div的高度相匹配。我缺少关于 CSS 的东西吗?还是 JS 是惯用的做法?

在 jQuery 中我会做这样的事情:

var y = $('div.outer').height();
$('div.inner').css('padding-top',y+'px');

虽然很少见,但禁用 JS 的客户端呢?

澄清:请注意,这不是一个“我如何在 CSS 中做到这一点”的问题。我知道目前,您不能在 CSS 中执行此操作。相反,它更多的是关于其他类型的解决方案可以实现我所追求的协调的问题。如果我只想计算初始交付的值,我可以用 vars 在 PHP 中编写 CSS,但这不是我想要的。它更多是关于协调两个元素,以便当一个元素发生变化时(由于调整窗口大小或旋转设备,或通过 AJAX 引入另一个元素等),另一个元素的样式也会随之改变以匹配它。

【问题讨论】:

  • 您目前不支持 CSS 中的变量。如果您仍想采用这种方法,您必须使用动态样式表语言,如 lesssass 解析并编译为 CSS .
  • 我不明白你想要得到什么,你想要达到什么视觉效果。
  • 您介意分享您想要实现的目标吗?可能还有另一种方法...
  • 我禁用了 js(或者,更确切地说,使用 noscript),并且看到没有 js 甚至无法呈现其初始内容的网站通常会让我立即离开

标签: javascript jquery html css


【解决方案1】:

答案是否定的,这是不可能的(目前)。 纯属巧合,我偶然发现了这样一个事实:显然,您只能padding-top 属性设置为相对于 parent element's width!?在您的演示案例中:

div.outer { width: 400px; }
div.inner { padding-top: 50%; } /* will be exactly 200px */
/* You can also set a relative width (%), or inherit it */

我制作了一个小测试用例来证明这一点:http://jsbin.com/rukabaso/1/edit。调整输出窗口的大小以查看值。设置为 50% 时; padding-top 属性正好是父级宽度的 50%,因为显然:

所有 padding/margin 属性的百分比是指父级的宽度

供参考:How is padding-top as a percentage related to the parent's width?

【讨论】:

  • 它是宽度而不是高度的百分比。这有多奇怪?
【解决方案2】:

似乎不支持 CSS 中的变量。尝试使用动态样式表,

http://www.example.com/example.css

#outer { height:{Y}px; }

#inner { padding-top:{Y}px; }

http://www.example.html

<div id="outer">

<div id="inner">

【讨论】:

    【解决方案3】:

    我认为您不能根据父项的高度设置填充。您可以使用支持变量的预处理器,如 SASS 和 LESS。

    不确定您要做什么,但我想这会产生类似的结果:

    .inner {
        transform: translateY(100%);
    }
    

    带有适当前缀的浏览器支持不错 - http://caniuse.com/transforms2d

    【讨论】:

      【解决方案4】:

      通过将 ID 或类分配给相关的 HTML 元素,完成我假设您正在尝试做的事情应该相对容易。即:

      .outer {
          height: 100px;
      }
      
      .inner {
          padding-top: 100px;
      }
      

      我想您希望 CSS 自动将 .inner padding-top 设置为 .outer 的高度,而无需不断调整 CSS。但是,正如 jmr333 所述,目前 CSS 中不支持变量。

      但在这种情况下,我不明白为什么你需要实现任何 JavaScript,而你可以调整 CSS 以满足你的需要。

      【讨论】:

      • I don't really want to specifically set the height of the outer div。我认为 OP 意味着元素的高度可能是可变的,因此硬编码值是他试图避免的。这时候就可以使用js动态设置值了。
      • @filoxo 显然是迄今为止唯一理解这个问题的发帖人。
      • @Octopus,那是因为你的解释很差,而且你没有按要求提供反馈。
      猜你喜欢
      • 2012-05-17
      • 1970-01-01
      • 2016-01-15
      • 1970-01-01
      • 2010-11-09
      • 1970-01-01
      • 2017-03-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多