小编zmt*_*thy的帖子

指定flexbox交叉大小增长值

是否有任何机制可以在flexbox的交叉轴上为布局指定flex-*样式属性?

我有一个布局,包括两个水平对齐的盒子,最小宽度在一个可变宽度的柔性盒子里.当容器太小而无法容纳两个盒子时,右侧盒子会缠绕到容器的底部.左侧框保持一定的大小,直到发生缠绕,此时它会增长以填充容器的宽度.我用以下CSS实现了这个目标:

#container {
    display: flex;
    flex-flow: row wrap;
    align-items: stretch;
}

#left {
    flex: 1 0 200px;
}

#right {
    flex: 1000 0 200px;
}
Run Code Online (Sandbox Code Playgroud)

通过设置200px的基础和0的缩小,这使得左框的最小宽度为200px,并且通过设置小的增长值而不是右框中的大的增长值,右框将填充剩余的空间和左边一个基本上不会改变大小.我以这种方式排列数字,因为当容器小于400px时,右侧盒子环绕容器的下半部分,此时左侧盒子的增长值是无争议的,并且它会增长到容器的整个大小.

我遇到的问题是横轴上产生的尺寸.如果右边的框填满了内容,它会开始溢出容器,当我需要它开始滚动时.我似乎能够在这里做的最好的事情是在容器上设置一个溢出y,它会滚动整个容器,包括左边的盒子.设置最大高度为100%仍然相对于容器的整个高度,并且设置任何其他高度值会影响未包装时盒子的高度,我需要将其拉伸到整个长度.

你可以看到这个小提琴的效果.当容器小于400px时,蓝色盒子环绕.蓝色框的最小高度为200px,因此它满足要求,然后两个框伸展以填充剩余的垂直高度.但是当你单击足够时,蓝色框开始溢出,并且溢出y不能包含它,因为它上面没有明确的高度值.

基本上我想要的是flex设置中的相同值,但对于横轴:

#left {
    cross: 1000 0 auto;
}

#right {
    cross: 1 0 200px;
}
Run Code Online (Sandbox Code Playgroud)

这样,当没有换行时,它们都会伸展以填充垂直空间,但是当换行发生时,右侧框的高度为200px,左侧框填充剩余的垂直空间.有没有办法实现这种效果,因为上述属性不存在?

css flexbox

10
推荐指数
1
解决办法
3099
查看次数

可存储的空数据声明

我正在尝试为C库创建一个Haskell包装器.底层结构太复杂,不能表达为显式类型,除了在C函数之间传递之外,我实际上并没有使用它们,所以我用它EmptyDataDecls来让GHC为我工作.

我需要的是一个指向这些数据类型之一的指针,但是当我尝试用alloca它创建一个数据类型时,它会抱怨数据不属于该类型Storable.例如:

{-# LANGUAGE ForeignFunctionInterface, EmptyDataDecls #-}

module Main where

import Foreign.Marshal.Alloc
import Foreign.Ptr

data Struct

foreign import ccall "header.h get_struct"
    get_struct :: Ptr Struct -> IO ()

main = alloca $ \ptr -> get_struct ptr
Run Code Online (Sandbox Code Playgroud)

GHC不会编译这个,说没有实例Storable Struct.我可以自己实现它:

instance Storable Struct where
    sizeOf _    = ...
    alignment _ = ...
Run Code Online (Sandbox Code Playgroud)

但这接近于击败目的 - 如果我不关心结构中的内容,我不想定义这样的事情.

我注意到指向指针的指针工作正常,因为Ptr类是Storable.所以我可以在调用之前使用peekon 来完成我的目标:ptrget_struct

main = alloca $ \ptr -> do
  ptr <- …
Run Code Online (Sandbox Code Playgroud)

haskell ffi ghc

9
推荐指数
1
解决办法
801
查看次数

C#通用约束中的通配符

我知道C#没有通用的通配符,并且泛型方法可以实现类似的效果,但是我需要在字段中使用通配符,如果有任何编码方法就无法解决.

List<State<Thing>> list;

void AddToList<T>() where T : Thing {
    list.Add(new State<T>());
}
Run Code Online (Sandbox Code Playgroud)

当然,这不起作用,因为添加的对象不是类型State<Thing>,而是类型State<T> where T : Thing.是否可以将列表的最内部类型调整为Java等效? extends Thing而不仅仅是Thing

.net c# generics covariance generic-constraints

9
推荐指数
1
解决办法
1868
查看次数

标签 统计

.net ×1

c# ×1

covariance ×1

css ×1

ffi ×1

flexbox ×1

generic-constraints ×1

generics ×1

ghc ×1

haskell ×1