我想要一个浮动的div(称之为'侧边栏')显示100%的容器高度,并在必要时滚动.
如果侧边栏的内容(高度)超过容器的内容(高度),则应滚动.
内容是动态的,固定的高度是不可能的.
我想尽可能避免使用表格,但如果这是唯一的解决方案,我会使用它们.
我不想使用javascript.
如果表,正文和单元格都被赋予100%高度,则可以使用表格实现此效果,并且在一个单元格中,可以设置高度为100%且溢出:滚动的div.这适用于webkit(Safari和Chrome)以及IE,但在壁虎(Fx)中失败 - '失败'意味着内容比容器更多的div将扩展容器(再次仅在Fx中).如果使用带有display:table/table-row/table-cell的div,则在webkit中使用相同的想法,但在Fx和IE中都失败.如果它有用,我可以提供一个这样的样本.
使用高度为100%的iframe也可以实现这种效果,这似乎适用于所有现代浏览器,但我希望尽可能避免不必要的iframe.
我必须认为,因为可以使用上面的"黑客",所以可能使用无桌面,无框架的CSS,但超出了我的理解水平.
有什么建议?tyia.
我知道以下可能会在其他地方产生问题并且可能是糟糕的设计,但我仍然想知道为什么会失败(对于我自己的启发):
class Test {
// singleton
private function __construct(){}
private static $i;
public static function instance(){
if(!self::$i){
self::$i = new Test();
}
return self::$i;
}
// pass static requests to the instance
public static function __callStatic($method, $parameters){
return call_user_func_array(array(self::instance(), $method), $parameters);
}
private $someVar = 1;
public function getSomeVar(){
return $this->someVar;
}
}
print Test::getSomeVar();
Run Code Online (Sandbox Code Playgroud)
错误是 Using $this when not in object context
显然$ this是静态方法不可用的,但静态方法是通过call_user_func_array将它交给实例方法调用,这应该使$ this成为实例...
/编辑
我知道$ this在静态上下文中不可用.但是,这有效:
print call_user_func_array(array(Test::instance(), 'getSomeVar'), array());
这正是__callStatic重载中发生的事情,所以有些不对劲......
/编辑2
范围肯定是奇怪的处理.如果你将单例实例拉到任何其他类,它按预期工作:
class Test {
// …
Run Code Online (Sandbox Code Playgroud) 最近我问了这个问题:溢出(滚动) - 100%容器高度关于如何实现具有可变高度的垂直滚动div.
一个非常有用的用户提供了一个使用绝对定位和高度的解决方案:100%,这里:http://jsfiddle.net/TUwej/2/.在这个小提琴中,您可以看到基本的所需行为 - 滚动div将填充主容器的高度,这由'#main'元素中的内容决定.
我有点修改并使用top:0 bottom:0而不是height:100%以容纳可滚动区域上方的元素.修改后的版本可以在这里看到:http://jsfiddle.net/N6muv/3/(我意识到有一些额外的标记和类定义是空的,并且相邻的兄弟组合似乎是多余的 - 这些是实际结构)
一切都很好,除了我必须为滚动div提供一个固定的顶部坐标(注意顶部:'.sidebar-list'选择器的120px声明).我想这是相对于它上面的'.sidebar-options'元素,所以上面的选项容器可以有任意数量的选项,可滚动的div将适当地定位自己.使用固定坐标,如果添加或删除任何选项,则会发生重叠或产生不必要的空间 - 我想避免这种情况.应该出现的确切选项数量因视图而异.
我曾想过将滚动div包装在一个相对定位的容器中,但这样做会产生与bottom的冲突:0不再指示主'.wrapper'容器的高度(应该这样做).类似地,使用height:100%将使用'.wrapper'容器的计算高度,因此可滚动div将超出'.wrapper'的边界.
有没有办法保持第二个小提琴中显示的功能,但可滚动div的顶部相对于选项div的底部(可变高度)?
在此先感谢您的任何建议.
编辑:SO问我是否想要开始赏金,所以我做了(第一次) - 希望100分不算太低.仍然在寻找一个无脚本的纯css解决方案,它不涉及y轴的固定坐标或尺寸(宽度和左侧分配都可以).谢谢
我有一堆构成单个图像的图块,可以根据要求呈现(通过屏幕上可见的总图像部分).合成图像明显大于屏幕.每个图块紧邻其邻居定位,以创建单个图像的幻觉(单个图像,如果不是平铺,则会太大并且具有OOM错误).
这些是FrameLayout中的ImageViews,位于top/leftMargin.
目标API 2.2/SDK 8
我正在尝试缩放整个图像以响应用户事件(按下按钮,捏合等).
显然setScale在API 11之前不可用.我尝试在frameLayout的onDraw中使用canvas.scale和setWillNotDraw(false),并且正在调用onDraw,但是没有应用缩放(我假设因为布局本身没有任何图形信息?我曾经假设它也会渲染它的孩子,但我想不会除非我在这里也做错了.)
我想我可以遍历每个图块并独立缩放它,但每次都需要重新定位每个图块.
我必须认为有一种方法可以扩展父视图(ViewGroup?),以便它的所有子节点也可以缩放(就像负责管理GUI的所有其他语言一样).我错过了什么?
谢谢
我试图以所有有效"长度"和"百分比"单位取回一个样式属性,从该属性的原始值转换而来.
例如,如果我有一个div,style.width设置为20%,我想要一个具有该值的对象,以百分比(当然,20%),像素(无论实际像素宽度是多少),em,pt,前等
我意识到'百分比'不是'长度'值,并且并非所有接受长度值的属性都接受百分比,但也希望包括它.
当然,某些值将特定地依赖于元素,并且可能是它在DOM中的位置(例如,获取em值也将需要该元素的父计算字体大小).
我可以假设为该元素明确设置了样式 - 我知道如何检索元素的当前计算样式 - 我只是希望不重复其他人可能已经完成的工作.我也知道http://www.galasoft.ch/myjavascript/WebControls/css-length.html,但它依赖于style.pixelWidth或node.clientWidth,并在Chrome中失败(我认为它失败了Safari也是......以及其他人.)
我已经得到了颜色值(rgb,rgba,hex,name) - 这当然要简单得多.我正在使用数学上可变的值,因此实际上只需要'length'和'percent'值(如果在具有非长度,非百分比值的属性集上调用 - 如'font-size:larger' - 函数可能会失败,或抛出错误).
如果以程序方式编写,这样的事情将是理想的:
function getUnits(target, prop){
var value = // get target's computed style property value
// figure out what unit is being used natively, and it's values - for this e.g., 100px
var units = {};
units.pixel = 100;
units.percent = 50; // e.g., if the prop was height and the parent was 200px tall
units.inch = 1.39; // presumably units.pixel / 72 …
Run Code Online (Sandbox Code Playgroud) 这更多的是一个"如何应该我?" 而不是"如何做我?" 题.
通常,什么被认为是将变量传递给包含文件的最佳方法?
例如,假设我正在使用一个菜单片段,并希望其中一个菜单项(当前的一个)具有某个类名(这是一个非常通用的样本 - 不是我实际使用的):
<?php
$links = array(
array('text' => 'home', 'href' => 'home.php'),
array('text' => 'about', 'href' => 'about.php'),
array('text' => 'contact', 'href' => 'contact.php')
);
?>
<ul>
<?php for($i = 0; $i < 3; $i++) :
$link = $links[$i];
$is_active = ($i == $active_index);
?>
<li><a <?=($is_active ? 'class="active"' : '')?> href="<?=$link['href']?>"><?=$link['text']?></a></li>
<?php endfor; ?>
</ul>
Run Code Online (Sandbox Code Playgroud)
我会打电话给上面的'menu.inc.php'.很明显,它正在寻找一个变量(int)来调用$active_index
哪个链接来赋予'.active'类.
所以 - 你可以$active_index
在调用include之前定义,但这对我来说似乎是不好的做法,因为这个名称的变量可能已经为之前的其他东西定义了,并且脚本的后续部分仍然在寻找它.
或者 - 您可以使用绝对路径并使用查询字符串(include 'menu.inc.php?active_index=1'
)附加变量,但这似乎是一个坏主意,因为您可能需要$_GET …
我正在使用大量遗留数据(从平面文件数据库转换),其中字段格式化为输入记录的年份的最后2位数,然后是4位数增量...
例如,1998年创建的第三条记录为"980003",2004年创建的第11条记录为"040011".
我无法改变这些价值观 - 它们通过公司存在,在国家,客户等处注册.我知道将年份和其余部分分成不同的列是很好的,但这是不可能的.我甚至不能在"内部"真正做到这一点,因为每行有大约300个可以排序的字段,并且他们非常习惯使用这个字段作为记录标识符.
所以我试图实现一个MySQL UDF(第一次)进行排序.查询执行成功,它允许我"通过custom_sort(无论如何)从表顺序中选择任何东西",但顺序不是我所期望的.
这是我正在使用的:
DELIMITER //
CREATE FUNCTION custom_sort(id VARCHAR(8))
RETURNS INT
READS SQL DATA
DETERMINISTIC
BEGIN
DECLARE year VARCHAR(2);
DECLARE balance VARCHAR(6);
DECLARE stringValue VARCHAR(8);
SET year = SUBSTRING(0, 2, id);
SET balance = SUBSTRING(2, 6, id);
IF(year <= 96) THEN
SET stringValue = CONCAT('20', year, balance);
ELSE
SET stringValue = CONCAT('19', year, balance);
END IF;
RETURN CAST(stringValue as UNSIGNED);
END//
Run Code Online (Sandbox Code Playgroud)
记录只回到96(因此任意"如果前2个字符小于96,前置'20'否则前置'19'..我对这一点并不感到兴奋,但不相信那是核心所在问题是.
为了投入另一把扳手,事实证明1996年和1997年都是5位数,遵循上述相同的模式,而不是4位数的增量,它是3位数的增量.我再次怀疑这将是一个问题,但不是核心问题.
我通过此custom_sort获得的返回示例:
001471
051047
080628
040285
110877
020867
090744
001537
051111
080692
040349 …
Run Code Online (Sandbox Code Playgroud) 我正在创建一个需要出现在现有 UI 上方并与现有 UI 分开的组件,例如从屏幕底部滑入并固定在那里,无论当前的内容视图如何。我希望它是模块化和可移植的,因此预先假设 FrameLayout 是不现实的。
在查看 Dialog 和 PopupWindow 类的源代码时,看起来它们是使用 Window 和 WindowManager 类来完成的,但我无法找到关于这些类的文档。
有没有一种简单的方法来完成我所描述的事情?
TYIA
这个问题已经多次以各种形式提出过,但我还没有找到明确的答案.
我需要能够在Views
容器的初始布局(a contentView
)之后获得后代的尺寸和位置.在这种情况下所需的尺寸是一个不可预测的视图(组) - 可能有多行文本,最小高度以容纳装饰等.我不想在每个布局pass(onLayout
)上做每一个.我需要的测量是从一个深度嵌套的孩子,所以重写onLayout
/ onMeasure
每个集装箱之间似乎一个糟糕的选择.我不会做任何会导致循环的事情(事件中的触发事件).
Romain Guy曾暗示我们可以在.post
a Runnable
的构造函数中使用View
(AFAIK将在UI线程中).这似乎适用于大多数设备(在我个人的4个中有3个),但在Nexus S上失败.看起来像Nexus S没有任何尺寸,直到每个孩子完成一次通过,并且没有正确的尺寸当调用post
ed Runnable
的run
方法时.我尝试计算布局传递(in onLayout
)和比较getChildCount
,它再次适用于4中的3,但是不同的3(在Droid Razr上失败,似乎只进行一次传递 - 并获得所有测量 - 无论儿童的数量如何).我尝试了以上的各种排列(正常发布;发布到a Handler
;转换getContext()
为a Activity
并调用runOnUiThread
...所有的结果相同).
我最终使用了一个可怕的可耻的不善的黑客,通过检查目标群体的高度与其父母的身高 - 如果它不同,则意味着它已被布局.显然,不是最好的方法 - 但是唯一似乎在各种设备和实现之间可靠地工作的方法.我知道我们可以使用没有内置事件或回调,但有更好的方法吗?
TYIA
/编辑底线我,我的猜测是,Nexus S的不等到布局完成后,当.posting()
一Runnable
,因为是我测试过的所有其他设备的情况下,通过罗曼盖伊和其他人的建议.我还没有找到一个好的解决方法.有吗?
我签出了一个存储库,在下载过程中签出被中断(出于未知原因;下载对话框在大约 30 分钟后冻结)。我想“完成”结帐,而不必重新下载所有成功的文件。尝试“更新到修订版本”会导致有关工作副本被锁定的错误。尝试清除锁表明没有锁。
我正在使用最新版本的 TortoiseSVN(今天下载)。我对这个软件特别不熟悉,也不熟悉一般的颠覆(几年前就玩过它,今天重新安装,以便访问另一个开发人员的源代码)。
泰亚
android ×3
css ×3
php ×2
class ×1
include ×1
javascript ×1
mysql ×1
static ×1
svn ×1
tortoisesvn ×1